做什么
修改文件 / 目录的访问权限。
数字法(最常用)
r=4 w=2 x=1
rwx = 7 r-x = 5 rw- = 6 r-- = 4
chmod 755 script.sh # rwxr-xr-x 可执行文件常用
chmod 644 readme.txt # rw-r--r-- 普通文件常用
chmod 600 ~/.ssh/id_rsa # rw------- 私钥必须
chmod 700 ~/.ssh # rwx------ 私钥目录
chmod -R 755 myapp/ # 递归
符号法
chmod u+x script.sh # 所有者加可执行
chmod g-w file.txt # 组去掉写
chmod o+r file.txt # 其他人加读
chmod a+r file.txt # 所有人加读(a = all)
chmod u=rwx,g=rx,o=r f.txt # 显式设
chmod -R go-w myapp/ # 递归:组和他人都去掉写
u/g/o/a = user/group/other/all;+/-/= = 加/减/设。
特殊权限位(数字 4 位)
4xxx = SUID 2xxx = SGID 1xxx = Sticky
chmod 4755 prog # SUID + 755
chmod 2755 folder # SGID(在共享目录上用)
chmod 1777 /tmp # Sticky(多用户共享,只能删自己的)
详见 linux/17-special-permissions。
实战清单
# 项目目录
chmod -R u+rwX,go+rX,go-w myapp/ # 大写 X = 只对目录或已有 x 的加
# Web 资源
sudo chown -R www-data:www-data /var/www/site
sudo chmod -R 755 /var/www/site
# 临时让所有人可写(小心)
chmod 777 shared.txt
# 让脚本可执行
chmod +x script.sh
X(大写)= "只在目录或已经可执行的文件上加 x"——递归改权限的安全姿势。
坑
- 目录的 x 意味着"能进入和访问里面的文件",没 x 但有 r → 只能看名字看不到内容
chmod 777几乎永远不该用——给所有人完全权限是安全坑chmod -R大量文件慢——可以find ... -exec chmod ...加+批量