简介
“chmod” 这个命令来自于 “change mode” 的缩写,用于更改文件或目录的访问权限。这个命令允许用户设定谁可以读取、写入或执行一个文件。在 Linux 和其他类 Unix 系统中,文件权限对系统安全和用户隐私至关重要。
Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users):
使用方式
chmod [选项] 模式 文件或目录
常用参数
-c
:仅在权限被成功修改时才输出操作信息。-v
:始终输出操作信息。-R
:对目录及目录下的文件递归执行权限修改操作。-f
:阻止大多数错误信息的输出。--no-preserve-root
:不对根目录/
做特殊处理,这也是默认选项。--preserve-root
:无法在根目录下执行递归操作。--reference=RFILE
:使用参考文件或参考目录(RFILE
)的权限来设置目标文件或目标目录的权限。--help
:显示帮助信息。--version
:显示版本信息。
权限字符说明
权限字符的模式为:[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+
用户类型:
u
:表示当前用户。g
:代表和当前用户在同一个组的用户,以下简称组用户。o
:代表其他用户。a
:代表所有用户。
权限类型:
r
:代表读权限以及八进制数 4 。w
:代表写权限以及八进制数 2 。x
:代表执行权限以及八进制数 1 。X
:仅在对应文件是目录或已对一些用户有执行权限的情况下设置执行权限。s
:设置特殊模式,如使用权限组合u+s
设置用户ID
位(SUID
)或g+s
设置组ID
位(SGID
)。t
:设置粘滞位,只有目录或文件的所有者才能删除或重命名目录下的文件。
操作类型:
+
:为指定的用户类型增加权限。-
:为指定的用户类型删除权限。=
:为指定用户类型设置对应的权限,删除未提及的权限。
八进制类型:
7
:读+写+执行rwx
111
6
:读+写rw-
110
5
:读+执行r-x
101
4
:只读r--
100
3
:写+执行-wx
011
2
:只写-w-
010
1
:只执行--x
001
0
:无---
000
参考示例
1. 设定某个文件的权限为 775
chmod 775 test.txt
更新权限后使用 ls
命令查看文件的权限信息
jay@jaylinuxlenovo:~/test/chmod$ chmod 775 test.txt
jay@jaylinuxlenovo:~/test/chmod$ ls -l
total 0
-rwxrwxr-x 1 jay jay 0 Jan 1 12:02 test.txt
2. 设定某个文件让所有人都可以读取
chmod a+r test.txt
文件初始权限为 rwx------
,更新后为 rwxr--r--
。
jay@jaylinuxlenovo:~/test/chmod$ ls -l
total 0
-rwx------ 1 jay jay 0 Jan 1 12:02 test.txt
jay@jaylinuxlenovo:~/test/chmod$ chmod a+r test.txt
jay@jaylinuxlenovo:~/test/chmod$ ls -l
total 0
-rwxr--r-- 1 jay jay 0 Jan 1 12:02 test.txt
3. 设定某个目录及其内部的子文件可以被其他用户读取
chmod -R o+r dir2
目录中文件的权限初始为 rwx------
,更新后为 rwx---r--
。
jay@jaylinuxlenovo:~/test$ ls -l dir2/
total 12
drwx------ 2 jay jay 4096 Dec 6 14:51 dir3
-rwx------ 1 jay jay 27 Dec 6 15:21 test1.txt
-rwx------ 1 jay jay 27 Dec 6 14:52 test2.txt
jay@jaylinuxlenovo:~/test$ chmod -R o+r dir2
jay@jaylinuxlenovo:~/test$ ls -l dir2/
total 12
drwx---r-- 2 jay jay 4096 Dec 6 14:51 dir3
-rwx---r-- 1 jay jay 27 Dec 6 15:21 test1.txt
-rwx---r-- 1 jay jay 27 Dec 6 14:52 test2.txt
4. 去除所有用户的写权限
chmod a-w test.txt
文件的初始权限为 rwxrwxrwx
,更新后为 r-xr-xr-x
。
jay@jaylinuxlenovo:~/test/chmod$ ls -l
total 0
-rwxrwxrwx 1 jay jay 0 Jan 1 12:02 test.txt
jay@jaylinuxlenovo:~/test/chmod$ chmod a-w test.txt
jay@jaylinuxlenovo:~/test/chmod$ ls -l
total 0
-r-xr-xr-x 1 jay jay 0 Jan 1 12:02 test.txt
5. 将参考文件的权限赋给指定文件
chmod --reference test2.txt test.txt
指定文件 test.txt
的初始权限与参考文件 test2.txt
不同,再执行更新指令后可以发现指定文件的权限变得与参考文件相同。
jay@jaylinuxlenovo:~/test/chmod$ ls -l
total 0
-rw-rw-r-- 1 jay jay 0 Jan 1 13:02 test2.txt
-r-xr-xr-x 1 jay jay 0 Jan 1 12:02 test.txt
jay@jaylinuxlenovo:~/test/chmod$ chmod --reference test2.txt test.txt
jay@jaylinuxlenovo:~/test/chmod$ ls -l
total 0
-rw-rw-r-- 1 jay jay 0 Jan 1 13:02 test2.txt
-rw-rw-r-- 1 jay jay 0 Jan 1 12:02 test.txt
6. 为每个类别的用户单独设置不同的权限
chmod u=rwx,g=rw,o=r test.txt
为当前用户设置所有权限,组用户设置读写权限,其他用户设置读权限。
jay@jaylinuxlenovo:~/test/chmod$ ls -l test.txt
-r-------- 1 jay jay 0 Jan 1 12:02 test.txt
jay@jaylinuxlenovo:~/test/chmod$ chmod u=rwx,g=rw,o=r test.txt
jay@jaylinuxlenovo:~/test/chmod$ ls -l test.txt
-rwxrw-r-- 1 jay jay 0 Jan 1 12:02 test.txt
注意事项
- 模式中的数字为 8 进制形式。
- 更改文件或目录权限需要相应的权限,通常需要是文件的所有者或超级用户。
- 在使用
-R
选项递归地改变目录权限时要特别小心,因为这可能会意外更改子目录和文件的权限。 - 符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。但如果是在递归模式下,则会忽略符号链接。
- 粘滞位的作用取决于文件的类型:
- 对于目录,如果设置了粘滞位,则意味着只有文件的所有者或者目录的所有者才能删除或重命名目录内的文件。这个功能对于像
/tmp
这样的所有用户可写的目录非常有用,因为它允许多个用户访问和写入文件,但防止用户删除或重命名其他用户的文件。这就是所谓的目录“受限删除标记”。 - 对于常规文件,粘滞位在一些较老的系统上用于将程序文本映像保存在交换设备上,以便程序在运行时能够更快地加载。当然在现代系统中,这个用途通常不再有效。
- 对于目录,如果设置了粘滞位,则意味着只有文件的所有者或者目录的所有者才能删除或重命名目录内的文件。这个功能对于像