linux多文件日志搜索需组合find定位文件与grep提取内容:先用find按名、时间等条件筛选日志文件,再用grep -r递归搜索关键字,支持正则、上下文显示、高亮、分页及结果导出。

Linux 多文件日志搜索,核心是组合 find 定位文件 + grep 提取内容,而不是靠单一命令硬扫。
按名称批量找日志文件
先明确要查哪些文件,比如所有以 .log 结尾、或包含 error 字样的日志:
-
find /var/log -name "*.log"—— 查找 /var/log 下全部 .log 文件 -
find /app/logs -name "app-*.log" -mtime -1—— 找过去 24 小时内生成的 app- 开头日志 -
find . -iname "*access*" -o -iname "*error*"—— 不区分大小写,找含 access 或 error 的文件名
在多个文件里搜关键字(或/且关系)
定位到文件后,用 grep -r 直接递归搜索,比逐个 cat | grep 更高效:
-
grep -r "timeout" /var/log/nginx/—— 在整个 nginx 日志目录里搜 timeout -
grep -r -E "500|502|504" /var/log/nginx/—— 搜任意一种 HTTP 错误码(-E 必须加,否则|当普通字符处理) -
grep -r "Connection refused" /var/log/ | grep "mysql"—— 先找出含 Connection refused 的行,再从中筛选带 mysql 的(实现“且”逻辑)
带上下文和高亮的精准查看
查到匹配行后,常需看前几行或后几行辅助判断上下文:
-
grep -r -A 2 -B 1 "panic" /var/log/kern.log*—— 每个匹配行显示前 1 行、后 2 行 -
grep --color=always -n "WARN" app.log | head -20—— 高亮 WARN 并标出行号,只看前 20 条 -
grep -r -i "failed to connect" /app/logs/ | less—— 结果太多时用 less 分页,按 / 可继续搜索
快速提取并保存结果
把关键线索导出成新文件,方便后续分析或上报:
grep -r "OutOfMemoryError" /var/log/tomcat/ > oom-report.log-
find /data/logs -name "*.out" -mtime -7 | xargs grep -l "Exception" > exception-files.txt—— 找近 7 天含 Exception 的 .out 文件名列表 -
grep -r "order_id=.*[0-9a-f]{8}" /var/log/app/ | cut -d' ' -f1,4- | sort -u—— 提取 order_id 及其上下文字段,去重排序










