chmod 命令 #
chmod
命令(change mode)用于更改文件或目录的权限模式。在 Linux 系统中,每个文件和目录都有一组权限,决定了谁可以读取、写入或执行它们。
语法 #
chmod [选项] 模式 文件...
常用选项 #
选项 | 描述 |
---|---|
-c, --changes |
只报告已更改的文件 |
-f, --silent, --quiet |
不显示大多数错误消息 |
-v, --verbose |
显示每个处理的文件的详细信息 |
-R, --recursive |
递归更改文件和目录 |
--reference=参考文件 |
使用指定的参考文件的模式而不是指定的模式值 |
权限模式 #
权限可以通过两种方式指定:
1. 符号模式 #
[ugoa...][[+-=][rwxXst...]...]
u
- 文件所有者g
- 文件所属组o
- 其他用户a
- 所有用户(默认)+
- 添加指定权限-
- 移除指定权限=
- 设置指定权限,移除未指定的权限r
- 读权限w
- 写权限x
- 执行权限X
- 如果文件是目录或已有执行权限,则设置执行权限s
- 设置用户或组 IDt
- 设置粘滞位
2. 八进制模式 #
使用三位或四位八进制数表示权限:
- 第一位(可选):特殊权限
4
- 设置用户 ID2
- 设置组 ID1
- 粘滞位
- 第二位:所有者权限
4
- 读2
- 写1
- 执行
- 第三位:组权限
4
- 读2
- 写1
- 执行
- 第四位:其他用户权限
4
- 读2
- 写1
- 执行
常见用法 #
1. 使用八进制模式设置权限 #
chmod 755 file.txt
这将设置所有者拥有读、写、执行权限(7=4+2+1),组和其他用户拥有读和执行权限(5=4+1)。
2. 使用符号模式添加权限 #
chmod u+x script.sh
这将为文件所有者添加执行权限。
3. 使用符号模式移除权限 #
chmod o-w file.txt
这将移除其他用户的写权限。
4. 使用符号模式设置多个权限 #
chmod u+rwx,g+rx,o+r file.txt
这将为所有者添加读、写、执行权限,为组添加读和执行权限,为其他用户添加读权限。
5. 递归更改目录及其内容的权限 #
chmod -R 755 directory/
6. 设置与参考文件相同的权限 #
chmod --reference=reference_file.txt target_file.txt
7. 只为目录设置执行权限 #
chmod -R u+X directory/
这将只为目录添加执行权限,不会更改文件的执行权限。
8. 设置粘滞位 #
chmod +t directory/
这将设置目录的粘滞位,只有文件所有者、目录所有者或 root 用户可以删除或重命名目录中的文件。
9. 设置 SUID 位 #
chmod u+s executable_file
这将设置 SUID 位,使文件在执行时具有所有者的权限。
10. 设置 SGID 位 #
chmod g+s directory/
这将设置 SGID 位,在该目录中创建的新文件将继承目录的组所有权。
常见权限组合 #
八进制 | 符号 | 描述 |
---|---|---|
777 |
rwxrwxrwx |
所有人都有完全权限(通常不推荐) |
755 |
rwxr-xr-x |
所有者有完全权限,组和其他人可读和执行 |
700 |
rwx------ |
只有所有者有完全权限 |
644 |
rw-r--r-- |
所有者可读写,组和其他人只能读 |
600 |
rw------- |
只有所有者可读写 |
444 |
r--r--r-- |
所有人都只能读 |
1777 |
rwxrwxrwt |
所有人都有完全权限,带粘滞位(通常用于/tmp) |
2775 |
rwxrwsr-x |
所有者有完全权限,组可读写执行(带 SGID),其他人可读执行 |
4755 |
rwsr-xr-x |
所有者有完全权限(带 SUID),组和其他人可读执行 |
提示 #
- 使用
ls -l
命令可以查看文件的当前权限 - 更改文件权限需要您是文件的所有者或具有管理员权限
- 为脚本添加执行权限是使其可执行的必要步骤
- 设置正确的目录权限对于安全性和功能都很重要
- 在 Web 服务器环境中,正确设置文件权限对于安全性至关重要
- 使用
chmod -R
时要小心,它会递归更改所有文件和子目录的权限 - 在共享环境中,使用组权限可以有效管理文件访问
- SUID 和 SGID 权限应谨慎使用,因为它们可能导致安全风险
- 在生产环境中,通常应遵循最小权限原则