linux中按引导批次查历史日志需依赖systemd-journald持久化存储,通过journalctl -b编号或boot id精准定位某次启动日志,-b -1表示上一次完整启动,非上次关机前日志。

在 Linux 系统中,按引导批次(即每次开机)查看历史系统日志,核心是利用 systemd-journald 的启动会话(boot)标记机制。只要日志已持久化,就能精准回溯某次开机的完整运行过程。
确认系统支持并有历史启动记录
执行以下三条命令,快速验证基础条件是否满足:
-
sudo journalctl --disk-usage:输出非零值(如
89.2M),说明/var/log/journal/已启用持久存储 -
journalctl --list-boots:列出多行结果(如
-2 abc1 Wed 2026-09-13...),代表存在可查的历史启动批次 -
journalctl -b -1 -k | head -n 3:能输出早于
systemd[1]: Starting...的内核消息,说明 early boot 日志完整保留
用编号快速过滤指定批次的日志
编号从 0 开始表示本次启动,负数表示过去批次:-1 是上一次,-2 是上上次,依此类推。
- journalctl -b 0 或 journalctl -b:本次启动全部日志(含内核、服务、systemd)
- journalctl -b -1:上一次启动的全部日志
-
journalctl -b -1 -k:仅上一次启动的内核日志(等效于那次开机的
dmesg) - journalctl -b -2 -u sshd.service:查看倒数第二次启动中 SSH 服务的完整运行过程
用 Boot ID 精确匹配某次特定启动
当重启频繁、编号易混淆,或需跨主机比对时,Boot ID 更可靠——它是每次启动生成的唯一字符串。
- 先运行 journalctl --list-boots,复制某行开头的长 ID(如
5a7c3e1f9b2d4a8c9e0f1a2b3c4d5e6f) - 再执行 journalctl -b 5a7c3e1f9b2d4a8c9e0f1a2b3c4d5e6f 查该次完整日志
- 可追加
-k(只看内核)、-u nginx.service(只看某服务)进一步限定内容
注意事项与常见误区
部分情况会导致按批次查日志失败或结果偏差:
- 若
journalctl --list-boots只显示一行(序号0),说明日志未持久化,需手动启用:sudo mkdir -p /var/log/journal && sudo chown root:systemd-journal /var/log/journal,再重启systemd-journald -
-b -1不等于“上次关机前的日志”——它指最近一次成功完成的启动;内核 panic 后强制断电重启,可能跳过记录 - UEFI 快启、热迁移等场景可能不生成独立 boot 条目,
--list-boots中对应时间范围会缺失 -
last reboot和uptime -s都无法替代--list-boots:前者只记录主动发起的重启,后者仅返回当前启动时间











