log show 是 macos 中快速定位系统级权限拒绝行为的最直接有效命令行方式,它直查统一日志数据库,支持按进程、子系统、关键词和日志级别精准筛选 denied/refused 等拒绝事件,并可导出分析或配合控制台 app 验证上下文。
要快速定位 macos 中系统级的权限拒绝行为(比如安全守护进程拦截、内核拒绝访问、xpc 服务拒绝授权等),log show 是最直接有效的命令行方式。它能绕过图形界面延迟,直查统一日志数据库,精准捕获带 denied、refused、not authorized 等语义的关键条目。
聚焦核心子系统与进程范围
权限拒绝多发生在底层安全模块,盲目全盘检索效率低。应优先限定在以下高相关来源:
-
process == "kernel":内核直接拒绝内存/设备/I/O 访问 -
subsystem == "com.apple.securityd":密钥链、证书、签名验证失败 -
subsystem == "com.apple.Authorization":sudo、访问控制列表(ACL)、管理员授权弹窗被拒 -
subsystem contains "xpc"或process contains "launchd":跨进程通信或服务启动时权限不足
用谓词精准匹配拒绝关键词
仅靠 contains "denied" 容易漏掉变体表达。推荐组合常用否定动词,并忽略大小写:
log show --predicate 'eventMessage contains[c] "denied" OR eventMessage contains[c] "refused" OR eventMessage contains[c] "not authorized" OR eventMessage contains[c] "access denied"' --last 1h- 若想进一步排除调试或测试类误报,可追加否定条件:
AND NOT (eventMessage contains[c] "test" OR eventMessage contains[c] "debug")
按时间与级别增强可靠性
权限拒绝通常伴随 error 或 fault 级别,加上时间锚点可大幅压缩结果集:
- 查最近一次启动以来的所有权限拒绝:
log show --predicate '(level >= error) AND (eventMessage contains[c] "denied" OR eventMessage contains[c] "refused")' --last boot - 导出为文本供后续分析:
log show --predicate 'subsystem == "com.apple.securityd" AND eventMessage contains[c] "denied"' --last 24h > ~/Desktop/sec_denied.log
配合控制台 App 快速验证上下文
终端输出是原始结构化数据,但缺少图形化时间轴和关联堆栈。建议将关键时间点复制到“控制台”App中做二次确认:
- 打开控制台 → 左侧选本机 → 顶部搜索栏输入
process:securityd或eventMessage:"denied" - 右键某条日志 → “在访达中显示”,可定位其原始日志文件路径(如
/var/db/diagnostics/...) - 启用“活动”视图,观察拒绝事件是否集中出现在某个 App 启动或系统唤醒时刻











