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或2025-10-12T14:23:01+08:00)。用awk灵活处理:
nginx访问日志:awk '$4 ~ /\[.*$(date +%d\/%b\/%Y)/ {print}' /var/log/nginx/access.log
awk '$4 ~ /^\[12\/Oct\/2025:14:/ {print}' access.log
sed -n '/Oct 12 14:00:/, /Oct 12 15:00:/ p' syslog截取时间段(适合标准syslog格式)Nginx或Apache日志结构清晰,awk是字段提取主力:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
awk '{print $9}' access.log | sort | uniq -c | sort -nr
awk '$9 == "500" {print $7}' access.log | sort -u
原始日志常含冗余字符或需格式标准化,sed擅长做“文本手术”:
[error] → error):sed 's/\[//g; s/\]//g'
sed 's/[[:space:]]\+/","/g; s/^","//; s/","$//'
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是“改”——组合起来就是日志分析的最小高效闭环。