journalctl -b是查看本次开机完整日志的首选命令,它结构化、时间准、来源清,覆盖从内核加载到服务就绪全过程;dmesg仅限内核早期阶段,/var/log/boot.log在现代发行版中已不可靠。

直接用 journalctl -b,这是最准、最全、最推荐的方式。 它不是“可能包含”,而是 systemd 启动后收集的全部结构化日志,覆盖从内核加载、服务启动到桌面就绪的完整链条,时间戳准确、来源清晰、不混入其他启动周期内容。
为什么不用 dmesg 或 /var/log/boot.log
dmesg 只输出内核环形缓冲区内容,早于 journald 启动的日志(比如 initramfs 阶段失败)它能捕获,但后续用户空间服务(如 sshd.service、network-manager.service)的日志它完全不包含;/var/log/boot.log 在多数现代发行版中已不再自动生成或更新,依赖 rsyslog 转发,可靠性低且格式松散。硬要用它们查“本次开机全部日志”,等于主动放弃 80% 的关键上下文。
journalctl -b 的实用参数组合
默认输出会卡在 less 分页器里,且按时间正序(最早在前),翻到最后才看到最新条目——这不符合排查直觉。建议这样用:
-
journalctl -b --no-pager:禁用分页,方便管道处理或快速扫屏 -
journalctl -b -n 100:只看最后 100 行,适合快速确认是否异常结束 -
journalctl -b -p err:只显示err及更严重级别(crit/alert/emerg),跳过大量info干扰 -
journalctl -b -o json-pretty:导出为带缩进的 JSON,方便程序解析或跨时区比对
常见错误和兼容性注意点
如果执行 journalctl -b 报错 No journal files were found,说明 journald 没启用持久化,且当前是内存日志模式(重启即丢)。这时需:
- 先运行
sudo mkdir -p /var/log/journal - 再运行
sudo chown root:systemd-journal /var/log/journal - 最后运行
sudo systemctl restart systemd-journald - 注意:WSL 或某些容器环境默认禁用持久化,上述操作后仍需验证
journalctl --list-boots是否返回非空列表
另外,-b 默认指最新一次启动,别误以为是“最近一次崩溃前”——真要查上一次,得显式写 journalctl -b -1,这个负号容易被忽略。











