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。