journalctl默认只显示当前启动日志且从旧到新滚动;要查看全部日志,需用--all结合--boot或--list-boots,并配合--since/--until按时间筛选、-u按服务过滤、-p按优先级筛选,以及--no-pager避免分页卡顿。

直接运行 journalctl 命令就能查看系统全部日志信息,但默认只显示当前启动以来的日志,且内容从旧到新向上滚动。要真正“看全”,需配合几个关键选项来控制范围、排序和输出方式。
查看所有启动周期的日志
系统每次重启都会生成一个独立的日志单元,仅用 journalctl 默认只查本次启动。想看到历史启动的日志,得加上 --all(或简写为 -a)并配合 --boot 或 --list-boots:
-
journalctl --list-boots:列出所有已记录的启动会话(含编号、时间、boot ID) -
journalctl -b:查看本次启动日志 -
journalctl -b -1:查看上一次启动日志 -
journalctl -b 0:等同于-b,即本次启动 -
journalctl --all --no-pager:强制输出全部日志(含已归档的),不走分页器,适合重定向或管道处理
按时间范围筛选全部日志
日志量大时,无限制拉取可能卡顿或超内存。用时间参数精准定位更高效:
-
journalctl --since "2024-01-01":从指定日期起的所有日志 -
journalctl --since "2 hours ago":最近两小时 -
journalctl --since yesterday --until "30 minutes ago":昨天到半小时前 -
journalctl --since "2024-01-01 08:00:00" --until "2024-01-01 18:00:00":精确到秒的时间段
按服务、优先级或字段过滤
“全部日志”不等于“一股脑刷屏”,合理过滤才能快速定位问题:
-
journalctl -u sshd.service:只看 ssh 服务日志 -
journalctl -p err..emerg:只看错误及以上级别(err、crit、alert、emerg) -
journalctl _PID=1234:查特定进程 ID 的日志(注意下划线) -
journalctl SYSLOG_IDENTIFIER=kernel:只看内核日志 -
journalctl | grep -i "failed":管道配合 grep 快速搜索关键词(慎用于海量日志,优先用内置过滤)
实用查看技巧与注意事项
避免卡死、提升可读性,这几个习惯很关键:
- 加
--no-pager防止被 less 卡住,尤其配合| head或| tail时 - 加
-o json输出 JSON 格式,方便脚本解析;-o short-iso让时间显示更清晰 - 日志默认保存在
/var/log/journal/,若该目录不存在,说明日志是易失性的(仅存内存或 /run/log/journal),重启后丢失 - 如需永久保存全部日志,确保
Storage=persistent在/etc/systemd/journald.conf中启用,并重启 journald:sudo systemctl restart systemd-journald











