037 chmod命令

命令说明

chmod(change mode)用于修改文件或目录的访问权限,控制所有者、所属组、其他用户对文件的读(r=4)写(w=2)执行(x=1)权限,是 Linux 权限管理的核心命令。

语法

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

常用参数

参数说明
-R递归修改目录及其下所有文件的权限
-f静默模式,不报错(force)
-c只报告发生变化的权限
-v详细报告每次权限变更
u/g/o/a符号模式对象:所有者/所属组/其他人/全部
+/-/=符号模式操作:增加/去除/设定权限
r/w/x符号权限:读/写/执行
X只给目录或原本已有执行位的文件加 x 权限
--reference=文件参照另一个文件的权限进行设置
umask 相关八进制模式如 755/644,三位分别对应 u/g/o

使用示例

$ chmod 755 deploy.sh

所有者 rwx、组和其他人 r-x,脚本常用

$ chmod 644 index.html

所有者 rw、其他人 r,普通文件常用

$ chmod +x run.sh

给所有用户增加执行权限

$ chmod u+x,g-w app.sh

所有者加执行、组去写权限

$ chmod -R 755 /var/www/html

递归设置网站目录权限

$ chmod 600 ~/.ssh/id_rsa

私钥必须仅本人可读写,否则 ssh 拒绝使用

$ chmod a=rwx file

等同 chmod 777,所有人全部权限(慎用)

$ chmod --reference=a.txt b.txt

把 b.txt 权限设为与 a.txt 相同

$ chmod 1777 /data/share

带粘滞位的公共目录:人人可写但只能删自己的文件

实用技巧

  • 数字与符号两种写法:755=rwxr-xr-x(r=4 w=2 x=1 相加);符号写法 chmod u+x 只增不减,更安全,改单一权限优先用符号。
  • 目录的 x 权限表示“能否进入/遍历”,没有 x 即使有 r 也无法 ls 出内容细节;文件没有 r 才不能读内容。
  • 特殊权限三位数字:4 setuid(文件以所有者身份执行,如 passwd)、2 setgid(目录内新文件继承组)、1 sticky(目录内只能删自己的文件,如 /tmp)。
  • chmod 不会跟随符号链接本身,作用于链接指向的文件;改链接权限需用 chown 的 -h 等选项配合。
  • 权限不足报错时先确认文件属主与所在文件系统(NFS/CIFS 挂载可能不支持 chmod),root 也改不动带 immutable 属性的文件,需先 chattr -i。