journalctl
是 Linux 系统中用于查询 systemd-journald
服务收集的日志的命令行工具,它统一管理系统、服务、内核等各类日志,支持灵活的筛选和查询,是排查系统问题的核心工具之一。
一、基本用法
1. 查看所有日志(默认按时间倒序)
journalctl
按
q
退出查看,按↑↓
滚动,按G
跳至末尾,按g
跳至开头。
2. 按时间正序查看(从最早开始)
journalctl --no-pager # 不进入分页模式,直接输出
journalctl -r # 反向查看(默认是倒序,-r 更明确)
journalctl --reverse # 同上,反向显示(最新日志在前)
二、按服务 / 单元筛选
1. 查看指定服务的日志(最常用)
journalctl -u 服务名.service # .service 可省略
# 示例:查看 nginx 服务日志
journalctl -u nginx
# 示例:查看 sshd 服务日志
journalctl -u sshd
2. 查看系统单元(如定时器、挂载点)的日志
# 查看定时器单元日志
journalctl -u certbot.timer
# 查看挂载单元日志
journalctl -u mnt-data.mount
三、按时间筛选
1. 查看最近一段时间的日志
# 最近 1 小时
journalctl --since "1 hour ago"
# 最近 30 分钟
journalctl --since "30 minutes ago"
# 今天的日志
journalctl --since today
# 昨天的日志
journalctl --since yesterday --until today
2. 查看具体时间范围的日志
# 2024-08-01 08:00 到 2024-08-01 12:00
journalctl --since "2024-08-01 08:00" --until "2024-08-01 12:00"
# 昨天 18:00 到现在
journalctl --since "yesterday 18:00"
四、实时监控日志(类似 tail -f)
# 实时跟踪所有日志
journalctl -f
# 实时跟踪指定服务日志(如 nginx)
journalctl -u nginx -f
五、按日志级别筛选(错误、警告等)
日志级别从低到高:debug
(调试)、info
(信息)、notice
(通知)、warning
(警告)、err
(错误)、crit
(严重)、alert
(警报)、emerg
(紧急)。
# 只看错误及以上级别日志(err, crit, alert, emerg)
journalctl -p err
# 只看警告及以上级别(warning, err, ...)
journalctl -p warning
# 结合服务和级别:查看 nginx 的错误日志
journalctl -u nginx -p err
六、按进程 / 用户 / 内核筛选
# 查看指定进程(PID)的日志
journalctl _PID=1234
# 查看指定用户(UID)的日志
journalctl _UID=1000
# 查看内核日志(类似 dmesg)
journalctl -k
# 查看最近的内核错误
journalctl -k -p err
七、日志输出格式与保存
1. 自定义输出格式
# 简洁格式(仅时间、主机、服务、消息)
journalctl -o short
# 详细格式(含 PID、UID、日志级别等)
journalctl -o verbose
# JSON 格式(便于解析)
journalctl -o json
2. 保存日志到文件
# 保存 nginx 错误日志到文件
journalctl -u nginx -p err > nginx_errors.log
八、日志清理与管理
默认日志由 systemd-journald
自动管理,可手动限制大小或清理:
# 保留最近 100MB 日志
sudo journalctl --vacuum-size=100M
# 保留最近 7 天的日志
sudo journalctl --vacuum-time=7d
# 强制轮转日志(立即切割当前日志)
sudo journalctl --rotate
九、注意事项
权限:部分日志(如系统级错误)需要 root 权限,需加
sudo
。日志存储:默认日志可能保存在内存(重启丢失)或磁盘(
/var/log/journal/
,需启用持久化)。 启用磁盘存储:sudo mkdir -p /var/log/journal && sudo systemctl restart systemd-journald
。性能:日志量过大时,可通过时间、级别等条件缩小范围,避免查询缓慢。
journalctl
几乎覆盖了所有日志查询场景,熟练使用能极大提升系统问题排查效率。