journalctl -o verbose 以详细格式输出每条日志的全部字段,包括内置元数据(如\_PID、\_UID、\_COMM)和应用层字段(如SYSLOG_IDENTIFIER),支持配合过滤使用,但普通用户需权限才能查看敏感字段。

注意:journalctl -o verbose 是正确写法,不是 -O-verbose(该写法无效)。
journalctl -o verbose 会以“详细格式”输出每条日志,展示该条目在 journal 中存储的全部字段(metadata + message),包括 _PID, _UID, _GID, _COMM, _EXE, _SYSTEMD_UNIT, _HOSTNAME 等标准元数据,以及自定义字段(如 SYSLOG_IDENTIFIER, CODE_FILE, CODE_LINE 等,取决于服务如何记录日志)。
如何查看完整元数据
直接运行:
journalctl -o verbose
默认显示所有日志(可能很长),建议配合过滤使用。例如:
- 查最近10条带全字段的日志:
journalctl -n 10 -o verbose - 查某个服务(如 sshd)的详细日志:
journalctl -u sshd -o verbose - 查当前启动以来的日志:
journalctl -b -o verbose - 实时跟踪新增日志:
journalctl -f -o verbose
关键元数据字段说明
常见以 _ 开头的内置字段(只读,由 systemd-journald 自动添加):
- _PID:生成该日志的进程 ID
- _UID / _GID:进程的有效用户/组 ID
-
_COMM:进程的简短命令名(如
sshd,systemd) -
_EXE:进程可执行文件的绝对路径(如
/usr/sbin/sshd) - _CMDLINE:进程启动时的完整命令行参数
-
_SYSTEMD_UNIT:所属 systemd unit(如
sshd.service) - _HOSTNAME:日志来源主机名
- _SOURCE_REALTIME_TIMESTAMP:日志产生时间(微秒级 Unix 时间戳)
还有像 SYSLOG_IDENTIFIER、PRIORITY、CODE_FILE 这类由应用层写入的字段,也会一并显示。
进阶:提取特定字段或结构化分析
若只想看某些字段(比如只关注 PID 和 UID),可用 --output-fields(需 systemd v246+):
journalctl -n 5 -o verbose --output-fields=_PID,_UID,_COMM,_EXE
或者用 JSON 格式导出后解析(更灵活):
journalctl -n 5 -o json | jq '._PID, ."_UID", ."_COMM"'
注意:JSON 输出中字段名带引号(如 "_PID"),因为部分字段含特殊字符。
小贴士
- 普通用户运行
journalctl可能看不到全部字段(尤其 `_UID`, `_EXE`),因 journal 默认限制非 root 查看敏感字段;可临时授权:sudo journalctl ...或配置/etc/systemd/journald.conf中的ReadKMsg=yes和权限策略 -
-o verbose不是“调试模式”,它只是改变输出格式,不影响日志采集行为 - 字段名区分大小写,且必须带下划线前缀(如
_PID≠PID)


















