journalctl 是 systemd 的结构化日志工具,支持按时间(--since/--until)、服务(-u)、优先级(-p)、字段(_comm/_pid)等多维度过滤,并可实时跟踪(-f)、导出(--no-pager)或清理日志(--vacuum-size)。

journalctl 是 systemd 系统日志的核心工具,比传统 syslog 更结构化、更灵活。掌握它的查看与过滤技巧,能快速定位服务异常、启动失败或系统事件,无需翻找分散的日志文件。
按时间范围精准筛选日志
默认 journalctl 显示全部日志(可能非常长),常用时间选项可大幅缩小范围:
-
最近1小时:
journalctl --since "1 hour ago" -
今天凌晨以来:
journalctl --since today -
指定时间段:
journalctl --since "2024-05-20 14:00:00" --until "2024-05-20 14:30:00" -
上次启动后:
journalctl -b(-b -1表示上一次启动)
按服务或单元过滤日志
排查某个服务问题时,聚焦其专属日志最有效:
-
查看 nginx 启动和运行日志:
journalctl -u nginx.service -
跟踪 ssh 登录相关(包括 sshd 和 pam):
journalctl -u sshd.service _COMM=sshd -
同时查多个服务:
journalctl -u nginx.service -u php-fpm.service -
只看失败的单元:
journalctl --failed(列出所有状态为 failed 的 service)
按优先级与字段动态过滤
journal 日志带结构化字段(如 PRIORITY、_PID、SYSLOG_IDENTIFIER),支持细粒度筛选:
-
只看错误及以上级别(err/warning/crit/alert/emerg):
journalctl -p 3(数字 0–7,3 对应 err) -
查特定进程 ID 的日志:
journalctl _PID=1234 -
按程序名过滤(非单元名):
journalctl _COMM=kernel或_COMM=sudo -
组合条件:nginx 错误 + 今天:
journalctl -u nginx.service -p 3 --since today
实时跟踪与实用操作技巧
调试中常需持续观察日志流,配合分页和导出提升效率:
-
实时跟随新日志(类似 tail -f):
journalctl -u nginx.service -f -
以 JSON 格式输出(适合脚本解析):
journalctl -u nginx.service -o json -
只显示消息体(去掉时间戳和元数据):
journalctl -u nginx.service -o cat -
导出全部日志为文本备份:
journalctl --all --no-pager > all.log -
清空日志(谨慎使用):
journalctl --vacuum-size=100M(保留最新 100MB)
journalctl 的强大在于字段化设计和组合能力,不必死记命令,记住 -u(服务)、-p(级别)、--since(时间)、-f(跟随)四个核心开关,再配合 Tab 补全和 journalctl --help,日常排错足够高效。










