Linux Chmod 命令详细教程
chmod 是 Linux/Unix 系统中用于更改文件或目录权限的核心命令。它通过控制所有者(u)、所属组(g)和其他用户(o)的读®、写(w)、执行(x)权限来保障系统安全与协作。权限设置有两种主要方式:一是直观的符号法(如
chmod u+x file为所有者添加执行权),二是简洁的数字法(如chmod 755 file表示所有者拥有全部权限,其他人可读和执行)。常用选项-R可递归处理目录下所有内容。使用时应遵循最小权限原则,避免随意赋予 777 等宽松权限。掌握 chmod 能有效管理文件访问,是系统运维和开发中的基础必备技能。
博主博客
一、命令概述
chmod(change mode)命令用于改变 Linux/Unix 系统中文件或目录的访问权限。Linux 系统中的每个文件或目录都有一套权限系统,用于控制不同用户对其的访问能力。
基本语法
chmod [选项]... 权限模式 文件或目录...
权限层级
Linux 文件权限针对三类用户进行设置:
- u (User/Owner):文件所有者
- g (Group):文件所属组的成员
- o (Others):其他用户(既不是所有者,也不在所属组中)
- a (All):所有用户(即 u、g、o 的总和)
二、Linux 权限基础
2.1 权限类型
三种基本权限:
- r (Read):读取权限
- 文件:可查看内容
- 目录:可列出目录内容(使用
ls)
- w (Write):写入权限
- 文件:可修改内容
- 目录:可在目录内创建、删除、重命名文件
- x (Execute):执行权限
- 文件:可作为程序执行
- 目录:可进入该目录(使用
cd)
2.2 查看权限
使用 ls -l 命令查看文件权限:
-rwxr-xr-- 1 user group 4096 Jan 1 10:00 example.sh
↑↑↑↑↑↑↑↑↑
└── 权限字符串
权限字符串由10个字符组成:
- 第1位:文件类型(
-普通文件,d目录,l链接等) - 第2-4位:所有者(u)权限
- 第5-7位:所属组(g)权限
- 第8-10位:其他用户(o)权限
三、权限设置方法
3.1 符号表示法(相对设置)
格式:[ugoa...][[+-=][rwxX]...][,...]
操作符说明:
+:添加权限-:移除权限=:精确设置权限(清除原有权限,设置指定权限)
特殊符号:
X:特殊执行权限- 仅当目标是目录,或已有执行权限时,才添加执行权限
- 常用于递归设置目录权限时保护普通文件
常用示例:
# 为所有者添加执行权限
chmod u+x script.sh
# 为所有用户添加读取权限
chmod a+r file.txt
chmod +r file.txt # a 可省略,默认为所有用户
# 移除组和其他用户的写入权限
chmod go-w file.txt
# 精确设置权限:所有者可读写执行,组可读执行,其他用户无权限
chmod u=rwx,g=rx,o= example.sh
# 多种操作组合
chmod u+x,go-wx script.sh
# 使用 X 安全设置目录执行权限
chmod -R a+rX directory/ # 目录添加 x,文件只有可执行时才添加 x
3.2 数字表示法(绝对设置)
格式:chmod abc file
a:所有者权限(0-7)b:组权限(0-7)c:其他用户权限(0-7)
权限数值计算:
r(读) = 4w(写) = 2x(执行) = 1
权限值 = 所需权限数值之和:
| 权限 | 二进制 | 数字 | 说明 |
|---|---|---|---|
| — | 000 | 0 | 无权限 |
| –x | 001 | 1 | 仅执行 |
| -w- | 010 | 2 | 仅写入 |
| -wx | 011 | 3 | 写入 + 执行 |
| r– | 100 | 4 | 仅读取 |
| r-x | 101 | 5 | 读取 + 执行 |
| rw- | 110 | 6 | 读取 + 写入 |
| rwx | 111 | 7 | 读取 + 写入 + 执行 |
常用数字权限示例:
# 所有人可读、写、执行(不安全,谨慎使用)
chmod 777 file.txt
# 所有者完全控制,组和其他用户只读
chmod 644 file.txt
# 所有者完全控制,组可读执行,其他用户无权限
chmod 750 script.sh
# 目录常用权限:所有者完全控制,其他用户可读和执行(进入目录)
chmod 755 directory/
# 私有文件:仅所有者可读写
chmod 600 private.txt
四、特殊权限位
4.1 SUID(Set User ID)
- 数字表示:在百位前加
4(如4755) - 符号表示:
u+s - 作用:程序运行时以文件所有者的身份执行,而不是执行者
- 显示:在所有者执行位显示为
s(如rwsr-xr-x)
chmod u+s program
chmod 4755 program
4.2 SGID(Set Group ID)
- 数字表示:在百位前加
2(如2755) - 符号表示:
g+s - 作用:
- 对文件:运行时以文件所属组的身份执行
- 对目录:在该目录创建的文件继承目录的组所有权
- 显示:在组执行位显示为
s(如rwxr-sr-x)
chmod g+s directory
chmod 2755 directory
4.3 Sticky Bit(粘滞位)
- 数字表示:在百位前加
1(如1777) - 符号表示:
+t - 作用:常用于共享目录,用户只能删除自己创建的文件
- 典型应用:
/tmp目录 - 显示:在其他用户执行位显示为
t(如rwxrwxrwt)
chmod +t shared_directory
chmod 1777 shared_directory
4.4 组合特殊权限
# SUID + SGID
chmod 6755 program
# SGID + Sticky Bit
chmod 3777 shared_dir
# 查看特殊权限
ls -l /usr/bin/passwd # 显示 rwsr-xr-x (SUID)
ls -ld /tmp # 显示 drwxrwxrwt (Sticky Bit)
五、常用选项
| 选项 | 说明 |
|---|---|
-c |
仅在权限更改时显示提示信息 |
-f |
静默模式,不显示错误信息 |
-v |
显示详细信息 |
-R |
递归处理,修改目录及其子目录下所有文件 |
--help |
显示帮助信息 |
--version |
显示版本信息 |
递归选项 -R 的注意事项:
# 递归设置目录及其内容为所有人可读
chmod -R a+r directory/
# 安全递归:使用 X 而非 x,避免给不可执行文件添加执行权限
chmod -R a+rX directory/
# 错误示例:可能给文本文件添加执行权限
chmod -R a+rx directory/ # 不安全!
# 递归设置特殊权限
chmod -R g+s project_dir/ # 目录下新建文件继承组权限
六、实用示例
6.1 文件权限管理
# 设置脚本可执行
chmod +x script.sh
./script.sh
# 保护配置文件:仅所有者可读写
chmod 600 ~/.ssh/config
# 共享文件:团队成员可读写,其他人只读
chmod 664 shared_file.txt
# 撤销所有执行权限
chmod a-x *.py
6.2 目录权限管理
# 创建共享目录:组成员可读写,其他人无权限
mkdir shared_dir
chmod 770 shared_dir
# Web服务器目录标准权限
chmod 755 public_html/
# 安全下载目录:用户只能写入自己的文件
chmod 733 downloads/ # 或使用 Sticky Bit: chmod 1777 downloads/
6.3 权限复制
# 将 file1 的权限复制给 file2
chmod --reference=file1 file2
七、最佳实践与注意事项
7.1 安全准则
- 最小权限原则:仅授予必要的最小权限
- 脚本文件:通常需要
755(所有者读写执行,其他人读执行) - 配置文件:通常使用
644或600(保护敏感信息) - 数据文件:通常使用
644(所有者读写,其他人只读) - 目录权限:需要执行权限才能进入目录
7.2 常见问题
# 问题:无法删除文件
# 原因:需要父目录的写权限,而非文件本身
chmod +w directory/ # 给目录添加写权限
# 问题:脚本无法执行
# 检查:1. 是否有执行权限 2. 是否有读取权限 3. shebang是否正确
chmod +x script.sh && ./script.sh
# 问题:权限更改无效
# 可能原因:文件系统挂载为只读,或使用无权限的用户
sudo chmod 755 file # 使用root权限
7.3 权限对照表
| 数字 | 符号 | 文件含义 | 目录含义 |
|---|---|---|---|
| 0 | --- |
不可读、写、执行 | 不可列、不可进入 |
| 4 | r-- |
只读 | 可列目录内容,不可进入 |
| 5 | r-x |
可读、执行 | 可列目录内容,可进入 |
| 6 | rw- |
可读、写 | 可列、可创建文件,不可进入 |
| 7 | rwx |
可读、写、执行 | 完全控制 |
八、调试与验证
8.1 检查当前权限
# 详细列出权限
ls -l filename
# 显示数字权限
stat -c "%a %n" filename
# 递归查看目录权限
find . -type f -exec ls -l {} \;
8.2 测试权限效果
# 测试读取权限
cat filename
# 测试写入权限
echo "test" >> filename
# 测试执行权限
./executable_file
# 测试目录权限
cd directory
ls directory/
touch directory/newfile
总结
chmod 是 Linux 系统管理中至关重要的命令,掌握它的正确使用对于系统安全和管理效率都至关重要。记住:
- 理解权限模型:用户-组-其他三级权限体系
- 掌握两种表示法:符号法灵活,数字法精确
- 谨慎使用递归:
-R选项会改变所有子项,使用前确认 - 遵循最小权限原则:不要随意授予
777权限 - 了解特殊权限:SUID、SGID、Sticky Bit 的适用场景
通过合理设置文件权限,可以有效保护系统安全,防止未授权访问,同时确保合法用户能够正常完成工作。
Linux Chmod 命令详细教程
https://blog.uso6.com/archives/linux-chmod-ming-ling-xiang-xi-jiao-cheng
评论