chmod
(Change Mode)是Unix和类Unix系统(如Linux和macOS)中用于更改文件或目录权限的命令。通过chmod
,你可以设置文件的读(read)、写(write)和执行(execute)权限,以控制不同用户类别(所有者、所属组、其他人)对文件的访问权限。
权限基础
在Unix-like系统中,每个文件都有三种用户类别及其对应的权限:
- 所有者(User):文件的所有者。
- 所属组(Group):文件所属的用户组。
- 其他人(Others):既不是所有者,也不属于所属组的其他用户。
每种用户类别都有三种权限:
• 读(Read, r):查看文件内容或列出目录内容。 • 写(Write, w):修改文件内容或在目录中创建、删除、重命名文件。 • 执行(Execute, x):执行文件或进入目录。
权限可以用符号表示(如rwx
)或数字表示(如755
)。
使用符号方式赋予权限
符号方式通过指定用户类别、操作符和权限来更改权限。
语法
chmod [ugoa...][+-=][rwx...] 文件名
• 用户类别: • u
:所有者 • g
:所属组 • o
:其他人 • a
:所有用户(等同于ugo
)
• 操作符: • +
:添加权限 • -
:移除权限 • =
:设置权限
• 权限: • r
:读 • w
:写 • x
:执行
示例
给所有者添加执行权限
bashchmod u+x script.sh
这条命令为
script.sh
文件的所有者添加了执行权限。移除所属组的写权限
bashchmod g-w script.sh
这条命令移除了
script.sh
文件所属组的写权限。为所有用户设置读和执行权限
bashchmod a=rx script.sh
这条命令将
script.sh
文件的所有用户的权限设置为只读和执行,移除了写权限。
使用数字方式赋予权限
数字方式通过为每种权限分配一个数值,并将这些数值相加来设置权限。
权限对应的数值
• 读(Read):4 • 写(Write):2 • 执行(Execute):1
可以将这些数值相加来表示多种权限。例如:
• rwx
= 4 + 2 + 1 = 7 • rw-
= 4 + 2 = 6 • r-x
= 4 + 1 = 5
语法
chmod [数字权限] 文件名
数字权限可以针对所有者、所属组和其他人分别设置,使用三位数表示。例如,755
表示所有者有读、写、执行权限,所属组和其他人有读和执行权限。
示例
设置文件为所有者可读、写、执行,所属组和其他人可读、执行
bashchmod 755 script.sh
解析: • 所有者:
rwx
= 7 • 所属组:r-x
= 5 • 其他人:r-x
= 5设置文件为所有者可读、写,所属组和其他人只读
bashchmod 644 document.txt
解析: • 所有者:
rw-
= 6 • 所属组:r--
= 4 • 其他人:r--
= 4设置文件为所有者可读、写、执行,所属组可读、执行,其他人无权限
bashchmod 750 script.sh
解析: • 所有者:
rwx
= 7 • 所属组:r-x
= 5 • 其他人:---
= 0
递归更改权限
如果你需要更改目录及其所有子目录和文件的权限,可以使用-R
选项进行递归操作。
示例
chmod -R 755 /path/to/directory
这条命令将/path/to/directory
目录及其所有子目录和文件的权限设置为755
。
特殊权限
除了基本的读、写、执行权限外,Unix-like系统还支持一些特殊权限,如Setuid、Setgid和Sticky Bit。这些权限可以通过在数字权限前添加额外的位来设置。
示例
设置Setuid权限
bashchmod 4755 script.sh
解析: •
4
表示设置Setuid位。 •755
表示基本权限。设置Setgid权限
bashchmod 2755 directory/
解析: •
2
表示设置Setgid位。 •755
表示基本权限。设置Sticky Bit
bashchmod 1777 /tmp
解析: •
1
表示设置Sticky Bit。 •777
表示基本权限。
注意:特殊权限的使用需要谨慎,因为它们可能带来安全风险。
总结
chmod
命令通过符号方式或数字方式为文件和目录设置权限,帮助你控制不同用户类别对文件的访问权限。理解并正确使用chmod
对于系统安全和文件管理至关重要。
常用示例回顾
• 赋予所有者完全权限,所属组和其他人只读权限
chmod 644 file.txt
• 赋予所有者读、写、执行权限,所属组和其他人读、执行权限
chmod 755 script.sh
• 递归赋予目录及其内容读、写、执行权限
chmod -R 755 /path/to/directory