修改 POSIX 权限位和 macOS ACL,控制文件与目录的访问。
chmod 支持八进制模式(如 644、755、4755)和符号模式(u+rwX、go-w)。目录需要执行位才能进入,文件需要执行位才能运行;X 只在目录或已有执行位的文件上加执行权限,递归时比 x 安全。-R 递归,-h 修改符号链接自身,-v 显示处理过程。
macOS 在 POSIX 权限之外还有 ACL。chmod +a "admin allow read,write" 文件 添加条目,chmod -N 文件 删除整个 ACL,ls -le 查看条目和 inherited 标记。ACL 条目可以授予或拒绝更细的权限,并通过 file_inherit、directory_inherit 传给新建子项;共享目录“权限看着对但访问不对”通常要看这里。
GNU 与 BSD 差异:GNU 用 setfacl/getfacl 管理 ACL,macOS 直接扩展 chmod 语法;GNU 的 --reference、--preserve-root 长选项在 macOS 上不存在。macOS 的 chmod 没有 GNU 的 -c(仅报告变化)选项。
SIP 保护的系统路径(/System、/usr 除 /usr/local 外、预装应用)即使 sudo chmod 也会报 Operation not permitted。TCC 控制的桌面、文档、下载等目录还需要终端获得用户授权,权限位不能替代隐私授权。
# 私钥目录和配置只允许自己访问
% chmod 700 ~/.ssh && chmod 600 ~/.ssh/config
# 递归加读写,只给目录和已有可执行文件加执行位
% chmod -R u+rwX,go-w ~/Projects/app
# 给管理员组添加读写 ACL,注意整段条目要加引号
% chmod +a "admin allow read,write" ~/Shared/report.txt
% ls -le ~/Shared/report.txt
# 删除文件上的全部 ACL,回到只受模式位控制的状态
% chmod -N ~/Shared/report.txt
# 修改符号链接自身的权限,而不是目标文件
% chmod -h 755 ~/Desktop/shortcut
# 给可执行文件加 setuid 位(仅对二进制有效,脚本会被内核忽略)
% sudo chmod 4755 /usr/local/bin/tool
ls -le 查 ACL。deny 条目优先级高,且继承条目可能来自父目录,单改 chmod 777 不一定解决。chmod -R 777 会同时放开所有子文件和目录,是常见的安全事故。按需使用 u+rwX 或分别处理文件与目录。X 与 x 不同:X 只给目录和已有执行位的文件加执行权限,递归源码树时应使用 X。chmod 只能由文件所有者或 root 执行;不是所有者时即使有写权限也不能改模式。用 ls -l 确认所有者。-h 改链接本身;-R 默认 -P,不会穿过链接目录。需要跟随链接时显式用 -H 或 -L,但要先确认不会影响链接目标。Operation not permitted 时先看 csrutil status 和 ls -lO 的 restricted 标志,不要为改权限关闭 SIP。ls — 用 -le 查看 ACL,用 -lO 查看标志。chown — 修改所有者与所属组。mkdir — 创建目录时指定初始权限。chmod — GNU 版对照,ACL 使用 setfacl。权限速查 — 权限位与特殊位系统整理。icacls — Windows ACL 命令对照。合上页面,先回答,再展开对照。
X 与 x 有什么区别?sudo chmod 777 /System/... 仍然会失败?X 只给目录和已有执行位的文件加执行权限,x 会无条件给所有条目加。ls -le 查看,chmod +a "..." 添加,chmod -N 删除。
小程序版
微信扫码,随时查命令