Linux 日志分析全套教程(基础分类→常用工具→实战命令→排查思路→生产案例)
一、Linux 日志基础认知日志核心存放目录绝大多数系统日志默认路径/var/log/日志文件作用说明/var/log/messagesCentOS 系统通用日志系统运行、服务报错、内核常规日志/var/log/secure安全日志ssh登录、su切换、sudo操作、密码认证、暴力破解记录/var/log/cron定时任务crontab执行日志/var/log/dmesg系统开机内核日志硬件故障、驱动异常排查/var/log/btmp登录失败日志二进制文件需lastb查看/var/log/wtmp登录成功日志last查看/var/log/nginx/Nginx 访问日志access.log、错误日志error.log/var/log/httpd/Apache 网页服务日志/var/log/yum.logyum软件安装卸载日志/var/log/boot.log开机启动日志日志分类系统日志内核、开机、系统服务、定时任务安全日志远程登录、权限变更、暴力破解应用日志Nginx、MySQL、Tomcat、业务程序日志审计日志audit审计、操作行为记录日志查看工具分类实时查看tail、tailf、less、watch检索过滤grep、egrep文本整理sed、awk、cut统计排序sort、uniq、wc高级分析journalctl、logwatch二、基础查看命令入门必用tail 实时跟踪日志排查故障最常用# 实时刷新日志持续输出新增内容 tail -f /var/log/nginx/access.log # 只跟踪最后20行实时刷新 tail -n 20 -f /var/log/messages # 常用简写 tailf /var/log/securehead 查看日志开头head -n 100 /var/log/messages # 前100行cat、more、less 翻阅整份日志less /var/log/messages # 推荐空格翻页、q退出、/关键词向下搜索、?向上搜索 more /var/log/messages cat /var/log/secure | more查看历史登录记录last # 成功登录记录 lastb # 登录失败、爆破记录 who # 当前在线用户 w # 在线用户负载、进程详情三、日志检索过滤grep 核心用法基础过滤grep error /var/log/messages # 匹配包含error的行 grep -i warn log # -i 忽略大小写 grep -n fail /var/log/secure # -n 显示行号 grep -v info log # -v 反向过滤排除info行 grep -c error log # -c 统计匹配行数报错次数高级正则、前后上下文查看# 匹配error前后各5行定位报错上下文 grep -A5 -B5 Exception app.log # 同时匹配error、warn grep -E error|warn log # 匹配空行、注释行 grep ^$ log # 空行 grep ^# nginx.conf四、日志字段截取cut、awk 提取关键信息日志分析核心提取IP、端口、时间、状态码、接口cut 简单截取# 以空格分割取第1列IP cut -d -f1 access.log # 截取2-5列 cut -d -f2-5 access.logawk 专业分列日志分析首选# 提取Nginx所有访问IP第一列 awk {print $1} access.log # 提取最后一列响应状态码 awk {print $9} access.log # 筛选500报错的IP awk $9500 {print $1} access.log # 按冒号分割取账号 awk -F: {print $1} /etc/passwd五、日志统计分析sort、uniq、wc高频场景IP访问排行、接口调用次数、爆破次数统计wc 统计行数wc -l access.log # 日志总行数 grep 500 access.log | wc -l # 500错误总数sort 排序、uniq 去重计数# 统计IP访问量并降序排列最经典日志统计命令 awk {print $1} access.log | sort | uniq -c | sort -nr # 统计ssh暴力破解IPsecure日志频繁登录失败 grep Failed password /var/log/secure | awk {print $11} | sort | uniq -c | sort -nr参数说明uniq -c统计重复次数sort -nr数字降序访问量高的放前面六、日志清洗与修改sed多用于清理无用日志、替换敏感内容、删除垃圾行# 删除空行 sed /^$/d log # 删除注释行 sed /^#/d nginx.conf # 替换日志中敏感手机号 sed s/138[0-9]\{8\}/****/g log # 截取指定行区间100~200行 sed -n 100,200p log七、systemd 服务日志journalctlCentOS7/Ubuntu16 系统服务日志统一由journal管理无需翻文件journalctl # 查看全部系统日志 journalctl -u nginx # 单独查看nginx服务日志 journalctl -u mysqld journalctl -f # 实时跟踪日志类似tail -f journalctl --since 2026-08-04 08:00:00 --until 2026-08-04 12:00:00 # 查看本次开机日志 journalctl -b # 查看内核日志 journalctl -k # 只看错误级别日志 journalctl -p err八、日志分析标准排查思路故障排查流程场景1系统卡顿、死机、宕机查看内核硬件日志dmesg查看硬件崩溃、OOM内存溢出系统负载uptime、top系统报错/var/log/messages检索error、kill、oom磁盘满df -h检索日志超大文件场景2服务器被暴力破解、入侵排查登录失败lastb、grep Failed password /var/log/secure异常登录last查看陌生IP登录统计高频爆破IP拉黑封禁查看异常定时任务crontab -l、/etc/cron*场景3网站5xx、4xx接口报错Nginx错误日志tail -f /var/log/nginx/error.log访问日志筛选500、502、404awk $9~/(404|500|502)/ {print $0} access.log统计异常接口调用频次定位代码问题场景4定时任务不执行查看cron日志tail -f /var/log/cron检查路径、权限、环境变量报错九、高频实战命令合集生产直接复制SSH暴力破解IP排行grep Failed password /var/log/secure |awk {print $11}|sort|uniq -c|sort -nr|head -10Nginx 访问TOP10 IPawk {print $1} /var/log/nginx/access.log |sort|uniq -c|sort -nr|head -10统计各类状态码数量awk {code[$9]} END{for(i in code) print i,code[i]} access.log筛选今日09:00~11:00的报错日志sed -n /2026-08-04 09:00:00/,/2026-08-04 11:00:00/p app.log | grep error查找大日志文件清理find /var/log -size 1G查看OOM内存杀死进程dmesg | grep -i oom十、日志运维规范日志切割日志持续写入会膨胀占满磁盘使用logrotate自动轮转切割定期压缩、删除过期日志日志规范业务日志固定格式时间、级别、IP、接口、错误堆栈方便awk快速解析长期分析集群环境搭建ELKElasticsearchLogstashKibana集中收集、可视化检索海量日志日志留存敏感日志至少留存90天便于溯源排查入侵、故障复盘。十一、工具组合万能模板日常排查通用管道结构实时跟踪/读取日志 → grep过滤关键词 → awk提取字段 → sortuniq统计排序示例tail -f access.log | grep POST | awk {print $1,$7} | sort | uniq -c