插件窝 干货文章 如何通过Linux命令行工具进行日志解析和筛选?

如何通过Linux命令行工具进行日志解析和筛选?

log bash var syslog 426    来源:    2025-04-14

Linux命令行日志解析与筛选指南

常用日志文件位置

  • /var/log/syslog - 系统常规日志
  • /var/log/auth.log - 认证相关日志
  • /var/log/kern.log - 内核日志
  • /var/log/dmesg - 启动信息
  • /var/log/nginx/ - Nginx日志
  • /var/log/apache2/ - Apache日志

基础查看命令

  1. 查看完整日志

    cat /var/log/syslog
    
  2. 实时查看日志更新

    tail -f /var/log/syslog
    
  3. 查看最后N行

    tail -n 50 /var/log/syslog
    

高级筛选工具

grep - 文本搜索

  1. 基本搜索

    grep "error" /var/log/syslog
    
  2. 忽略大小写

    grep -i "error" /var/log/syslog
    
  3. 显示匹配行前后内容

    grep -A 3 -B 2 "error" /var/log/syslog  # 显示匹配行前后各3行和2行
    

awk - 字段处理

  1. 提取特定列

    awk '{print $1, $5}' /var/log/syslog
    
  2. 基于条件筛选

    awk '$6 == "[error]" {print $0}' /var/log/nginx/error.log
    
  3. 统计出现次数

    awk '{count[$6]++} END {for (word in count) print word, count[word]}' /var/log/nginx/access.log
    

sed - 流编辑器

  1. 替换文本

    sed 's/error/ERROR/g' /var/log/syslog
    
  2. 删除特定行

    sed '/debug/d' /var/log/syslog
    

组合使用示例

  1. 查找特定时间段的错误

    grep "error" /var/log/syslog | grep "Jun 15"
    
  2. 统计HTTP状态码

    awk '{print $9}' access.log | sort | uniq -c | sort -rn
    
  3. 提取特定IP的活动

    grep "192.168.1.100" /var/log/nginx/access.log | awk '{print $1, $4, $7}'
    

日志轮转工具

  1. 使用logrotate

    logrotate -f /etc/logrotate.conf
    
  2. 查看压缩日志

    zcat /var/log/syslog.1.gz | grep "error"
    

时间范围筛选

  1. 使用sed筛选时间范围

    sed -n '/Jun 15 10:00/,/Jun 15 11:00/p' /var/log/syslog
    
  2. 使用awk筛选时间戳

    awk -F'[][]' '$2 >= "15/Jun/2023:10:00:00" && $2 <= "15/Jun/2023:11:00:00"' /var/log/nginx/access.log
    

这些命令组合可以满足大多数日志分析需求,根据具体情况调整参数即可。