主题
Linux文件权限修改 - chmod命令详解
课程介绍
接下来我们学习如何修改文件权限。chmod命令(change mode)用于改变文件的读、写、执行权限。可以用符号表示法,比如chmod u+x file给所有者添加执行权限;也可以用数字表示法,比如chmod 755 file设置权限。常见权限有755(目录和可执行文件)、644(普通文件)等。修改目录权限时记得加-R选项递归修改。
1. chmod命令基础
chmod(Change Mode)命令用于修改文件和目录的权限,需要文件所有者或root用户执行。
命令语法
bash
chmod [-R] 权限设置 目标文件/目录主要选项
| 选项 | 功能描述 |
|---|---|
-R | 递归修改:对目录及其内容应用相同的权限修改 |
注意事项
- 只有文件/目录的所有者或root用户可以修改权限
- 针对目录使用时,默认只修改目录本身权限
- 使用
-R选项会同时修改目录内所有内容的权限
2. 符号表示法修改权限
符号表示法使用字母和符号组合来表示权限修改。
权限主体
| 符号 | 含义 |
|---|---|
u | 所属用户(User) |
g | 所属用户组(Group) |
o | 其他用户(Others) |
a | 所有用户(All,相当于u+g+o) |
权限操作
| 符号 | 含义 |
|---|---|
+ | 添加权限 |
- | 移除权限 |
= | 设置权限(覆盖原有权限) |
权限类型
| 符号 | 含义 |
|---|---|
r | 读权限 |
w | 写权限 |
x | 执行权限 |
符号表示法示例
bash
# 设置文件所有者为读写执行权限,用户组为只读,其他用户为只写
chmod u=rwx,g=r,o=w file.txt
# 给所有用户添加执行权限
chmod a+x script.sh
# 移除其他用户的写权限
chmod o-w document.txt
# 递归修改目录及其内容的权限
chmod -R u=rw,g=r,o=r /data3. 数字表示法修改权限
数字表示法使用三位数(0-7)来表示权限,每个数字对应一组权限。
权限数值对应表
| 数值 | 权限 | 含义 |
|---|---|---|
| 0 | --- | 无权限 |
| 1 | --x | 仅执行 |
| 2 | -w- | 仅写 |
| 3 | -wx | 写和执行 |
| 4 | r-- | 仅读 |
| 5 | r-x | 读和执行 |
| 6 | rw- | 读和写 |
| 7 | rwx | 读、写和执行 |
权限计算方法
- r(读)= 4
- w(写)= 2
- x(执行)= 1
- 组合权限 = 各权限数值之和
数字表示法示例
bash
# 设置权限为:所有者rwx,用户组r-x,其他用户r-x
chmod 755 file.txt
# 设置权限为:所有者rw-,用户组r--,其他用户r--
chmod 644 document.txt
# 设置权限为:所有者rwx,用户组rwx,其他用户rwx(危险!)
chmod 777 /tmp/shared
# 递归修改目录权限为755
chmod -R 755 /var/www/html常见权限组合
| 数值 | 权限字符串 | 适用场景 |
|---|---|---|
| 755 | rwxr-xr-x | 可执行文件、目录 |
| 644 | rw-r--r-- | 普通文件、文档 |
| 700 | rwx------ | 私有文件、目录 |
| 775 | rwxrwxr-x | 共享目录 |
| 1777 | rwxrwxrwt | 临时目录(如/tmp) |
4. 实操演示
4. 1 符号表示法示例
bash
# 创建测试文件
$ touch test.txt
# 修改权限:所有者rwx,用户组r,其他用户w
$ chmod u=rwx,g=r,o=w test.txt
# 查看修改结果
$ ls -l test.txt
-rwxr--r-- 1 gaokun gaokun 0 Oct 15 14:30 test.txt
# 添加其他用户的执行权限
$ chmod o+x test.txt
# 移除用户组的读权限
$ chmod g-r test.txt
# 最终权限
$ ls -l test.txt
-rwx---rwx 1 gaokun gaokun 0 Oct 15 14:30 test.txt4. 2 数字表示法示例
bash
# 创建测试文件
$ touch 1.txt
# 修改权限为751(所有者rwx,用户组r-x,其他用户--x)
$ chmod 751 1.txt
# 查看修改结果
$ ls -l 1.txt
-rwxr-x--x 1 gaokun gaokun 0 Oct 15 14:30 1.txt
# 创建测试目录和内部文件
$ mkdir test
$ touch test/file1.txt test/file2.txt
# 递归修改目录权限为755
$ chmod -R 755 test
# 查看目录及内部文件权限
$ ls -la test
drwxr-xr-x 2 gaokun gaokun 4096 Oct 15 14:30 .
drwxr-xr-x 3 gaokun gaokun 4096 Oct 15 14:30 ..
-rwxr-xr-x 1 gaokun gaokun 0 Oct 15 14:30 file1.txt
-rwxr-xr-x 1 gaokun gaokun 0 Oct 15 14:30 file2.txt4. 3 权限修改对比
bash
# 原始权限
$ ls -l script.sh
-rw-r--r-- 1 gaokun gaokun 100 Oct 15 14:30 script.sh
# 方法1:符号表示法添加执行权限
$ chmod u+x,g+x,o+x script.sh
# 方法2:数字表示法直接设置为755
$ chmod 755 script.sh
# 最终结果相同
$ ls -l script.sh
-rwxr-xr-x 1 gaokun gaokun 100 Oct 15 14:30 script.sh5. 权限修改练习
5. 1 符号表示法练习
| 需求 | 命令 |
|---|---|
| 给文件所有者添加执行权限 | chmod u+x file.txt |
| 移除其他用户的写权限 | chmod o-w file.txt |
| 设置用户组为读和执行权限 | chmod g=rx file.txt |
| 给所有用户添加写权限 | chmod a+w file.txt |
5. 2 数字表示法练习
| 权限字符串 | 数字表示 |
|---|---|
rwxr-xr-x | 755 |
rw-r--r-- | 644 |
rwx------ | 700 |
r-x--x--x | 511 |
rw-rw-r-- | 664 |
5. 3 综合练习
bash
# 1. 创建一个名为"project"的目录
mkdir project
# 2. 在目录中创建3个文件:readme.txt、script.sh、config.ini
cd project
touch readme.txt script.sh config.ini
# 3. 设置readme.txt权限为644(所有者rw-,其他r--)
chmod 644 readme.txt
# 4. 设置script.sh权限为755(所有者rwx,其他r-x)
chmod 755 script.sh
# 5. 设置config.ini权限为600(仅所有者rw-)
chmod 600 config.ini
# 6. 递归修改project目录权限为755
cd ..
chmod -R 755 project| 命令形式 | 功能描述 | 示例 |
|---|---|---|
chmod u+rwx,g+rx,o+rx file | 符号表示法添加权限 | chmod u+rwx,g+rx,o+rx script.sh |
chmod u=rw,g=r,o=r file | 符号表示法设置权限 | chmod u=rw,g=r,o=r document.txt |
chmod 755 file | 数字表示法修改权限 | chmod 755 program |
chmod -R 644 dir | 递归修改目录权限 | chmod -R 644 /var/log |
chmod a+x file | 给所有用户添加执行权限 | chmod a+x install.sh |
6. 安全最佳实践
- 遵循最小权限原则:仅授予必要的权限
- 避免使用777权限:禁止给所有用户完全权限
- 注意目录的执行权限:确保需要进入的目录有x权限
- 谨慎使用递归选项:批量修改前确认权限设置正确
- 定期检查权限:使用
find命令查找异常权限设置
7. 知识扩展
- 特殊权限:SUID、SGID、Sticky Bit(如
chmod 1777 /tmp) - 默认权限:通过
umask命令控制新创建文件的默认权限 - 权限继承:目录权限对内部文件的影响
- ACL权限:使用
setfacl和getfacl设置高级访问控制列表
课程总结
这节课我们学了修改文件权限的chmod命令。
权限主体:
- u - 所有者(user)
- g - 用户组(group)
- o - 其他人(other)
- a - 所有人(all)
权限类型:
- r - 读(read)
- w - 写(write)
- x - 执行(execute)
两种修改方式: 符号法: chmod u+x file - 给所有者添加执行权限 数字法: chmod 755 file - 一次性设置所有权限(rwxr-xr-x)
chmod -R可以递归修改整个目录的权限。
课后练习
练习1(基础)
请执行以下操作:
- 创建一个文件test.sh
- 将文件权限设置为755(所有者rwx,其他r-x)
- 验证权限修改是否成功
💡 提示:使用ls -l命令可以查看文件权限。
练习2(进阶)
请尝试:
- 创建一个目录project,并在其中创建几个文件
- 递归修改project目录的权限为755(目录)和644(文件)
- 使用符号表示法给文件所有者添加写权限
💡 提示:使用chmod -R选项递归修改,使用find命令可以区分文件和目录。
练习3(拓展)
请尝试:
- 配置一个共享目录/tmp/share,要求所有用户可读写执行
- 设置SGID和Sticky Bit权限,使新文件继承目录权限并防止删除他人文件
- 解释为什么777权限在生产环境中是危险的
💡 提示:Sticky Bit权限使用1777设置,SGID使用2775设置。