作为IT工程师,掌握高效的日志处理技能至关重要。以下是一些强大的Linux命令行工具和技术,可用于日志过滤和分类:
# 搜索包含"error"的行
grep "error" /var/log/syslog
# 不区分大小写搜索
grep -i "warning" /var/log/messages
# 显示匹配行及其后5行
grep -A 5 "critical" application.log
# 反向匹配(不包含指定内容)
grep -v "DEBUG" app.log
# 实时查看最新日志(常用于监控)
tail -f /var/log/nginx/access.log
# 查看最后100行
tail -n 100 app.log
# 查看前50行
head -n 50 system.log
# 提取日志的特定列(如第5列)
awk '{print $5}' access.log
# 按条件过滤(如状态码为500的请求)
awk '$9 == 500 {print $0}' access.log
# 统计不同状态码出现次数
awk '{print $9}' access.log | sort | uniq -c | sort -nr
# 替换文本(如将error替换为ERROR)
sed 's/error/ERROR/g' app.log
# 删除包含特定字符串的行
sed '/DEBUG/d' app.log
# 提取特定行范围(如10-20行)
sed -n '10,20p' system.log
# 统计IP访问频率
awk '{print $1}' access.log | sort | uniq -c | sort -nr
# 统计错误类型分布
grep "ERROR" app.log | awk '{print $4}' | sort | uniq -c
# 提取第1列(IP地址)和第7列(请求URL)
cut -d' ' -f1,7 access.log
# 使用冒号分隔符提取用户名
cut -d':' -f1 /etc/passwd
# 查找过去1小时内包含"error"的日志,按来源统计
grep "$(date -d '1 hour ago' '+%b %_d %H')" syslog | grep "error" | awk '{print $5}' | sort | uniq -c
# 分析Nginx访问日志中最频繁的URL
awk '{print $7}' access.log | sort | uniq -c | sort -nr | head -20
# 匹配IP地址
grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' logfile
# 匹配时间戳格式
grep -E '\[[0-9]{2}/[A-Za-z]{3}/[0-9]{4}:[0-9]{2}:[0-9]{2}:[0-9]{2}' access.log
# 提取JSON日志中的特定字段
cat app.json.log | jq '.timestamp, .level, .message'
# 过滤特定级别的日志
jq 'select(.level == "ERROR")' app.json.log
虽然不是过滤工具,但对于日志管理很重要:
# 手动执行日志轮转
logrotate -f /etc/logrotate.conf
alias errgrep='grep -i --color=auto "error\|fail\|critical"'
grep "ERROR" app.log > errors.txt
grep "timeout" /var/log/*.log
zgrep "404" /var/log/nginx/access.log.*.gz
通过熟练使用这些工具和技巧,您可以高效地过滤、分类和分析Linux系统中的日志数据,快速定位问题并获取有价值的系统信息。