引言
Mac 用户可能出于多种原因需要查看系统活动日志,例如排查异常行为、了解设备使用情况、或者仅仅是出于安全考虑。其中,屏幕的锁定与解锁活动是日常使用中最常见的交互之一。通过 macOS 内置的 log show
命令,我们可以轻松地在终端中查询并分析这些关键的系统事件,从而掌握设备何时被锁定、何时被唤醒或解锁。本文将详细介绍如何利用 log show
命令,结合特定的谓词(predicate),有效地查看 Mac 系统的屏幕锁定与解锁活动日志。
理解 log show
命令
log show
是 macOS 系统中一个非常强大的命令行工具,用于从统一日志系统中检索和显示日志消息。统一日志系统(Unified Logging System)是 macOS High Sierra 及更高版本中引入的日志记录框架,它取代了旧的系统日志(syslog)。所有来自系统、应用程序和服务的信息都会被记录在此系统中。
使用 log show
命令的基本语法是:
log show [options] [--predicate <predicate_string>]
其中,options
用于指定查询的时间范围、日志级别等,而 --predicate
则是我们精确过滤所需日志的关键。
筛选屏幕锁定与解锁活动日志
要查看屏幕的锁定与解锁活动,我们需要知道系统在记录这些事件时会生成哪些特定的日志消息。经过研究,与屏幕锁定和解锁相关的核心事件通常包含 com.apple.screenIsLocked
和 com.apple.screenIsUnlocked
这两个关键词。
因此,我们可以使用 predicate
参数来过滤包含这些关键词的日志条目。
查看屏幕锁定事件
要查找所有屏幕锁定的日志,可以使用以下谓词:
'eventMessage contains "com.apple.screenIsLocked"'
将其与 log show
命令结合,并指定查看最近一小时的日志,命令如下:
log show --predicate 'eventMessage contains "com.apple.screenIsLocked"' --info --last 1h
命令解析:
log show
: 启动日志查看工具。--predicate 'eventMessage contains "com.apple.screenIsLocked"'
: 这是核心过滤条件。它告诉log show
只显示那些事件消息(eventMessage
)中包含"com.apple.screenIsLocked"
字符串的日志条目。--info
: 指定只显示“信息(info)”级别的日志。这是默认级别,但明确指定有助于理解。日志级别包括default
,info
,debug
,error
,fault
。--last 1h
: 指定查看过去1小时内的日志。你可以根据需要修改时间范围,例如1d
(一天)、12h
(12小时)、30m
(30分钟)等。
查看屏幕解锁事件
同样地,要查看屏幕解锁的日志,只需将谓词中的关键词改为 com.apple.screenIsUnlocked
:
log show --predicate 'eventMessage contains "com.apple.screenIsUnlocked"' --info --last 1d
此命令将显示过去一天内所有屏幕解锁的活动日志。
同时查看锁定与解锁事件
如果你想在一个查询中同时查看屏幕的锁定和解锁活动,可以使用 OR
逻辑操作符将两个谓词组合起来:
log show --predicate 'eventMessage contains "com.apple.screenIsLocked" OR eventMessage contains "com.apple.screenIsUnlocked"' --info --last 24h
这个命令将列出过去24小时内所有屏幕锁定和解锁的事件。
解读日志输出
执行上述命令后,终端会显示一系列日志条目。每个条目通常包含以下信息:
- 时间戳: 精确到毫秒的事件发生时间。这是最重要的信息,能让你知道事件发生的确切时刻。
- 进程名/PID: 记录该事件的进程名称及其进程ID。例如,你可能会看到
WindowServer
或loginwindow
等进程。 - 日志级别: 如
Info
。 - 事件消息: 这是实际的日志内容,其中会包含我们用来过滤的
com.apple.screenIsLocked
或com.apple.screenIsUnlocked
字符串。
示例输出片段:
2024-05-14 10:30:15.123456+0800 localhost WindowServer[123]: [com.apple.windowserver:event] CGXSetDisplayState: Screen is locked
2024-05-14 10:30:15.123456+0800 localhost loginwindow[456]: [com.apple.loginwindow:system] SessionID 100000 PID 789 user logged in
...
2024-05-14 10:45:00.789012+0800 localhost loginwindow[456]: [com.apple.loginwindow:system] Screen unlocked for user [YourUserName]
2024-05-14 10:45:00.789012+0800 localhost WindowServer[123]: [com.apple.windowserver:event] CGXSetDisplayState: Screen is unlocked
通过仔细观察时间戳,你可以清晰地追踪屏幕锁定和解锁的时间序列,以及每次会话的持续时长。
其他有用的 log show
选项
除了上述选项,log show
还有一些其他参数可以帮助你更好地查看和分析日志:
--style compact
: 以更紧凑的格式显示日志,减少冗余信息。--style syslog
: 以传统的 syslog 格式显示日志。--style json
: 以 JSON 格式输出日志,便于程序化处理。--color
: 彩色输出,提高可读性。--last boot
: 显示自上次启动以来的所有日志。--last boot -k <key>
: 显示自指定启动以来的日志。可以通过log show --predicate 'process == "kernel"'
查看启动ID。--source
: 显示原始日志源(例如文件路径)。
结合这些选项,你可以根据自己的需求定制日志输出。例如,要以紧凑格式查看过去6小时内的所有屏幕锁定/解锁事件:
log show --predicate 'eventMessage contains "com.apple.screenIsLocked" OR eventMessage contains "com.apple.screenIsUnlocked"' --info --last 6h --style compact
结论
通过 log show
命令配合正确的谓词,Mac 用户可以方便快捷地查询和分析系统屏幕的锁定与解锁活动日志。这不仅有助于了解个人或他人对设备的实际使用模式,也能在某些情况下成为安全审计或问题排查的重要依据。掌握这一技巧,无疑为你的 Mac 使用体验增添了一份透明度和控制力。