源本科技 | 码上会

Linux 中的 chmod 命令

2025/12/24
67
0

在 Linux 系统中,chmod(全称 change mode)是用于修改文件或目录权限的核心命令。它通过控制“谁可以读、写或执行”来保障系统安全与协作效率。无论是脚本执行、日志访问,还是团队共享目录,都离不开对 chmod 的精准使用。


基本语法

chmod [选项] <权限模式> <文件或目录名>
  • 选项(可选):如 -R(递归)、--help

  • 权限模式:支持 八进制数字(如 755)或 符号表示法(如 u+x

  • 文件 / 目录名:目标对象


权限基础回顾

每个文件有三类用户角色:

  • Owner(所有者)

  • Group(所属组)

  • Others(其他用户)

每类用户拥有三种权限:

权限

符号

数值

作用

r

4

查看内容 / 列出目录

w

2

修改内容 / 创建删除文件

执行

x

1

运行程序 / 进入目录

权限值 = 各位之和(如 rwx = 4+2+1 = 7


八进制权限模式

数字表示法

三位数字分别对应:所有者 · 组 · 其他人

示例:chmod 745 newfile.txt

$ ls -l newfile.txt
-rwxr--r-x 1 user group 0 Nov 4 10:00 newfile.txt

角色

数值

权限

含义

Owner

7

rwx

可读、写、执行(完全控制)

Group

4

r--

仅可读

Others

5

r-x

可读、可执行,不可修改

常见权限组合速查表

八进制

符号形式

典型用途

600

-rw-------

私密文件(如 SSH 密钥)

644

-rw-r--r--

普通文本文件(默认)

700

-rwx------

个人脚本(仅自己可用)

755

-rwxr-xr-x

公共可执行脚本(最常用)

775

-rwxrwxr-x

团队共享目录(组内可编辑)

750

-rwxr-x---

仅团队成员可访问

推荐实践:

  • 脚本 → chmod 755 script.sh

  • 配置文件 → chmod 644 config.conf

  • 敏感数据 → chmod 600 password.txt


符号权限模式

更灵活地针对特定用户修改权限。

语法:

chmod [ugoa][+-=][rwx] 文件名
  • u = 用户(所有者)

  • g = 组

  • o = 其他用户

  • a = 所有人(等同于 ugo

  • + = 添加权限

  • - = 移除权限

  • = = 设为指定权限

实战示例:

# 给所有者添加执行权限
$ chmod u+x deploy.sh

# 移除其他用户的写和执行权限
$ chmod o-wx data.log

# 设置组和其他人只有读权限
$ chmod go=r report.pdf

# 同时操作多类用户
$ chmod ug+rw,o-rwx shared.txt

技巧:chmod +x file 是最常用的快捷方式,为当前用户添加执行权。


如何撤销或恢复权限

chmod 本身没有“撤销”功能,但可通过重新设置正确权限实现“回滚”。

场景:将文件恢复为标准只读配置(644

# 查看当前权限
$ ls -l a.txt
-rwxrwxrwx 1 user group 100 Nov 4 09:00 a.txt  # 错误:权限过大!

# 恢复为安全默认值
$ chmod 644 a.txt

# 验证
$ ls -l a.txt
-rw-r--r-- 1 user group 100 Nov 4 09:05 a.txt

建议:重要系统文件的权限应记录备份,便于快速恢复。


实战:让脚本可执行

Linux 不会自动运行无执行权限的脚本。以下是完整流程:

步骤 1:进入脚本所在目录

$ cd ~/projects/scripts/

步骤 2:检查当前权限

$ ls -l example.sh
-rw-r--r-- 1 alice dev 200 Nov 4 10:00 example.sh
# 注意:无 'x',无法直接运行

步骤 3:添加执行权限

$ chmod +x example.sh
# 或精确指定:chmod 755 example.sh

步骤 4:验证权限变更

$ ls -l example.sh
-rwxr-xr-x 1 alice dev 200 Nov 4 10:05 example.sh
# 现在所有者、组、其他人都有 'x'

步骤 5:执行脚本

$ ./example.sh
Hello, World!

注意:必须使用 ./ 显式指定当前目录,否则系统会在 $PATH 中查找。


注意事项

1. 递归修改目录权限

# 修改整个项目目录权限
$ chmod -R 755 /var/www/html/

警告:慎用 -R,可能意外开放敏感文件。

2. 使用 umask 控制默认权限

新创建文件的默认权限受 umask 影响:

$ umask          # 查看当前掩码(通常为 022)
$ touch test.txt
$ ls -l test.txt # 权限为 644(即 666 - 022)

3. 权限计算器辅助

可借助在线工具或手动计算:

  • 目标:所有者 rw-(6),组 rwx(7),其他人 r--(4)

  • 命令:chmod 674 myfile


重点总结

操作

命令

说明

查看权限

ls -l file

显示符号权限

添加执行权

chmod +x script.sh

快速启用脚本

标准文件权限

chmod 644 file

所有者读写,他人只读

标准脚本权限

chmod 755 script.sh

所有者全权,他人可读可执行

私密文件

chmod 600 key.pem

仅所有者可访问

团队共享

chmod 775 project/

组内可编辑,外部只读


思考题

  1. 为什么 chmod 777 file 被认为是高风险操作?在什么极端场景下才可接受?

  2. 如果一个目录权限是 drwxr-x---,而其中某个文件权限是 -rw-rw-rw-,其他用户能否读取该文件?为什么?

  3. 如何用一条 chmod 命令实现:“所有者保留当前权限,组获得与所有者相同的权限,其他人无任何权限”?


掌握 chmod 不仅是 Linux 用户的基本功,更是系统安全的第一道防线。通过合理设置权限,你既能保护数据隐私,又能高效协作。记住:最小权限原则——只授予完成任务所必需的最低权限。