Mac终端“Permission denied”主因是权限不足或安全机制拦截,需三步解决:①用chmod +x添加执行权限;②用xattr -d com.apple.quarantine清除隔离属性;③在隐私设置中授予终端完全磁盘访问权限。
mac终端提示“permission denied”,多数情况不是系统故意卡你,而是当前用户对目标文件或目录缺少对应权限,或者被macos的安全机制拦住了。解决关键不在暴力加sudo,而在分清原因、精准处理。
检查并修正文件或目录权限
这是最常见原因:脚本没执行权、目录缺进入权、文件归属不是你。
- 先看权限和归属:
ls -l /path/to/file。若显示-rw-r--r-- 1 root staff,说明只有root能写 - 给脚本加执行权:
chmod +x script.sh(所有人可执行)或更安全的chmod u+x script.sh(仅当前用户) - 进不了某个目录?目录必须有
x权限才能进入:chmod u+x dirname - 归属不对?用
sudo chown -R $(whoami):staff /path/to/dir把所有权还给自己
清除下载文件的隔离属性
从网页、邮件下载的脚本即使权限正确,也会被macOS自动标记为可疑,直接拒绝执行。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 运行
xattr -d com.apple.quarantine /path/to/script.sh(路径可拖进终端) - 确认是否清除成功:
ls -l@ /path/to/script.sh,输出中不应再出现com.apple.quarantine - 这步常被忽略,但却是很多“chmod了还是报错”的真正原因
授予终端完全磁盘访问权限
macOS Catalina 及之后版本默认限制终端读写桌面、文档、下载等位置,脚本中途可能突然失败。
- 打开「系统设置 → 隐私与安全性 → 完全磁盘访问」
- 点锁图标解锁,把 Terminal.app 或你用的 iTerm2 拖进去并勾选
- 首次添加后需重启终端应用,否则授权不生效
避开系统保护路径与机制
有些路径根本不能硬改,比如 /usr/bin、/var/run,SIP(系统完整性保护)会拦截,强行操作无效且危险。
- 不要尝试关闭 SIP —— 它不可逆,也不必要
- 改用 SIP 允许的路径,例如把服务 pid 文件从
/var/run/nginx.pid改成/usr/local/var/run/nginx.pid - 确保该路径存在且归属正确:
sudo mkdir -p /usr/local/var/run/nginx && sudo chown $(whoami):staff /usr/local/var/run/nginx

















