macOS
2026-03-31
新闻来源:网淘吧
围观:19
电脑广告
手机广告
BSD 与 GNU 命令对比
sed -i需要扩展名参数:sed -i '' 's/a/b/' file——空字符串表示不备份,Linux 不需要这个参数find不支持-printf——改用-exec stat或xargs配合stat -f替代date使用不同的格式标志:date -j -f '%Y-%m-%d' '2024-01-15' '+%s'——-j阻止设置时间grep -P(Perl 正则表达式)不存在——改用grep -E(扩展正则表达式)或自行安装ggrep通过Homebrew安装xargs默认使用/usr/bin/echo而非指定命令——请始终明确指定命令readlink -f不存在——请使用realpath或python3 -c "import os; print(os.path.realpath('path'))"
Homebrew路径
- Apple Silicon芯片:
/opt/homebrew/bin、/opt/homebrew/lib - Intel芯片:
/usr/local/bin、/usr/local/lib - 检查系统架构:
uname -m返回arm64或x86_64 - Homebrew不会自动添加到PATH中 — 检查
~/.zprofile寻找eval行 - 运行x86二进制文件:
arch -x86_64 /bin/bash然后安装/运行仅支持Intel的工具
钥匙串(密钥管理)
- 存储:
security add-generic-password -a "$USER" -s "service_name" -w "secret_value" -U - 检索:
security find-generic-password -a "$USER" -s "service_name" -w -U标志用于更新现有条目 — 若无此标志,重复条目会报错- 钥匙串在首次使用时请求访问权限 — 为自动化操作永久授权
- 删除:
security delete-generic-password -a "$USER" -s "service_name"
launchd(服务管理)
- 用户代理:
~/Library/LaunchAgents/— 用户登录时以用户身份运行 - 系统守护进程:
/Library/LaunchDaemons/— 以 root 身份在启动时运行 - 加载:
launchctl load -w ~/Library/LaunchAgents/com.example.plist - 编辑前先卸载:
launchctl unload— 对已加载 plist 文件的修改将被忽略 - 检查错误:
launchctl list | grep service_name然后launchctl error <退出代码> - 日志:
log show --predicate 'subsystem == "com.example"' --last 1h
隐私权限 (TCC)
- 若未授予"完全磁盘访问"或"自动化"权限,自动化脚本会静默失败
- 在系统设置 → 隐私与安全性 → 对应类别中授予权限
- 终端和 iTerm 需要分别授予权限 — 授予其中一个不会同时授予另一个
tccutil reset清除权限:tccutil reset AppleEvents针对自动化权限- 检查已授予的权限:
sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db "SELECT * FROM access"
defaults(偏好设置)
- 读取:
defaults read com.apple.finder AppleShowAllFiles - 写入:
defaults write com.apple.finder AppleShowAllFiles -bool true - 删除:
defaults delete com.apple.finder AppleShowAllFiles - 更改后重启应用:
killall Finder - 查找应用包标识符:
osascript -e 'id of app "App Name"' - 导出全部:
defaults export com.apple.finder -输出XML格式
文件操作
ditto保留资源分支和元数据 — 在处理应用包时使用此命令代替cp创建DMG:- Create DMG:
hdiutil create -volname "名称" -srcfolder ./文件夹 -format UDZO 输出文件.dmg - 挂载 DMG:
hdiutil attach 镜像文件.dmg—— 返回挂载点路径 - 卸载:
hdiutil detach /Volumes/名称 - 扩展属性:
xattr -l 文件用于列出属性,xattr -c 文件用于清除所有属性 - 移除隔离属性:
xattr -d com.apple.quarantine 应用程序.app
剪贴板
- 复制到剪贴板:
echo "文本" | pbcopy - 从剪贴板粘贴:
pbpaste - 复制文件内容:
pbcopy < 文件.txt - 保留 RTF 格式:
pbpaste -Prefer rtf - 剪贴板在 SSH 会话中对本地机器有效——便于远程文件复制
截图与屏幕
- 截图区域至文件:
screencapture -i output.png - 截图窗口:
screencapture -w output.png - 截图至剪贴板:
screencapture -c - 无界面模式(无UI):
screencapture -x—— 抑制声音和光标 - 屏幕录制需要在隐私设置中授予屏幕录制权限
进程管理
- 防止睡眠:
caffeinate -i command—— 在命令运行时保持系统唤醒 - 带超时防止睡眠:
caffeinate -t 3600—— 1小时 - 检查为何不睡眠:
pmset -g assertions - 电源设置:
pmset -g用于查看,sudo pmset -a sleep 0以禁用睡眠 - 当前焦点应用:
osascript -e 'tell application "System Events" to get name of first process whose frontmost is true'
网络
- 列出接口:
networksetup -listallhardwareports - 获取IP:
ipconfig getifaddr en0(Wi-Fi在笔记本电脑上通常为en0) - DNS服务器:
scutil --dns | grep nameserver - 刷新DNS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder - 代理设置:
networksetup -getwebproxy "Wi-Fi"
系统完整性保护
- 检查状态:
csrutil status - 禁用(仅在恢复模式下):
csrutil disable——不建议在生产环境中使用 - 受保护路径:
/System、/usr(除了/usr/local)、/sbin、/bin - 即使以 root 身份也无法修改这些路径——请围绕此设计你的自动化流程
日志
- 实时流式查看:
log stream --predicate 'process == "processname"' - 搜索近期记录:
log show --last 1h --predicate 'eventMessage contains "error"' - 子系统筛选:
log show --predicate 'subsystem == "com.apple.example"' - 保存至文件:
log collect --output ./logs.logarchive——会在 Console.app 中打开
自动化技巧
- 打开 URL:
open "https://example.com"— 使用默认浏览器 - 打开应用程序:
open -a "Safari"— 按名称而非路径 - 使用特定应用程序打开文件:
open -a "TextEdit" file.txt - 运行 AppleScript:
osascript -e 'tell application "Finder" to get name of home' - Spotlight 搜索:
mdfind "kMDItemDisplayName == 'filename.txt'"— 对于已索引的文件,比 find 命令更快
文章底部电脑广告
手机广告位-内容正文底部


微信扫一扫,打赏作者吧~