Linux文件权限管理命令学习

2023-05-16

你必须非常努力,才能看起来毫不费力!

微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero !

前言

本篇文章主要讨论Linux中的文件权限管理命令,包括更改文件权限、文件所有者、文件所有组和默认权限,大家一起来学习吧!

chmod

chmod: change the permission mode of a file

Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。权限分为三种:可读、可写、可执行。可以通过更改不同用户的权限来保护文件。

image-20211009004706124

命令格式

chmod [-cfvR] mode file

命令描述

谁可以更改文件权限:文件所有者或者root用户

选项

-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)

权限有两种方式可以设置:

1. [{ugoa}{+-=}{rwx}] [文件或目录]

2. [mode=421] [文件或目录]
  1. 第一种通过对不同角色增加、减少或者设定权限,完成chmod

u:所有者 g:所属组 o:其他 a:所有角色

+:增加权限 -:减少权限 =:设定权限

r:读权限 w:写权限 x:执行权限

# 新建文件的权限为 rw-r--r--
[root@VM-0-5-centos ~]# touch test.txt
[root@VM-0-5-centos ~]# ls -l
总用量 0
-rw-r--r-- 1 root root 0 109 01:00 test.txt

# 所有者增加执行权限,所属组增加写权限
[root@VM-0-5-centos ~]# chmod u+x,g+w test.txt
# 查看权限
[root@VM-0-5-centos ~]# ls -l
总用量 0
-rwxrw-r-- 1 root root 0 109 01:00 test.txt

可以看出这种比较繁琐,需要对每个角色完成设定。

  1. 由于权限对应的是 r w x,对应 4 2 1,可以通过数字表示不同的权限

即r - 4 ; w - 2 ; x - 1

那么 rwxrw-r-- 可以表示为 764

通过该方式,可以一次性对所有角色设置权限,比第一种要简便先,但是要先将权限对应到具体的数值上

# 新建文件的权限为 rw-r--r-- 
[root@VM-0-5-centos ~]# touch new.txt
[root@VM-0-5-centos ~]# ls -l
总用量 0
-rw-r--r-- 1 root root 0 109 01:09 new.txt

# 设置文件权限为 764
[root@VM-0-5-centos ~]# chmod 764 new.txt
[root@VM-0-5-centos ~]# ls -l
总用量 0
-rwxrw-r-- 1 root root 0 109 01:09 new.txt

文件目录权限总结

代表字符权限对文件的含义对目录的含义
r读权限可以查看文件内容可以列出目录中的内容
w写权限可以修改文件内容可以在目录中创建、删除文件
x执行权限可以执行文件可以进入目录

易混淆点

我们下面做个实验,使用root用户新建一个文件夹,给文件夹权限777,并在文件夹中新建一个文件。那么有个问题:非root用户是否可以删除该文件呢?可以思考下再看后面的内容。

[root@VM-0-5-centos ~]# cd /opt
[root@VM-0-5-centos opt]# ls
redis-6.2.4  redis-6.2.4.tar.gz  rh

# 1. 新建文件夹和文件,并设置文件夹权限为777
[root@VM-0-5-centos opt]# mkdir movie
[root@VM-0-5-centos opt]# touch movie/list.txt
[root@VM-0-5-centos opt]# ls
movie  redis-6.2.4  redis-6.2.4.tar.gz  rh
[root@VM-0-5-centos opt]# chmod 777 movie/

# 2. list.txt文件,只有所有者有写权限
[root@VM-0-5-centos opt]# cd movie/
[root@VM-0-5-centos movie]# ls -l
总用量 0
-rw-r--r-- 1 root root 0 109 18:09 list.txt

# 3. 新建用户,切换用户
[root@VM-0-5-centos opt]# useradd user1
[root@VM-0-5-centos opt]# su - user1
[user1@VM-0-5-centos ~]$ cd /opt/movie

# 4. 删除文件成功
[user1@VM-0-5-centos movie]$ rm list.txt
rm: remove write-protected regular empty file ‘list.txt’? y
[user1@VM-0-5-centos movie]$ ls

从上面的实验可以看出,想要删除文件,不需要对文件有写权限,而是需要对文件夹有写权限。对于文件的写权限,只是可以修改文件内容,而不是删除文件。而对目录的写权限,则可以删除目录中的文件。

chown

命令格式

chown [用户] [文件或目录]

命令描述

chown:change file ownership

作用:改变文件或目录的所有者

限制:改变文件的所有者,需要root权限才能执行

示例

# 1. 新建文件
[root@VM-0-5-centos tmp]# touch a.txt

# 2. 查看所有者为root
[root@VM-0-5-centos tmp]# ls -l
total 0
-rw-r--r-- 1 root root 0 Oct  9 18:31 a.txt

# 3. 改变所有者
[root@VM-0-5-centos tmp]# chown user1 a.txt

# 4. 所有者权限变为 user1
[root@VM-0-5-centos tmp]# ls -l
total 0
-rw-r--r-- 1 user1 root 0 Oct  9 18:31 a.txt

chgrp

命令格式

chgrp [用户组] [文件或目录]

命令描述

chgrp:change file group ownership

功能:改变文件或者目录的所属组

权限:允许普通用户改变文件所属的组,只要该用户是该组的一员

示例

# 1. 新建文件
[root@VM-0-5-centos tmp]# touch b.txt
[root@VM-0-5-centos tmp]# ls -l
total 0
-rw-r--r-- 1 root root 0 Oct  9 18:38 b.txt

# 2. 添加一个组 
[root@VM-0-5-centos tmp]# groupadd stu

# 3. 改变所属组
[root@VM-0-5-centos tmp]# chgrp stu b.txt
[root@VM-0-5-centos tmp]# ls -l
total 0
-rw-r--r-- 1 root stu  0 Oct  9 18:38 b.txt

umask

命令格式

umask [-S]

命令描述

  • 显示新建的文件或者目录的默认权限
  • 默认显示的权限是4位,第一位是特殊权限,暂不需要关注;后三位需要与777异或后,才是默认权限。

注意:计算后的权限是文件夹的权限,对于文件要去掉执行权限,Linux中默认新建的文件都没有执行权限!!!!

示例

# 1. 第一位不需要关注,022异或777后,为755,即默认权限为 rwxr-xr-x
[root@VM-0-5-centos tmp]# umask
0022

# 2. 新建文件夹,验证确实为 rwxr-xr-x
[root@VM-0-5-centos tmp]# mkdir test
[root@VM-0-5-centos tmp]# ls -l
drwxr-xr-x 2 root root 4096 Oct  9 18:52 test

# 3. 新建文件,默认都去掉了执行权限,为 rw-r--r--
[root@VM-0-5-centos tmp]# touch c.txt
[root@VM-0-5-centos tmp]# ls -l
-rw-r--r-- 1 root root    0 Oct  9 18:55 c.txt
drwxr-xr-x 2 root root 4096 Oct  9 18:52 test

选项

  • -S:以 rwx 的形式显示文件夹的默认权限,直接就是对应的文件夹权限,不需要再进行异或操作
[root@VM-0-5-centos tmp]# umask -S
u=rwx,g=rx,o=rx

更改umask默认值

umask 权限值

通过上述命令可以更改新建文件夹和文件的默认权限,需要注意的是,该值与777异或后才是真正的权限值。因此可以先将想要的权限值与777异或,得到的就是这里的权限值。

比如想要默认权限为700,700异或777为077,这里的权限值就为077。

不建议使用该命令修改默认权限值!!!

[root@VM-0-5-centos tmp]# umask 077
[root@VM-0-5-centos tmp]# mkdir test3

# 077 与 777 异或后为 700
[root@VM-0-5-centos tmp]# ls -l
drwx------ 2 root root 4096 Oct  9 19:00 test3

总结

本文介绍了Linux文件权限管理命令:

  • chmod:更改文件权限
  • chown:更改文件所有者
  • chgrp:更改文件所有组
  • umask:查看和修改默认文件权限

更多

个人博客: https://lifelmy.github.io/

微信公众号:漫漫Coding路

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux文件权限管理命令学习 的相关文章

  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • 如何在Linux内核源代码中打印IP地址或MAC地址

    我必须通过修改 Linux 内核源代码来稍微改变 TCP 拥塞控制算法 但为了检查结果是否正确 我需要记录 MAC 或 IP 地址信息 我使用 PRINTK 函数来打印内核消息 但我感觉很难打印出主机的MAC IP地址 printk pM
  • Linux 内核标识符中前导和尾随下划线的含义是什么?

    我不断遇到一些小约定 比如 KERNEL Are the 在这种情况下 是内核开发人员使用的命名约定 还是以这种方式命名宏的语法特定原因 整个代码中有很多这样的例子 例如 某些函数和变量以 甚至 这有什么具体原因吗 它似乎被广泛使用 我只需
  • os.Mkdir 和 os.MkdirAll 权限

    我正在尝试在程序开始时创建一个日志文件 我需要检查是否 log如果不创建目录 则目录存在 然后继续创建日志文件 好吧 我尝试使用os Mkdir 也os MkdirAll 但无论我在第二个参数中输入什么值 我都会得到一个没有权限的锁定文件夹
  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • iptables通过注释删除特定规则

    我需要删除一些具有相同评论的规则 例如 我有带有 comment test it 的规则 所以我可以像这样获得它们的列表 sudo iptables t nat L grep test it 但是我怎样才能删除所有带有注释 测试它 的 PR
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • 为什么我可以直接从 bash 执行 JAR?

    我是一个长期从事 Java 工作的人 并且知道运行带有主类的 JAR 的方法MANIFEST MFJar 中的文件很简单 java jar theJar jar 我用它来启动 Fabric3 服务器 包含在bin server jar在其标
  • 将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住

    我目前正在致力于在 Linux VM 上实现一个可运行的 jar 作为后台服务 我已经使用了找到的例子here https gist github com shirish4you 5089019作为工作的基础 并将 start 方法修改为
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • 如何更改 Apache 服务器的根目录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何更改 Apache 服务器的文档根目录 我基本上想要localhost从 来 users spencer projects目录而不是
  • Gtk-ERROR **:检测到 GTK+ 2.x 符号

    我正在使用 gcc 编译我的 c 应用程序 并使用以下标志 gcc evis c pkg config cflags libs gtk 2 0 libs clutter gtk 1 0 libs gthread 2 0 Wall o evi
  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • 按进程名称过滤并记录 CPU 使用情况

    Linux 下有选项吗顶部命令 https www man7 org linux man pages man1 top 1 html我可以在哪里按名称过滤进程并将每秒该进程的 CPU 使用情况写入日志文件 top pgrep 过滤输出top
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件
  • 如何减去两个 gettimeofday 实例?

    我想减去两个 gettimeofday 实例 并以毫秒为单位给出答案 这个想法是 static struct timeval tv gettimeofday tv NULL static struct timeval tv2 gettime
  • 我如何知道 C 程序的可执行文件是在前台还是后台运行?

    在我的 C 程序中 我想知道我的可执行文件是否像这样在前台运行 a out 或者像这样 a out 如果你是前台工作 getpgrp tcgetpgrp STDOUT FILENO or STDIN FILENO or STDERR FIL
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • 高效的内存屏障

    我有一个多线程应用程序 其中每个线程都有一个整数类型的变量 这些变量在程序执行期间递增 在代码中的某些点 线程将其计数变量与其他线程的计数变量进行比较 现在 我们知道在多核上运行的线程可能会无序执行 一个线程可能无法读取其他线程的预期计数器

随机推荐

  • mapreduce python编程实例

    mapreduce python编程实例 1 mapreduce使用python WordCount实例 1 1 mapper函数使用 vi mapper py usr bin python coding utf 8 Filename ma
  • Centos7安装KVM虚拟化

    Centos7安装部署KVM 一 配置网桥 1 备份原来的配置文件2 修改配置文件a 修改已连接的网卡配置文件 以ifcfg eno1为例 b 配置网桥配置文件 xff08 以ifcfg br0为例 xff09 c 重启网卡 xff08 建
  • Nanopi M4 基于Opencv 打开USB摄像头

    一 环境选择 首次使用Nanopi M4 ARM板 xff0c 最初加载的是官方给的rk3399 sd friendlydesktop bionic 4 4 arm64 20190523 img xff0c 但我最终放弃使用该系统 xff0
  • “学C语言计划”后续

    从上一篇日记 学C语言计划 到现在已经过去了一个季节了 季节翻页 xff0c 而我菜鸟依旧 xff01 连大自然节奏都跟不上 xff0c 这真是要作死的节奏啊 几天前 xff0c 考完了高数和C语言 xff0c 顺便 玩完 了 后天要考英语
  • 解决KEIL中ARM编译器不能编译的问题

    keil编译器出现问题 xff0c 根据提示意思就是ARM编译器选择不对的问题 Target 39 Printf 39 uses ARM Compiler 39 V5 06 update 6 build 750 39 which is no
  • C++ ZeroMQ 发布订阅模式例子跟注意事项

    发布订阅模式 接收端 xff1a void context void subscriber 第一步 xff1a zmq ctx new 创建context对象 context 61 zmq ctx new 第二步 xff1a 创建socke
  • 目标检测算法——anchor free

    一 anchor free 概述 1 先要知道anchor 是什么 xff08 这需要先了解二阶段如faster rcnn xff0c 一阶检测器如YOLO V2以后或SSD等 xff09 在过去 xff0c 目标检测通常被建模为对候选框的
  • 度量学习(Metric learning)—— 基于分类损失函数(softmax、交叉熵、cosface、arcface)

    概述 首先 xff0c 我们把loss归为两类 xff1a 一类是本篇讲述的基于softmax的 xff0c 一类是基于pair对的 xff08 如对比损失 三元损失等 xff09 基于pair对的 xff0c 参考我的另一篇博客 xff1
  • Oauth2知识总结

    官网 xff1a OAuth Community Site OAuth是一个关于授权 xff08 authorization xff09 的开放网络工业标准 xff0c 允许用户授权第三方应用访问用户存储在其它应用上的信息 xff0c 而不
  • 重构技巧之策略模式优化业务代码

    重构技巧之策略模式优化业务代码 策略模式对业务代码进行重构背景分析 在日常的开发过程中 xff0c 我们肯定会遇到很多if else或者switch case的业务代码 xff0c 作为维护这类代码的开发者来说 xff0c 分支太长 xff
  • 64位Ubuntu使用john破解密码的No password hashes loaded

    最近研究了一下Linux的密码破解 xff0c 因为正好在学习computer security 计算机信息安全 这门课 我在使用 john the ripper 的时候遇到了一个问题 No password hashes loaded 今
  • Java常量池详解之抓狂的面试题

    今天My partner问我一个让他头疼的Java question xff0c 求输出结果 xff1a 64 author DreamSea 2011 11 19 public class IntegerTest public stati
  • PC软件问题定位工具-windbg

    windbg工具使用 windbg是微软的工具 xff0c 可以从百度或微软官网获取 工具支持 xff1a 分析dmp文件 定位CPU 内存 崩溃等异常问题 代替VS调试C 43 43 程序 这里主要整理了收集或分析dmp文件的相关命令 x
  • Ubuntu18.04使用RealVNC进行远程桌面连接

    可以直接查看最新的 xff1a RealVNC Server Ubuntu 20 04 无显示器连接 虚拟显示器 捉不住的鼬鼠的足迹 CSDN博客 使用Linux服务器 xff0c 在一般情况下是不太用桌面环境的 不过现在我想着开发用Lin
  • CMakeLists.txt 详解

    目录 CMakeLists txt用例详解 xff08 WDS中的用例 xff09 CMakeLists txt作用 生成对象库OBJECT实例 xff08 wds libwds common CMakeLists txt xff09 生成
  • ubuntu16.10安装numpy, scipy, matplotlib

    在Python3 x中安装numpy sudo apt get span class hljs keyword install span python3 pip pip3 span class hljs keyword install sp
  • Linux进程状态分析

    最近在看APUE过程中 xff0c 遇到了一个有关于进程的 僵死进程 的状态 既然遇到了进程状态的问题 xff0c 索性就查了查 Linux内核设计与实现 xff0c 里面给出了5种状态 xff0c 分别是 TASK RUNNING TAS
  • IDEA自动生成Javadoc代码注释

    在日常写代码时往往不会注重注释的格式 规范等问题 xff0c 可能注释都不会写 xff0c 但是一旦代码完成后要交付他人 xff0c 就需要考虑注释的问题了 xff0c 因为重要函数 方法的注释往往对整个代码的阅读起着十分重要的作用 xff
  • VNC连接远程服务器

    记录探索之路 由于跑深度学习算法 xff0c 需要连接服务器 xff0c 以前都是利用XShell连接 xff0c 也比较好用 xff0c 但是没有界面 VNC可以展示界面 xff0c 更加清晰 xff0c 以下是探索的方法 1 下载软件
  • Linux文件权限管理命令学习

    你必须非常努力 xff0c 才能看起来毫不费力 xff01 微信搜索公众号 漫漫Coding路 xff0c 一起From Zero To Hero 前言 本篇文章主要讨论Linux中的文件权限管理命令 xff0c 包括更改文件权限 文件所有