好的,这是一份详细的 journalctl 使用教程。

journalctlsystemd 日志系统(systemd-journald)的命令行查询工具。在所有现代 Linux 发行版(如 Ubuntu 16.04+, CentOS/RHEL 7+, Debian 8+)上,systemd 是默认的 init 系统,journalctl 也因此成为了查看和管理系统日志的标准方式

它取代了(或统一了)旧的 /var/log/syslog, /var/log/messages, /var/log/dmesg 等零散的日志文件。

 

为什么使用 journalctl

 


 

1. 基础用法

1.1. 查看所有日志

 

默认情况下,journalctl 会按时间顺序显示所有日志,并自动通过 less 分页器显示(所以你可以用箭头键上下滚动,按 q 退出)。

 

提示:less 中,按 G (大写) 可立即跳到日志末尾(最新),按 g (小写) 跳到开头。

 

1.2. 实时跟踪日志 (live tail)

 

这是最常用的命令之一,等同于 tail -f

 

1.3. 查看最新日志

 

使用 -n 标志可以指定显示最新的 N 行。

 

1.4. 按时间倒序查看

 

默认是时间正序(旧 -> 新)。使用 -r (--reverse) 可以反转,让最新日志显示在最上面。这对于快速查看“刚刚发生了什么”非常有用。

 

 

1.5. 查看本次启动的日志

 

使用 -b (--boot) 标志,可以只显示本次系统启动以来的所有日志,自动过滤掉以前的旧日志。

 

 

1.6. 查看上一次启动的日志

 

这对于排查导致系统崩溃或重启的问题至关重要。

 

你可以使用 journalctl --list-boots 查看所有可用的启动历史记录。


 

2. 强大的过滤功能(核心)

 

journalctl 真正的威力在于其过滤能力。

 

2.1. 按服务单元 (Service Unit) 过滤 ⭐

 

这是最重要的过滤方式,用于查看特定服务(如 nginxsshd)的日志。

 

2.2. 按时间范围过滤

 

journalctl 可以理解人类可读的时间短语。

 

 

2.3. 按优先级 (Priority) 过滤

 

用于快速筛选出错误或警告信息。优先级从高到低:

emerg (0), alert (1), crit (2), err (3), warning (4), notice (5), info (6), debug (7)

使用 -p 标志。

 

 

2.4. 查看内核日志

 

这等同于运行 dmesg 命令。

 

 

2.5. 按可执行文件或 PID 过滤

 

有时你不知道服务名,只知道进程 ID 或可执行文件路径。

 


 

3. 日志输出格式 (-o)

 

journald 存储的是结构化数据,你可以改变它的输出格式。

 


 

4. 日志管理(运维必备)

 

 

4.1. 启用日志持久化 (Persistence) ⭐

 

默认情况下,很多 systemd 发行版(如早期的 Ubuntu)将日志存储在 /run/log/journal/ 目录。run 目录是一个内存文件系统 (tmpfs),这意味着系统重启后所有日志都会丢失

检查持久化状态:

 

如何启用持久化:

你只需创建 journald 默认的持久化存储目录即可。

 

重启服务后,journald 会自动开始将日志写入 /var/log/journal/,重启后日志将保留。

 

4.2. 检查日志磁盘占用

 

 

 

4.3. 清理旧日志 (Vacuuming)

 

如果日志占用了太多空间,可以手动清理。journald 也可以自动管理大小,但手动清理更直接。

清理方式 1:按大小限制(推荐)

这会删除最旧的日志,直到日志总大小小于指定值。

 

清理方式 2:按时间限制

这会删除指定时间之前的所有日志。

 

 

4.4. 永久配置日志大小限制

 

你可以编辑配置文件 /etc/systemd/journald.conf 来永久限制日志大小。

 

SystemMaxUse/var/log/journal (持久化) 的大小上限。


 

journalctl 快速备忘录

 

命令功能
journalctl -f实时跟踪(tail -f
journalctl -u nginx查看 nginx 服务的日志
journalctl -u nginx -f实时跟踪 nginx 的日志
journalctl -b查看本次启动的日志
journalctl -b -1查看上一次启动的日志(用于排错)
journalctl -r倒序显示(最新在前)
journalctl -p err查看错误 (err) 及以上级别日志
journalctl -p err -b查看本次启动的所有错误
journalctl --since "1h ago"查看 1 小时前至今的日志
journalctl -k查看内核日志(dmesg
journalctl --disk-usage查看日志占用的磁盘空间
sudo journalctl --vacuum-size=1G清理日志,保留 1G
sudo journalctl --vacuum-time=7d清理日志,保留 7 天