Linux Shell 处理日志核心是组合使用 grep、awk、sed、sort、uniq 和 tail;如 grep 筛错误、awk 按时间范围提取、tail 查尾部、awk 提取关键字段等,无需复杂脚本。

Linux Shell 处理日志文件,核心在于用好 grep、awk、sed、sort、uniq 和 tail 这几个命令组合,而不是写复杂脚本。
快速定位错误行(含关键词过滤)
日志里找 ERROR、WARN 或特定模块异常最常用:
- grep "ERROR" /var/log/syslog —— 筛出所有含 ERROR 的行
- grep -i "connection refused" app.log | tail -20 —— 忽略大小写查连接拒绝,只看最后 20 条
- grep -E "(ERROR|FATAL)" service.log | awk '{print $1,$2,$NF}' —— 同时匹配多个关键词,并打印日期、时间和最后一列(如错误码)
按时间范围提取日志(适用于标准时间格式)
很多日志首字段是 YYYY-MM-DD HH:MM:SS 格式,可用 awk 直接比对:
- awk '$1=="2024-06-15" && $2>="10:00:00" && $2 —— 提取某天上午 10 点到中午 12:30 的记录
- awk -v start="14:00:00" -v end="15:30:00" '$1=="2024-06-15" && $2>=start && $2 —— 用变量更灵活
统计高频 IP 或状态码(去重+计数)
分析 Web 日志或访问行为时很实用:
- awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10 —— 统计访问最多的前 10 个客户端 IP
- awk '$9 ~ /^[45]/ {print $9}' access.log | sort | uniq -c | sort -nr —— 找出所有 4xx/5xx 状态码并排序计数($9 是常见状态码位置)
实时监控 + 高亮关键信息
用 tail -f 搭配 grep --color 实现带颜色的滚动查看:
- tail -f /var/log/messages | grep --color=always -E "(ERROR|WARNING|fail)" —— 实时追踪并高亮错误类关键词
- tail -f app.log | sed '/INFO/d' | grep --color=always -E "(WARN|ERROR)" —— 实时过滤掉 INFO 行,只留告警和错误










