使用grep检索崩溃前一分钟日志的关键是先定位时间范围,再用journalctl截取并grep过滤关键词,而非仅依赖grep文本匹配。

要使用 grep 检索系统崩溃前最后一分钟的日志,关键不在于 grep 本身(它只做文本匹配),而在于先定位到崩溃前后的时间范围,再结合日志工具(如 journalctl 或 syslog)提取对应时间段的日志,最后用 grep 过滤关键词。
确认系统是否启用 systemd journal
现代 Linux 发行版大多使用 systemd,日志由 journald 管理。可运行以下命令验证:
-
systemctl is-active systemd-journald(应返回active) -
journalctl --disk-usage(检查日志是否保存在磁盘)
估算崩溃发生时间
系统崩溃后重启,通常无法直接获知精确崩溃时刻,但可通过以下方式缩小范围:
- 查看上次启动时间:
who -b或uptime -s,得到重启时间(即崩溃“之后”的最早时间点) - 若启用了
rsyslog或写入/var/log/syslog,可查tail -n 100 /var/log/syslog | grep -i "kernel\|panic\|oops\|segfault"辅助判断 - 硬件日志(如
dmesg -T | tail -50)有时保留重启前的最后内核消息
提取崩溃前 60 秒的日志并用 grep 过滤
假设重启时间为 2024-05-20 14:30:22,你想查这之前 1 分钟(即 14:29:22 到 14:30:22)的日志:
- 用
journalctl截取该时间段:journalctl --since "2024-05-20 14:29:22" --until "2024-05-20 14:30:22" - 再用
grep筛选关键线索:journalctl --since "2024-05-20 14:29:22" --until "2024-05-20 14:30:22" | grep -i -E "panic|oops|segfault|watchdog|hard lockup|kdump|kernel BUG" - 也可反向操作:先用
grep找出疑似崩溃线索,再用-B5 -A5查上下文:journalctl | grep -i -B5 -A5 "kernel panic"
补充:非 systemd 系统(如旧版 SysV init)
若使用 rsyslog,日志通常在 /var/log/messages 或 /var/log/syslog:
- 用
awk或sed提取时间范围较麻烦,建议先用grep -n定位大致行号,再结合tail -n +N | head -n M截取 - 更稳妥的方式是借助
date计算时间戳,配合awk解析日志时间字段(注意日志时间格式可能无年份,需手动补全) - 例如:
awk '$1=="May" && $2==20 && $3>14:29 && $3(需根据实际日志格式调整)


















