做什么

修改文件 / 目录的访问权限。

数字法(最常用)

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 ...+ 批量