journalctl命令

journalctl 命令 #

journalctl是一个用于查询和显示 systemd 日志(journal)的命令行工具。systemd 的 journal 是一个结构化的系统日志存储机制,它收集内核日志消息、系统日志消息、标准输出和标准错误,以及各种服务的日志。

语法 #

journalctl [选项...] [匹配...]

常用选项 #

选项 描述
-f, --follow 实时跟踪日志(类似于tail -f
-n, --lines= 显示最后 N 行日志
-r, --reverse 逆序显示日志(最新的先显示)
-o, --output= 指定输出格式(如 short, json, cat 等)
-u, --unit= 显示特定 systemd 单元的日志
-b, --boot[=ID] 显示特定启动的日志,不带参数则显示当前启动的日志
-k, --dmesg 只显示内核消息
-p, --priority= 按优先级过滤日志
--since=, --until= 显示特定时间范围内的日志
-x, --catalog 添加解释性帮助文本
-e, --pager-end 立即跳转到日志末尾
-S, --since= 显示晚于指定时间的日志
-U, --until= 显示早于指定时间的日志
--disk-usage 显示 journal 当前使用的磁盘空间
--vacuum-size=, --vacuum-time= 清理旧日志,按大小或时间

日志优先级 #

使用-p选项可以按优先级过滤日志,优先级从高到低为:

  1. emerg - 系统不可用
  2. alert - 必须立即采取行动
  3. crit - 严重情况
  4. err - 错误情况
  5. warning - 警告情况
  6. notice - 正常但重要的情况
  7. info - 信息性消息
  8. debug - 调试级别消息

常见用法 #

1. 查看所有日志 #

journalctl

2. 实时跟踪日志 #

journalctl -f

3. 查看特定服务的日志 #

journalctl -u nginx.service

4. 查看特定进程的日志 #

journalctl _PID=1234

5. 查看特定用户的日志 #

journalctl _UID=1000

6. 查看内核日志 #

journalctl -k

7. 查看特定时间范围的日志 #

journalctl --since="2025-07-20 10:00:00" --until="2025-07-20 11:00:00"

8. 查看最近的启动日志 #

journalctl -b

9. 查看上一次启动的日志 #

journalctl -b -1

10. 查看特定优先级的日志 #

journalctl -p err

11. 查看特定可执行文件的日志 #

journalctl /usr/bin/sshd

12. 以 JSON 格式输出日志 #

journalctl -o json

13. 查看 journal 使用的磁盘空间 #

journalctl --disk-usage

14. 清理旧日志,只保留最近 100MB #

sudo journalctl --vacuum-size=100M

15. 清理特定时间之前的日志 #

sudo journalctl --vacuum-time=1weeks

输出格式 #

使用-o选项可以指定不同的输出格式:

  • short: 默认格式,显示优先级、主机名、时间戳、服务名和消息
  • verbose: 显示所有字段
  • json: JSON 格式,适合程序处理
  • json-pretty: 格式化的 JSON 输出
  • cat: 只显示消息字段,没有元数据
  • export: 二进制格式,适合传输

匹配表达式 #

journalctl支持多种匹配表达式来过滤日志:

  • _SYSTEMD_UNIT=unit: 匹配特定 systemd 单元
  • _PID=pid: 匹配特定进程 ID
  • _UID=uid: 匹配特定用户 ID
  • _HOSTNAME=hostname: 匹配特定主机名
  • _COMM=command: 匹配特定命令名
  • _EXE=path: 匹配特定可执行文件路径
  • PRIORITY=level: 匹配特定优先级
  • _TRANSPORT=transport: 匹配特定传输方式(如 syslog, journal 等)

注意事项 #

  • 大多数journalctl命令需要 root 权限才能查看所有日志
  • 默认情况下,journal 日志存储在/var/log/journal/目录下
  • 如果该目录不存在,日志会存储在/run/log/journal/中,这意味着日志在重启后会丢失
  • 可以通过编辑/etc/systemd/journald.conf文件来配置 journal 的行为
  • 使用--vacuum-size--vacuum-time选项可以控制 journal 的大小,防止磁盘空间耗尽