Linux chmod ( change mode ) 命令用于修改文件或目录的读、写、执行访问控制权限。

chmod 命令可以修改三类读、写、执行访问控制权限,具体为:文件所有者的读、写、执行访问控制权限,组的读、写、执行访问控制权限,其他用户的读、写、执行访问控制权限。

Linux / Unix 系统的文件访问权限分为三类,具体解释说明: 文件所有者(u, user 或 owner)、用户组(g, group)、其它用户(o, other Users),全部用户使用 a(all)表示。 每一类的权限由三个比特位表示,从左至右分别表示(read,读)、(write,写)与(execute,可执行)。 权限可以使用字符表示:r 表示(read,读)、w 表示(write,写)与 x 表示(execute,可执行)。 权限也可以使用八进制数字表示:4 表示(read,读)、2 表示(write,写)与 1 表示(execute,可执行) 如果相应的权限位显示为 -,则表示不具有相应的权限(可使用 ls -l 命令查看具体权限)。

具体权限的划分如图所示:

Linux / Unix 系统的文件访问权限解释图

解释:file type 为 - 时表示文件,为 d 时表示目录

chmod 命令的定义解释

在 Linux 或 FreeBSD 系统中,chmod ( change mode ) 用于命令用于修改文件或目录的读、写、执行访问控制权限。chmod 命令一次可以修改一个文件,多个文件或者是目录的访问控制权限。

权限位解释说明

1、文件权限位说明

权限字符对文件的影响
读权限-文件不可读,无法查看文件内容
r文件可读,可查看文件内容
写权限-文件不可写,无法更改文件内容
w文件可写,可更改文件内容
执行权限-文件不可被执行
x文件可以被执行
s如果在用户三元权限中,则设置 setuid 位。如果在组三元权限中,则设置 setgid 位,这也意味着设置了 x 标志。当在文件上设置 setuidsetgid 标志时,则以文件的所有者和(或)组权限执行
Ss 相同,但未设置 x 标志,这个标志很少用于文件
t如果在其他用户三元权限中,则设置 sticky 位,这也意味着设置了 x 标志,这个标志在文件上是无用的。
Tt 相同,但未设置 x 标志,这个标志在文件上是无用的。

2、目录权限位说明

权限字符对文件的影响
读权限-无法显示目录
r可以显示目录的内容
写权限-不能更改目录的内容
w目录的内容可以修改
执行权限-命令不能转到该目录
x可通过cd 命令进入目录
s如果在用户三元权限中,则设置 setuid 位。如果在组三元权限中,则设置 setgid 位,这也意味着设置了 x 标志。当在目录上设置 setgid 标志时,在其中创建的新文件将继承目录组ID (GID),而不是创建该文件的用户的主组ID。setuid对目录没有影响
Ss 相同,但未设置 x 标志,这个标志在目录上是无用的
t如果在其他用户三元权限中,则设置 sticky 位,这也意味着设置了 x 标志。当在目录上设置 sticky 位时,只有文件的所有者、目录的所有者或管理用户可以删除或重命名目录中的文件。。
Tt 相同,但未设置 x 标志,这个标志在目录上是无用的。

chmod 命令语法

chmod [选项]...  符号模式[,符号模式]...  文件列表...
chmod [选项]...  八进制模式字符串  文件列表...
chmod [选项]...  --reference=参考文件  文件列表...
  • [选项]:选项带着中括号 [] 表示可选,使用时可以提供,也可以不提供。

chmod 命令的符号模式语法

chmod 命令的符号模式的具体语法:

chmod [选项]...  (ugoa...)(-+=)(权限...)[, (ugoa...)(-+=))(权限...)]...  文件列表...

1、第一组符号[ugoa...]是用户符号,定了可以修改哪类用户对文件的访问控制权限:

用户符号 解释说明
u user owner 文件所有者
g group 用户组
o other users 其他所有用户
a all 所有用户,等同于 ugo

注意:如果省略用户符号,则默认为 a,且不影响 umask 命令设置的权限。

2、第二组符号([-+=])是操作符号,它定义了是要删除、添加或设置权限:

操作符号 解释说明
- 移除、删除指定的权限
+ 添加指定的权限
= 将当前权限更改为指定的权限,如果在=符号之后没有指定权限,则删除给定用户的所有权限

注意:权限(perms…)可以使用 0 或 r,w, x, x, s 和 t 字母中的一个或多个显式设置。当为多个用户类([,…])设置权限时,使用逗号(不含空格)分隔符号模式。

chmod 命令的八进制模式语法

chmod 命令的八进制模式的具体语法:

chmod [选项]...  八进制模式字符串  文件列表...

八进制模式字符串 由 3 或 4 个八进制数组成。

使用 3 位八进制数字

1、当使用 3位八进制数字时,第一个数字表示文件所有者的权限,第二个数字表示组的权限,最后一个数字表示其他用户的权限。

每个写、读、执行权限的八进制数值如下:

八进制数值 对应权限 对应符号
4 读权限 r
2 写权限 w
1 可执行权限 x
0 不具有任何权限

注:特定用户类的权限数值由各权限值的总和表示。

要在八进制模式下找出文件的权限,只需计算所有用户类的总数。例如,要赋予文件的所有者读、写和执行权限,赋予组读和执行权限,赋予其他用户读权限,可以这样做:

用户类型 八进制数值计算方式
所有者 rwx=4+2+1=7
r-x=4+0+1=5
其他用户 r--=4+0+0=4

权限与数值对应表:

八进制数值 权限 对应符号
7 读 + 写 + 执行 rwx
6 读 + 写 rw-
5 读 + 执行 r-x
4 r--
3(不常用) 写 + 执行 -wx
2(不常用) -w-
1 执行 --x
0 不具有任何权限 ---

使用 4 位八进制数字

4 位八进制数字中,左侧的第 1 位八进制数字用来设置 setuidsetgidsticky 位标志,数值的含义如下:

八进制数值 所表示的意义
4 设置 setuid
2 设置 setgid
1 设置 sticky
0 不做修改设置

后面的 3 位数字的含义与使用 3 位八进制数字时的含义相同。

如果第一个数字为 0,则可以省略,并且模式可以用3位数字表示,如:数字模式0755755相同。

chmod 命令使用示例

chmod 的所有命令都可以使用 sudo 命令执行。

chmod 命令的符号模式使用示例

1、使组(组内用户)对文件 file1.txt 具有写权限:

chmod g+w file1.txt

2、使所有用户对文件 file1.txt 具有读权限:

chmod a+r file1.txt

3、取消组(组内用户)对文件 file1.txt 的读权限:

chmod g-w file1.txt

4、取消组(组内用户)对文件 file1.txt 的读权限,使其他用户对文件具有读权限:

chmod g-w, o+r file1.txt

chmod 命令的八进制模式使用示例

八进制模式必须使用一个完整的八进制模式字符串,由 3 位或 4 位八进制数组成。

使用八进制模式会同时修改三类用户的访问权限。

1、使文件所有者和组(组内用户)对文件 file1.txt 具有读写权限:

chmod 660 file1.txt

2、使文件所有者对文件 file1.txt 具有读权限,组和其他用户具有读权限:

chmod 644 file1.txt

3、取消组(组内用户)对文件 file1.txt 的读写权限:

chmod 600 file1.txt

4、使所有用户对文件 file1.txt 的读、写、执行权限:

chmod 777 file1.txt

chmod 命令选项解释

如下给出了 Linux chmod 命令中所有选项的解释说明:

选项 解释说明
-c, --changes 类似 -v, --verbose 参数, 但只在发生变化时才会输出信息
-f, --silent, --quiet 隐藏大多数错误信息
-v, --verbose 对于处理的每个文件,都输出处理的详细信息
--no-preserve-root (默认设置)不对 '/' 特殊处理
--preserve-root 不允许递归修改根目录 '/' 下所有文件组
--reference=参考文件 使用参考文件的模式作为模式值
-R, --recursive 递归的修改目录下所有文件的组
--help 显示帮助信息后退出
--version 显示版本信息后退出

结语

在本教程中我们介绍了如何使用 chmod ( change mode ) 用于修改文件或目录的读、写、执行访问控制权限,chmod 命令可以修改三类读、写、执行访问控制权限,具体为:文件所有者的读、写、执行访问控制权限,组的读、写、执行访问控制权限,其他用户的读、写、执行访问控制权限。chmod 命令一次可以修改一个文件,多个文件或者是目录的访问控制权限。

该 chmod 命令可以在 Linux 系统中使用,也可以在 FreeBSD 系统中使用。