系统学习 macOS 学习路径:从 BSD 文件命令到系统、网络与开发维护

chmod

修改 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

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 递归修改权限时,符号模式中的 X 与 x 有什么区别?
  2. macOS 上如何查看、添加和删除 ACL?
  3. 为什么 sudo chmod 777 /System/... 仍然会失败?
答案
  1. X 只给目录和已有执行位的文件加执行权限,x 会无条件给所有条目加。
  2. 用 ls -le 查看,chmod +a "..." 添加,chmod -N 删除。
  3. 系统卷受 SIP 和密封签章保护,root 也不能修改,需从恢复模式调整安全策略。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令