跳转到内容

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 /data

3. 数字表示法修改权限

数字表示法使用三位数(0-7)来表示权限,每个数字对应一组权限。

权限数值对应表

数值权限含义
0---无权限
1--x仅执行
2-w-仅写
3-wx写和执行
4r--仅读
5r-x读和执行
6rw-读和写
7rwx读、写和执行

权限计算方法

  • 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

常见权限组合

数值权限字符串适用场景
755rwxr-xr-x可执行文件、目录
644rw-r--r--普通文件、文档
700rwx------私有文件、目录
775rwxrwxr-x共享目录
1777rwxrwxrwt临时目录(如/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.txt

4. 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.txt

4. 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.sh

5. 权限修改练习

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-x755
rw-r--r--644
rwx------700
r-x--x--x511
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权限:使用setfaclgetfacl设置高级访问控制列表

课程总结

这节课我们学了修改文件权限的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设置。

评论区

专业的Linux技术学习平台,从入门到精通的完整学习路径