Mac系统需清理残留脚本权限以避免磁盘访问列表臃肿、隐私混乱及反复授权弹窗,具体包括清空终端工具授权、重置AppleScript/快捷指令自动化权限、删除停用launchd服务、清除Shell历史中脚本路径痕迹。

Mac系统中残留的脚本权限(如终端工具、AppleScript、自动化服务等)若未及时清理,会导致“完全磁盘访问”列表臃肿、隐私设置混乱、甚至触发系统反复弹窗要求授权,影响新脚本执行或引发安全提示。
清空终端相关命令行工具的授权记录
终端本身、osascript、git、xcode-select 等工具一旦被授予“完全磁盘访问”,其授权状态会永久保留在系统数据库中,即使卸载对应软件也不会自动移除。
第一步:打开“系统设置 → 隐私与安全性 → 完全磁盘访问”
第二步:点击右下角锁图标,输入管理员密码解锁
第三步:逐行检查列表,【重点识别名称含“Legacy”“Old”“v1.2”“beta”或已卸载软件名(如“iTerm2 Legacy”“VS Code (old)”)的条目】
第四步:选中目标项 → 点击减号“−” → 确认移除
注意:不要删除 Terminal、osascript、bash/zsh 本身——它们是系统必需项;只删你明确知道已不再使用的旧版本或测试工具。
重置AppleScript与快捷指令的自动化权限
AppleScript脚本或“快捷指令”曾控制过某些App(如Finder、邮件、备忘录),这些授权会固化在系统里,即使脚本文件已被删除,权限仍存在,还可能干扰新脚本运行。
打开“系统设置 → 隐私与安全性 → 自动化”
展开每个应用分组(如“Finder”“邮件”“Safari”),查找【名称为空白、路径指向已不存在的脚本(如/Users/xxx/Documents/old_script.scpt)、或上次使用时间早于半年前的条目】
勾选该条目 → 点击右侧“−”号移除
若某App分组下只剩一个条目且你确认不再需要任何自动化操作,可直接点击分组名左侧箭头收起,再点“−”清空整个分组。
清除已停用脚本的launchd服务注册项
很多Shell脚本通过launchd设为开机启动或定时任务,卸载脚本后其plist配置文件常被遗忘,继续占用资源并可能报错。
方法一:清理用户级服务
打开终端,执行:ls ~/Library/LaunchAgents | grep -E "\.(sh|py|js)$|legacy|old"
对输出中匹配的plist文件(如com.user.backup-old.plist),运行:launchctl bootout gui/$(id -u) /Users/你的用户名/Library/LaunchAgents/文件名.plist,再执行 rm ~/Library/LaunchAgents/文件名.plist
方法二:扫描并清理系统级残留(需谨慎)
先检查是否加载:sudo launchctl list | grep -v com.apple
对疑似旧脚本服务(如“com.github.cleanup.v1”),先停用:sudo launchctl bootout system /Library/LaunchDaemons/对应文件名.plist
【执行此步前必须确认plist路径真实存在且内容无误,误删系统服务将导致功能异常】
确认无误后,再运行:sudo rm /Library/LaunchDaemons/对应文件名.plist
批量清理Shell历史中残留的脚本调用痕迹
你曾手动执行过的脚本路径(如 ./deploy.sh、/opt/tools/old-migrate.py)会留在 ~/.zsh_history 中,虽不直接影响权限,但暴露操作习惯,且可能被误触发。
第一步:清空当前会话缓冲区:history -c
第二步:精准删除含脚本路径的历史行(例如删掉所有含 “/usr/local/bin/legacy-” 的命令):sed -i '' '/legacy-/d' ~/.zsh_history
第三步:同步清理会话快照目录:rm -rf ~/.zsh_sessions
第四步:重启终端,运行 history | head -10 验证敏感路径已不可见。











