Linux chmod命令 详解

chmod命令 用于改变文件或目录的访问权限,是Linux系统权限管理的重要工具。

命令简介

chmod(change mode的缩写)命令用于修改文件或目录的权限。Linux系统中的每个文件或目录都有三组权限:

所有者 (Owner)

文件或目录的创建者

组用户 (Group)

文件或目录所属的用户组

其他用户 (Others)

系统中的其他所有用户

权限类型

权限 符号表示 数字表示 说明
读取 r 4 允许查看文件内容或目录列表
写入 w 2 允许修改文件内容或在目录中创建/删除文件
执行 x 1 允许执行文件或进入目录

命令语法

chmod [选项] 模式 文件...

模式表示方法

chmod命令支持两种模式表示方法:

1. 符号模式

[ugoa][[+-=][rwxXst]]
符号 说明
u 所有者 (user)
g 组用户 (group)
o 其他用户 (others)
a 所有用户 (all),等同于 ugo
+ 添加权限
- 移除权限
= 设置精确权限

2. 数字模式

使用三位八进制数表示权限:

chmod 755 filename

其中:

  • 第一位数字:所有者权限
  • 第二位数字:组用户权限
  • 第三位数字:其他用户权限

常用选项

选项 说明
-R, --recursive 递归处理,修改目录及其子目录下所有文件的权限
-v, --verbose 显示详细操作信息
-c, --changes 类似 -v,但只在有变更时显示
-f, --silent, --quiet 不显示错误信息
--reference=RFILE 使用参考文件的权限模式

使用示例

1. 查看当前权限

使用 ls -l 命令查看文件权限:

ls -l filename.txt
-rw-r--r-- 1 user group 1024 Jan 1 10:00 filename.txt

权限说明:-rw-r--r--

  • 第一个字符 -:文件类型(- 表示普通文件,d 表示目录)
  • rw-:所有者权限(读写)
  • r--:组用户权限(只读)
  • r--:其他用户权限(只读)

2. 添加执行权限(符号模式)

为所有者添加执行权限:

chmod u+x script.sh

3. 设置精确权限(符号模式)

为所有用户设置读写权限:

chmod a=rw file.txt

4. 使用数字模式设置权限

设置权限为 755(所有者读写执行,组用户和其他用户读执行):

chmod 755 script.sh

计算方式:

  • 所有者:4(r) + 2(w) + 1(x) = 7
  • 组用户:4(r) + 1(x) = 5
  • 其他用户:4(r) + 1(x) = 5

5. 递归修改目录权限

修改目录及其所有子目录和文件的权限:

chmod -R 755 my_directory/

6. 移除写权限

从组用户和其他用户移除写权限:

chmod go-w file.txt

7. 设置特殊权限

设置SUID(Set User ID)权限:

chmod u+s program

或使用数字模式:

chmod 4755 program

8. 使用参考文件设置权限

将目标文件的权限设置为与参考文件相同:

chmod --reference=source.txt target.txt

常用权限组合

权限 数字表示 说明
-rw------- 600 所有者可读写,其他用户无权限
-rw-r--r-- 644 所有者可读写,其他用户只读
-rwx------ 700 所有者可读写执行,其他用户无权限
-rwxr-xr-x 755 所有者可读写执行,其他用户可读执行
-rwx--x--x 711 所有者可读写执行,其他用户可执行
drwx------ 700 目录:所有者可读写执行,其他用户无权限
drwxr-xr-x 755 目录:所有者可读写执行,其他用户可读执行

注意事项

  • 谨慎使用 chmod -R 777,这会给予所有用户完全权限,存在安全风险
  • 修改系统文件权限可能导致系统不稳定或安全漏洞
  • 脚本文件需要执行权限才能直接运行
  • 目录需要执行权限才能进入和访问其中的文件
  • SUID、SGID和sticky位是特殊权限,使用时需要特别注意

相关命令

  • chown - 改变文件所有者
  • chgrp - 改变文件所属组
  • umask - 设置默认文件权限
  • ls -l - 查看文件权限