Linux日志分析靠grep、awk、sed精准组合:grep筛选错误/警告等关键词并显示上下文,awk按时间戳提取日志片段并统计IP、状态码等字段,sed清洗格式、脱敏敏感信息,三者协同实现高效结构化分析。

Linux系统日志分析不靠猜,靠精准匹配和结构化提取。掌握grep、awk、sed这三个核心工具的组合用法,能快速从海量日志中定位异常、统计趋势、提取关键字段。
快速定位错误和警告信息
系统日志(如/var/log/syslog或/var/log/messages)里混杂大量信息,优先抓出高价值线索:
- 用
grep -i "error\|warning\|fail\|denied"不区分大小写筛选典型关键词 - 加
-C 2显示上下文(前后两行),便于看清报错前后的操作或服务状态 - 配合
tail -f /var/log/secure | grep "Failed password"实时监控SSH暴力破解尝试
按时间范围提取日志片段
日志首字段通常是时间戳,但格式不统一(如Oct 12 14:23:01或2024-10-12T14:23:01+08:00)。用awk灵活处理:
- 提取今天的所有
nginx访问日志:awk '$4 ~ /\[.*$(date +%d\/%b\/%Y)/ {print}' /var/log/nginx/access.log - 筛选某小时内的记录(假设时间在第4字段):
awk '$4 ~ /^\[12\/Oct\/2024:14:/ {print}' access.log - 用
sed -n '/Oct 12 14:00:/, /Oct 12 15:00:/ p' syslog截取时间段(适合标准syslog格式)
提取并统计关键字段(IP、状态码、URL)
Nginx或Apache日志结构清晰,awk是字段提取主力:
- 统计访问最多的IP:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10 - 查看HTTP状态码分布:
awk '{print $9}' access.log | sort | uniq -c | sort -nr - 提取返回500错误的完整URL:
awk '$9 == "500" {print $7}' access.log | sort -u
清洗与重构日志内容
原始日志常含冗余字符或需格式标准化,sed擅长做“文本手术”:
- 去掉日志中的方括号(如
[error]→error):sed 's/\[//g; s/\]//g' - 把多空格替换成单逗号,方便导入CSV:
sed 's/[[:space:]]\+/","/g; s/^","//; s/","$//' - 脱敏处理敏感IP(如将
192.168.1.100替换为192.168.1.XXX):sed 's/192\.168\.1\.[0-9]\+/192.168.1.XXX/g'
实际分析时,三者常嵌套使用:先用grep缩小范围,再用awk切字段,最后用sed整理输出。不必死记命令,理解每条工具的核心能力——grep是“找”,awk是“切和算”,sed是“改”——组合起来就是日志分析的最小高效闭环。










