在 Linux 中按时间筛选日志通常有几种常见方式,取决于你用的是系统日志(rsyslog / journald)还是普通文本日志文件。下面按场景给你总结。
journalctl(推荐,适用于 systemd 系统)如果你的系统使用 systemd(大多数现代 Linux 发行版),日志由 journald 管理。
journalctl --since "2024-01-01 00:00:00" --until "2024-01-02 23:59:59"
journalctl --since "1 hour ago"
journalctl --since "30 min ago"
journalctl --since "yesterday"
journalctl -u nginx --since "2024-06-01"
journalctl -f --since "10 min ago"
grep + 文本日志(最常见)如果你的日志是普通文件,如:
/var/log/messages
/var/log/syslog
/var/log/nginx/access.log
grep "2024-06-01" /var/log/syslog
grep "Jun 1 10:" /var/log/messages
grep -E "2024-06-0[1-3]" /var/log/nginx/access.log
awk 精确按时间筛选(推荐高级用法)假设日志时间格式是:
2024-06-01 10:15:30 ...
awk '$1>="2024-06-01" && $1<="2024-06-02"' /var/log/app.log
awk '$1=="2024-06-01" && $2>="10:00:00" && $2<="11:00:00"' /var/log/app.log
sed 按行区间(适合大文件)如果日志是按时间顺序写的:
sed -n '/2024-06-01 10:00/,/2024-06-01 11:00/p' /var/log/app.log
logrotate 历史日志如果你要查旧日志:
zcat /var/log/syslog.1.gz | grep "2024-05-30"
或:
zgrep "2024-05-30" /var/log/syslog.*
✅ 查今天 Nginx 错误日志:
grep "$(date '+%Y-%m-%d')" /var/log/nginx/error.log
✅ 查过去 1 小时 SSH 登录:
journalctl -u ssh --since "1 hour ago"
✅ 查某个时间段的报错:
awk '$1>="2024-06-01 09:00" && $1<="2024-06-01 10:00" && /ERROR/' app.log
如果你能告诉我:
我可以帮你写一条精确命令。