在 Linux 系统中搜索日志是日常运维的重要工作,以下是几种常用的关键字搜索日志方法:
1. 基础 grep 搜索
bash
复制
# 基本搜索(区分大小写) grep "keyword" /var/log/syslog# 忽略大小写搜索 grep -i "error" /var/log/syslog# 显示匹配行及前后5行内容 grep -A 5 -B 5 "error" /var/log/syslog # 或简写为(显示前后各5行) grep -C 5 "error" /var/log/syslog# 显示匹配行的行号 grep -n "error" /var/log/syslog
2. 高级 grep 用法
bash
复制
# 正则表达式搜索 grep -E "error|fail|critical" /var/log/syslog# 反向搜索(显示不包含关键字的行) grep -v "success" /var/log/syslog# 统计匹配次数 grep -c "error" /var/log/syslog# 只显示匹配的部分(而非整行) grep -o "error=[0-9]*" /var/log/syslog
3. 实时日志监控
bash
复制
# 实时跟踪日志并过滤 tail -f /var/log/nginx/access.log | grep "404"# 多文件实时监控(需要安装multitail) multitail -e "error" /var/log/syslog /var/log/nginx/error.log
4. 搜索压缩日志
bash
复制
# 搜索.gz压缩文件 zgrep "error" /var/log/syslog.2.gz# 搜索多个压缩文件 zcat /var/log/syslog.*.gz | grep "error"
5. 使用 journalctl(systemd系统)
bash
复制
# 基本搜索 journalctl -x | grep "error"# 按时间过滤 journalctl --since "2023-10-01" --until "2023-10-02" | grep "error"# 按服务/单元过滤 journalctl -u nginx.service | grep "error"# 实时监控 journalctl -f | grep "error"
6. 组合命令高级搜索
bash
复制
# 搜索多个关键字(OR条件) grep -e "error" -e "fail" /var/log/syslog# 同时满足多个条件(AND条件) grep "error" /var/log/syslog | grep "connection"# 搜索后排序并统计 grep "error" /var/log/syslog | cut -d' ' -f5 | sort | uniq -c | sort -nr# 查找最近修改的日志文件并搜索 find /var/log -type f -mtime -1 -exec grep -i "error" {} +
7. 常用日志文件路径
日志文件 | 用途 |
---|---|
/var/log/syslog | 通用系统日志 |
/var/log/messages | 系统消息(RHEL/CentOS) |
/var/log/auth.log | 认证相关日志 |
/var/log/kern.log | 内核日志 |
/var/log/dmesg | 启动消息 |
/var/log/nginx/ | Nginx日志目录 |
/var/log/apache2/ | Apache日志目录 |
/var/log/mysql/ | MySQL日志目录 |
小技巧
-
使用
less
查看日志时可以按/
然后输入关键字进行搜索 -
对于大文件,先用
head
或tail
查看部分内容再搜索 -
使用
alias
创建常用搜索的快捷方式 -
考虑使用
logwatch
或goaccess
等工具进行更专业的日志分析
根据你的具体需求选择合适的搜索方法,组合使用这些命令可以大大提高日志分析的效率。