用这几个命令玩转 Linux 日志分析

Linux安全运维 (31) 2025-06-06 14:23:38

日志分析是系统管理员、开发人员和DevOps工程师日常工作中不可或缺的一部分。无论是排查系统故障、分析性能瓶颈,还是监控安全事件,日志都是最直接的信息来源。

本文是我为你整理的日志分析命令集,涵盖Linux系统下各种日志文件的查看、过滤、统计和分析技巧,可以助你快速定位问题,提升工作效率。

一、基础日志查看命令

1. tail命令 - 实时监控日志

tail命令是查看日志文件末尾内容的利器,特别适合实时监控日志变化:

# 查看文件最后10行(默认)
tail /var/log/syslog
# 查看文件最后100行
tail -n 100 /var/log/nginx/access.log
# 实时追踪日志更新(最常用)
tail -f /var/log/apache2/error.log
# 同时追踪多个日志文件
tail -f /var/log/nginx/access.log /var/log/nginx/error.log
# 显示行号
tail -n 50 -v /var/log/auth.log

2. head命令 - 查看日志开头

与tail相反,head用于查看文件开头部分:

# 查看文件前20行
head -n 20 /var/log/dmesg
# 查看前100字节
head -c 100 /var/log/bootstrap.log

3. cat命令 - 完整日志查看

# 查看完整日志文件
cat /var/log/kern.log
# 结合more/less分页查看
cat /var/log/long.log | more
cat /var/log/long.log | less
# 显示行号
cat -n /var/log/syslog
# 显示非空行
cat -s /var/log/nginx/error.log

4. grep命令 - 日志过滤神器

grep是日志分析中最强大的工具之一:

# 简单搜索
grep "error" /var/log/syslog
# 忽略大小写
grep -i "warning" /var/log/messages
# 显示匹配行及前后5行
grep -A 5 -B 5 "critical" /var/log/application.log
# 反向匹配(显示不包含error的行)
grep -v "error" /var/log/apache2/access.log
# 正则表达式匹配
grep -E "404|500" /var/log/nginx/access.log
# 统计匹配行数
grep -c "GET" /var/log/nginx/access.log
# 递归搜索目录下所有日志文件
grep -r "segmentation fault" /var/log/

二、高级日志分析技巧

1. awk命令 - 字段提取与分析

awk特别适合处理结构化日志(如nginx、apache访问日志):

# 提取访问日志中的IP地址
awk '{print $1}' /var/log/nginx/access.log
# 统计IP访问次数并排序
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
# 统计HTTP状态码出现次数
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
# 计算某时间段的请求数
awk '/12\/May\/2023:15:/,/12\/May\/2023:16:/' /var/log/nginx/access.log | wc -l
# 统计访问量最大的URL
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
# 计算平均响应时间(假设第10列为响应时间)
awk '{sum+=$10; count++} END {print "Avg:",sum/count,"ms"}' /var/log/nginx/access.log

2. sed命令 - 流编辑器

sed适合对日志进行批量替换和过滤:

# 替换日志中的敏感信息
sed 's/192.168.1.100/[REDACTED]/g' /var/log/auth.log
# 提取特定时间范围的日志
sed -n '/May 10 09:00:00/,/May 10 10:00:00/p' /var/log/syslog
# 删除空白行
sed '/^$/d' /var/log/application.log
# 只显示包含error或warning的行
sed -n '/error\|warning/p' /var/log/syslog

3. cut命令 - 按列提取

# 提取第一列
cut -d' ' -f1 /var/log/nginx/access.log
# 提取第5-8列
cut -d' ' -f5-8 /var/log/nginx/access.log
# 使用冒号分隔符提取用户名
cut -d: -f1 /etc/passwd

三、日志统计与分析

1. 频率统计

# 统计IP出现频率
cat /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr
# 统计HTTP状态码频率
cat /var/log/nginx/access.log | awk '{print $9}' | sort | uniq -c | sort -n
# 统计访问最多的URL
cat /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head -20
# 统计不同HTTP方法的请求数
cat /var/log/nginx/access.log | awk '{print $6}' | sed 's/"//g' | sort | uniq -c

2. 时间范围分析

# 统计每小时请求数
cat /var/log/nginx/access.log | awk '{print $4}' | cut -d: -f2 | sort | uniq -c
# 统计每分钟请求数(更精细)
cat /var/log/nginx/access.log | awk '{print $4}' | cut -d: -f2,3 | sort | uniq -c
# 统计每天请求数(需要日志中包含日期)
cat /var/log/nginx/access.log | awk '{print $4}' | cut -d[ -f2 | cut -d: -f1 | sort | uniq -c

3. 性能分析

# 找出响应时间最长的请求(假设第10列为响应时间)
cat /var/log/nginx/access.log | awk '{print $10,$7}' | sort -nr | head -20
# 统计不同响应时间的请求分布
cat /var/log/nginx/access.log | awk '{if($10<0.1) a++; else if($10<0.5) b++; else if($10<1) c++; else d++} END {print "0-0.1s:",a,"\n0.1-0.5s:",b,"\n0.5-1s:",c,"\n>1s:",d}'
# 计算95分位响应时间
cat /var/log/nginx/access.log | awk '{print $10}' | sort -n | awk '{all[NR] = $0} END{print all[int(NR*0.95)]}'

四、组合命令实战

(1) 查找高频率访问的恶意IP

cat /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -20 | awk '{if($1>100) print $2}'

(2) 分析HTTP 500错误的请求

grep " 500 " /var/log/nginx/access.log | awk '{print $1,$7,$9}' | sort | uniq -c | sort -nr

(3) 实时监控错误日志并报警

tail -f /var/log/application.log | grep --line-buffered -E "ERROR|CRITICAL" | while read line; do echo "$line" | mail -s "Application Error Alert" admin@example.com; done

(4) 分析SSH暴力破解尝试

cat /var/log/auth.log | grep "Failed password" | awk '{print $11}' | sort | uniq -c | sort -nr | head -20

cess.log.2023-$month-*.gz | wc -l; done

结语

掌握这些日志分析命令,您将能够快速定位系统问题、分析性能瓶颈和识别安全威胁。建议将本文收藏作为参考手册,在实际工作中灵活组合这些命令,逐步构建自己的日志分析手段。

THE END

Leave a Reply

下一篇

已是最新文章