chmod数字模式覆盖赋值适合初始化,符号模式增量操作更安全;目录需x才能cd,递归设权需区分文件与目录;权限失效常因非所有者、noexec挂载或不支持文件系统。

直接改权限,chmod 就够用;但改错一次可能连 ls 都执行不了——关键不在会不会输命令,而在懂权限怎么生效、谁真能改、改了谁受影响。
chmod 数字模式和符号模式到底该选哪个
数字模式(如 chmod 644 file.txt)是覆盖式赋值:不管原来是什么,直接按三位数重设。适合初始化或批量统一权限,比如部署时一键设脚本为 755、配置为 600。
符号模式(如 chmod u+x script.sh)是增量式操作:只加/减/设某类用户的某几项权限,不碰其他位。更安全,尤其当你不确定当前权限状态时。
- 想给所有者加执行权,又怕误删组的读权限?用
u+x,别算新八进制 - 要移除其他人写权限,但保留读和执行?
o-w比755更精准 - 大写
X很实用:它只对目录或已有x的文件加执行位,chmod -R a+X dir/可避免日志文件被强加x
目录必须有 x 权限才能进入,但很多人忘了这点
对目录来说,r 是能 ls 列内容,w 是能增删改文件名,x 才是能 cd 进去、能访问子项。没有 x,哪怕全是 r 也 Permission denied。
-
chmod 644 mydir/后cd mydir必失败——因为 644 对应rw-r--r--,缺x - 正确设目录权限常用
755(rwxr-xr-x)或700(rwx------),确保所有者有x - 递归设目录权限时,
chmod -R 755 mydir/会把里面所有文件也变成 755,其中普通文件不该有x;应先chmod -R u+rX,g+rX,o+rX mydir/,再find mydir/ -type f -exec chmod 644 {} \;
chmod 看似成功却没效果?先查这三处
执行 chmod 后 ls -l 显示没变,或改完还是 Permission denied,大概率不是命令写错了,而是被底层机制拦住了。
- 你不是文件所有者,也没
sudo权限:chmod直接报Operation not permitted - 文件在
noexec或nosuid挂载的分区上(如/tmp):chmod不报错,但x位实际被忽略 - 文件系统是 FAT32/NTFS(比如挂载的 Windows 分区):
chmod完全无效,stat filename会显示 Access 字段后面带0000,且mount | grep $(df . | awk '{print $1}') | grep -o 'noexec\|nosuid\|mode='通常能暴露问题
chown 和 chmod 不是一回事,但常被一起用
chmod 控制“能不能做”,chown 决定“谁来管”。比如 Web 服务跑在 www-data 用户下,但你上传的文件属主是 ubuntu,光 chmod 644 不够,得 sudo chown www-data:www-data config.php 才能让服务读到。
- 只有 root 或文件当前所有者能执行
chown;普通用户只能改自己文件的chmod -
chown user:group file同时改所有者和组;chown :group file只改组(冒号前空) - 递归改归属必须加
-R,但sudo chown -R user:group /var/www/html后,记得补一句chmod -R u=rwX,g=rX,o=rX /var/www/html,否则子目录可能缺x
真正麻烦的从来不是记不住 r=4, w=2, x=1,而是改完发现某个服务起不来、某个用户进不了目录、或者日志里突然冒出一堆 ACL 相关的拒绝记录——这时候回看 stat 输出和挂载参数,比重敲十遍 chmod 有用得多。











