linux中find与grep组合是检索日志最常用方法:find按路径、时间、名称等定位日志文件,grep在其内容中搜索关键词,并支持zgrep/xzgrep处理压缩日志及多种优化选项。

在 Linux 系统中,find 和 grep 是检索日志文件最常用、最灵活的组合工具。核心思路是:用 find 定位目标日志文件(按路径、时间、名称等),再用 grep 在这些文件中搜索关键词。
按文件名或路径查找日志文件
很多日志存放在固定目录,比如 /var/log/。先用 find 快速筛选出感兴趣的日志文件:
-
find /var/log -name "syslog*"—— 查找所有以syslog开头的文件(如syslog、syslog.1) -
find /var/log -name "*.log" -mtime -7—— 找出最近 7 天内修改过的.log文件 -
find /var/log -type f -size +10M—— 找出大于 10MB 的日志文件,便于排查大日志
在多个日志文件中搜索关键词
找到文件后,把 find 的输出传给 grep 搜索内容。推荐用 -exec 或管道配合 xargs:
-
find /var/log -name "auth.log*" -exec grep "Failed password" {} \;—— 在所有auth.log及其归档中搜索登录失败记录 -
find /var/log/nginx -name "*.log" | xargs grep "404"—— 搜索 Nginx 日志中所有 404 错误(注意:若路径含空格,建议加-print0 | xargs -0) -
find /var/log -name "journal*" -exec zgrep "Out of memory" {} \; 2>/dev/null—— 对压缩的 journal 日志(如journal.log.gz)用zgrep搜索
提高搜索效率和可读性
实际排查时,加几个常用选项会让结果更实用:
- 加
-i忽略大小写:grep -i "error" - 加
-n显示行号:grep -n "timeout" - 加
-A 2 -B 1显示匹配行前后几行上下文:grep -A 3 "panic" /var/log/kern.log - 用
grep -v排除干扰项,比如过滤掉重复的健康检查日志:grep "GET /health" access.log | grep -v "200"
处理滚动日志和压缩包
系统日志常被 logrotate 压缩归档,直接用 grep 找不到内容。需要适配不同格式:
- 对
.gz文件:用zgrep,例如zgrep "Connection refused" /var/log/syslog.1.gz - 对
.xz文件:用xzgrep - 想统一处理多种格式,可写简单循环:
for f in /var/log/syslog*; do echo "== $f =="; if [[ "$f" == *.gz ]]; then zgrep "OOM" "$f"; else grep "OOM" "$f" 2>/dev/null; fi; done











