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
选项可以按优先级过滤日志,优先级从高到低为:
emerg
- 系统不可用alert
- 必须立即采取行动crit
- 严重情况err
- 错误情况warning
- 警告情况notice
- 正常但重要的情况info
- 信息性消息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 的大小,防止磁盘空间耗尽