根据关键字搜索日志内容,常用的Linux命令
在 Linux 中,根据关键字搜索日志内容是运维和开发的常见需求。以下是常用的命令及场景示例:
1. grep
基础搜索
(1) 简单关键字匹配
# 在文件中搜索包含 "error" 的行
grep "error" /var/log/nginx/error.log
# 忽略大小写(-i)
grep -i "warning" /var/log/syslog
# 显示匹配行的行号(-n)
grep -n "timeout" app.log
(2) 多关键字搜索
# 同时匹配 "error" 或 "critical"(-E 启用正则)
grep -E "error|critical" /var/log/app.log
# 匹配同时包含 "user123" 和 "login" 的行(需顺序出现)
grep "user123.*login" auth.log
2. 上下文显示
# 显示匹配行及其后5行(-A)
grep -A 5 "panic" system.log
# 显示匹配行及其前3行(-B)
grep -B 3 "connection refused" network.log
# 显示匹配行前后各2行(-C)
grep -C 2 "oom killer" kern.log
3. 递归搜索目录
# 在 /var/log 目录下所有文件中搜索 "segmentation fault"
grep -r "segmentation fault" /var/log
# 仅显示文件名和匹配内容(-H)
grep -rH "404" /var/log/nginx/
4. 反向匹配(排除关键字)
# 排除包含 "debug" 的行
grep -v "debug" app.log
# 排除空行和注释行(多个条件)
grep -v -E "^$|^#" config.conf
5. 结合 find
搜索多个文件
# 查找所有 .log 文件并搜索 "out of memory"
find /var/log -name "*.log" -exec grep "out of memory" {} +
# 最近7天修改过的日志中搜索
find /opt/app/logs -name "*.log" -mtime -7 -exec grep "timeout" {} \;
6. 实时监控日志(tail
+ grep
)
# 实时追踪日志并过滤关键字
tail -f /var/log/nginx/access.log | grep "POST /login"
# 高亮显示匹配内容(需要 `grep --color`)
tail -f app.log | grep --color -E "error|warning"
7. 使用 awk
高级过滤
# 提取日志中特定列(如第4列状态码为500的行)
awk '$9 == 500 {print}' /var/log/nginx/access.log
# 结合时间范围过滤(假设时间在第4列)
awk '/2023-10-25 14:/, /2023-10-25 15:/' /var/log/app.log
8. 使用 sed
处理日志
# 提取两个关键字之间的内容
sed -n '/START/,/END/p' transaction.log
# 替换日志中的敏感信息
sed 's/密码:.*/密码:******/g' auth.log
9. 压缩日志搜索
# 直接搜索 .gz 压缩文件
zgrep "502 Bad Gateway" /var/log/nginx/access.log.1.gz
# 搜索多个压缩文件
zcat /var/log/nginx/*.gz | grep "404"
10. 统计匹配结果
# 统计匹配行数(-c)
grep -c "GET /api" access.log
# 统计每个匹配关键字的出现次数
grep -o "exception type:[A-Za-z]*" app.log | sort | uniq -c
11. 高亮显示(需终端支持)
# 使用 `grep` 自带高亮
grep --color=auto "ERROR" app.log
# 使用 `ack` 工具(更友好的高亮)
ack "WARNING" /var/log/*.log
12. 组合管道操作
# 复杂示例:搜索错误,排除测试用户,统计前10
grep "ERROR" app.log | grep -v "testuser" | cut -d' ' -f4- | sort | uniq -c | sort -nr | head -10
总结表格
场景 | 命令示例 |
---|---|
简单关键字搜索 | grep "error" file.log |
实时监控日志 | tail -f logfile | grep "keyword" |
多文件递归搜索 | grep -r "panic" /var/log |
排除干扰项 | grep -v "debug" app.log |
压缩文件搜索 | zgrep "404" access.log.gz |
统计错误类型 | grep -o "Error:\w*" app.log | sort | uniq -c |
时间段过滤 | sed -n '/2023-10-25 14:00:/,/2023-10-25 15:00:/p' system.log |
注意事项
-
权限问题:日志文件通常需要
sudo
权限 -
性能优化:大文件搜索时尽量缩小范围(如先用
find
按时间过滤) -
正则表达式:复杂匹配建议使用
-E
启用扩展正则 -
日志轮转:注意搜索范围是否包含历史日志(如
*.log
,*.gz
)
郭慕荣博客园
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2021-03-02 nginx -s reload原理
2021-03-02 Nginx 限流总结
2020-03-02 开发一个属于自己的Spring Boot Starter