chmod 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
chmod——文件与目录命令族(见文件与目录命令族)/ 用户与权限命令族(见用户与权限命令族)共有的基础命令。
chmod(change mode,改模式)修改文件或目录的权限(permission,控制系统里"谁能读/写/执行某个文件"的规则)。Linux 每个文件都有三类主体的权限:属主(u)、属组(g)、其他人(o),每类有读(r)、写(w)、执行(x)三位。
一、权限位基础
-rwxr-xr-- 1 user group 4096 Aug 28 file
↑ ↑↑↑ ↑↑↑ ↑↑↑
│ │││ │││ │││
│ │││ │││ └─ 其他人(o):r 读
│ │││ ││└── 组(g):r-x 读+执行
│ │││ │└─── 组执行
│ │││ └──── 属主(u):rwx 读+写+执行
│ └┴┴────── 类型(- 普通文件,d 目录)
└────────── 后面那串就是权限串权限串 9 个字符分三段:属主 / 属组 / 其他人,每段 rwx。某位为
-表示无此权限。读r=4、写w=2、执行x=1,三者相加得数字权限(见下)。记住这个映射,数字写法一看就懂。
二、两种写法:数字 vs 符号
chmod 755 script.sh # 数字:属主 rwx(7)、组 rx(5)、其他 rx(5)
chmod 644 file.txt # 数字:属主 rw、组 r、其他 r(普通文件标配)
chmod u+x script.sh # 符号:只给属主加执行位
chmod go-w file.txt # 符号:去掉组和其他人的写权限
chmod a+r file.txt # 符号:所有人加读数字写法
755拆开:7=4+2+1(rwx)、5=4+1(rx)、5=4+1(rx)。常用组合记两个:755给可执行脚本/目录,644给普通文件。chmod +x不加前缀默认给所有人加执行(等同a+x),更精确用u+x只给属主。符号写法表达"相对修改"更直观,不必算数字。
三、目录的执行位
chmod 755 mydir # 目录通常 755,x 位允许"进入/访问"
chmod 700 private/ # 私有目录,仅属主可进目录的
x(execute)不是"运行",而是"能否进入并访问其内容"——没有x,即使有r也 cd 不进去、ls 看不了。r让你列目录名、x让你真正访问。所以目录权限一般带x(如 755),纯数据目录才 644。这也是为什么chmod 644一个目录会导致"能看见但进不去"的怪现象。
四、递归与参考
chmod -R 755 ./scripts/ # -R 递归改目录下所有
chmod --reference=file1 file2 # 照 file1 的权限设 file2
-R递归改权限要慎重:把一堆普通文件也设成 755 虽不致命但没必要,更糟的是误把目录设成 644 导致进不去。批量改最好先 find 分类(目录 755、文件 644)再分别chmod,或用--reference照葫芦画瓢。
五、与 chown/umask 的关系
chown user:group file # 改属主/属组(见 chown)
umask 022 # 设新建文件的默认权限掩码权限三兄弟:
chmod改权限位、chown 改属主属组(见 chown 详解)、umask 决定新建文件"默认拿走哪些位"(如umask 022→ 新文件 644、新目录 755)。三者配合,才构成完整的权限管理。
六、实战:修复 "Permission denied"
# 脚本报无权执行
ls -l script.sh # 看权限,发现没 x
chmod u+x script.sh # 给属主加执行
# Web 目录 403:目录没 x 或文件没 r
chmod 755 /var/www/site
chmod 644 /var/www/site/index.html
# 误把整个目录设成 644 进不去
chmod 755 /var/www/site # 补回目录执行位"Permission denied" 多数时候就是权限位不对:脚本缺 x、Web 目录缺 x、静态文件缺 r。ls -l 先看当前的位,再针对性 chmod,别无脑 chmod 777(任何人可写,安全风险大,除非临时调试)。
一句话总结
chmod = 改文件/目录权限:权限串分属主(u)/组(g)/其他(o)三段,各含 r(4)/w(2)/x(1);数字 755(rwxr-xr-x) 给脚本/目录、644(rw-r--r--) 给文件,符号 u+x/go-w 表达相对修改更直观;目录的 x 是"能否进入访问"而非运行;-R 递归要分类对待。权限三兄弟还有 chown 与 umask。