根据关键字搜索日志内容,常用的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

注意事项

  1. 权限问题:日志文件通常需要 sudo 权限

  2. 性能优化:大文件搜索时尽量缩小范围(如先用 find 按时间过滤)

  3. 正则表达式:复杂匹配建议使用 -E 启用扩展正则

  4. 日志轮转:注意搜索范围是否包含历史日志(如 *.log*.gz

posted @   郭慕荣  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有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
点击右上角即可分享
微信分享提示