纠正错误 添加实例

chmod

用来变更文件或目录的权限

补充说明

chmod(全称:change mode)命令是用来更改文件或目录的权限。通过适当配置权限,可以控制哪些用户或用户组可以访问、读取、写入或执行特定文件或目录。

适用的Linux版本

chmod命令在所有主流的Linux发行版中都是可用的,包括但不限于Debian、Ubuntu、Alpine、Arch Linux、Kali Linux、RedHat/CentOS、Fedora、Raspbian等。如果某个Linux发行版中没有预装chmod命令,用户可以通过该发行版的包管理器(如apt、yum、dnf、pacman等)来安装。

例如,在Debian或Ubuntu上,可以使用以下命令来安装:

$ sudo apt-get install coreutils

在CentOS 7上,可以使用以下命令来安装:

$ sudo yum install coreutils

在CentOS 8上,可以使用以下命令来安装:

$ sudo dnf install coreutils

命令语法

chmod [options] mode file...

其中,mode是权限设定字符串,file是要更改权限的文件或目录。

选项

-c, --changes:只有在文件权限确实更改时才显示其更改动作。
--no-preserve-root:不将'/'特殊化处理,默认选项。
--preserve-root:不能在根目录下递归操作。
-f, --silent, --quiet:如果文件权限无法更改,不显示错误信息。
-v, --verbose:无论文件是否更改了权限,一律输出操作信息。
--reference=RFILE:使用参考文件或参考目录RFILE的权限来设置目标文件或目录的权限。
-R, --recursive:对目录以及目录下的文件递归执行更改权限操作。
--help:显示帮助信息并退出。
--version:显示版本信息并退出。

权限说明

在Linux/Unix中,文件的权限分为三级:文件所有者(Owner)、用户组(Group)、其他用户(Other Users),每个文件都与一个所有者用户或组相关联,只有文件所有者和超级用户可以修改文件或目录的权限。

img

可以使用绝对模式(八进制数字模式)或者符号模式指定文件的权限。

img

符号模式

使用符号模式可以设置多个项目:who(用户类型),operator(操作符)和 permission(权限),每个项目的设置可以用逗号隔开。 命令 chmod 将修改 who 指定的用户类型对文件的访问权限,用户类型由一个或者多个字母在 who 的位置来说明,如 who 的符号模式表所示:

who 用户类型 说明
u user 文件所有者
g group 文件所有者所在组
o others 所有其他用户
a all 所有用户, 相当于 ugo

operator 的符号模式表:

Operator 说明
+ 为指定的用户类型增加权限
- 去除指定用户类型的权限
= 设置指定用户权限的设置,即将用户类型的所有权限重新设置

permission 的符号模式表:

模式 名字 说明
r 设置为可读权限
w 设置为可写权限
x 执行权限 设置为可执行权限
X 特殊执行权限 只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行
s setuid/gid 当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限
t 粘贴位 设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位

八进制语法

chmod命令可以使用八进制数来指定权限。文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件所有者(User)的读、写、执行,用户组(Group)的读、写、执行以及其它用户(Other)的读、写、执行。历史上,文件权限被放在一个比特掩码中,掩码中指定的比特位设为1,用来说明一个类具有相应的优先级。

# 权限 rwx 二进制
7 读 + 写 + 执行 rwx 111
6 读 + 写 rw- 110
5 读 + 执行 r-x 101
4 只读 r-- 100
3 写 + 执行 -wx 011
2 只写 -w- 010
1 只执行 --x 001
0 --- 000

例如, 765 将这样解释:

示例

用符号法更改文件权限

假设我们有一个名为file1.txt的文件,我们想要给所有用户增加读取权限,可以使用以下命令:

$ chmod a+r file1.txt

这个命令将给file1.txt的所有用户增加读取权限。

用符号法删除执行权限

如果我们想要删除所有用户对file1.txt的执行权限,可以使用以下命令:

$ chmod a-x file1.txt

这个命令将删除所有用户对file1.txt的执行权限。

用符号法递归更改目录权限

如果我们想要递归地给一个目录及其所有子目录和文件增加读取权限,可以使用以下命令:

$ chmod -R a+r directory

这个命令将给directory及其所有子目录和文件的所有用户增加读取权限。

用符号法同时设置用户组和其他用户权限

如果想要同时设置用户组(g)和其他用户(o)的权限,可以使用逗号将它们分开。例如,如果希望给用户组增加写权限,并给其他用户增加读权限,可以使用以下命令:

$ chmod g+w,o+r file1.txt

此命令将给file1.txt的用户组增加写权限,并给其他用户增加读权限。

用数字法更改文件权限

假如我们希望设置文件所有者具有读取、写入和执行权限(rwx),其他用户则仅有读取权限(r),可以用数值方式表示,并使用以下命令:

$ chmod 744 file1.txt

这个命令设置file1.txt的权限,使得文件所有者具有读取、写入和执行权限,其他用户则仅有读取权限。

用数字法赋予所有权限

如果我们希望赋予文件所有用户所有权限,可以使用以下命令:

$ chmod 777 file1.txt

此命令将赋予file1.txt所有用户(用户组和其他用户)所有的读取、写入和执行权限。

用数字法移除所有权限

反之,如果我们希望移除文件的所有权限,可以使用以下命令:

$ chmod 000 file1.txt

注意事项

  1. 使用chmod命令时,需要注意文件的所有者和当前用户的关系。只有文件的所有者和超级用户可以更改文件的权限。

  2. 该命令是GNU coreutils包中的命令,相关的帮助信息请查看man chmodinfo coreutils 'chmod invocation'

  3. 符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。

  4. 使用-R选项一定要保留当前用户的执行和读取权限,否则会报错!