journalctl 是 systemd 的一部分,用于读取由 systemd-journald 服务收集的二进制日志(称为“journal”)。这些日志不仅包含内核消息、系统服务输出,还记录用户登录、硬件事件等信息。默认情况下,journal 日志存储在内存或 /run/log/journal/(临时)或 /var/log/journal/(持久化)中。

与传统日志相比,journal 日志具有以下优势:
- 结构化数据:每条日志包含多个字段(如 _PID、_COMM、_SYSTEMD_UNIT),便于准确过滤。
- 实时性:支持动态跟踪日志输出。
- 权限控制:普通用户只能查看自己的日志,管理员可查看全部。
- 自动轮转与压缩:避免日志无限增长。
基本用法
1. 查看全部日志
journalctl

该命令会分页显示系统自启动以来的所有日志(类似 less),按时间倒序排列(最新在最后)。按 q 退出。
2. 实时跟踪日志(类似 tail -f)
journalctl -f

持续输出最新日志,常用于调试服务或观察系统行为。
3. 查看特定服务的日志
这是最常用的操作之一。例如查看 SSH 服务日志:
journalctl -u sshd

-u 表明 –unit,可指定 systemd 服务单元名称。支持通配符:
journalctl -u nginx*
4. 按时间范围筛选
查看今天日志:
journalctl --since today

查看最近一小时日志:
journalctl --since "1 hour ago"

查看指定时间段:
journalctl --since "2025-11-01" --until "2025-11-03 12:00"
5. 查看内核日志
journalctl -k

等价于 dmesg 输出,但格式更统一。
6. 查看特定用户的日志
journalctl _UID=1000
可通过 id 命令获取用户 UID。
高级过滤与输出控制
- 仅显示错误级别及以上日志:
journalctl -p err

日志级别包括:emerg(0)、alert(1)、crit(2)、err(3)、warning(4)、notice(5)、info(6)、debug(7)。
- 限制输出行数:
journalctl -n 20 # 显示最后20行
- 以简洁格式输出:
journalctl --no-pager # 禁用分页,适合脚本使用
journalctl -o short-precise # 显示准确时间戳
- 导出日志到文件:
journalctl -u myapp.service > app.log
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
您必须登录才能参与评论!
立即登录

收藏了,感谢分享