在 CentOS 上“用脚本处理日志”通常分为几类场景:日志收集/过滤、统计分析、自动清理、异常报警。下面我用 Shell / Bash 脚本 为主,结合 CentOS 常见日志位置,给你一套实用思路和示例。
/var/log/messages:系统常规日志/var/log/secure:登录、SSH、认证/var/log/cron:定时任务/var/log/httpd/:Apache/var/log/nginx/:Nginxjournalctl:systemd 日志(CentOS 7+)#!/bin/bash
LOG=/var/log/messages
KEYWORD="error"
grep -i "$KEYWORD" "$LOG" >> /tmp/error_log.txt
#!/bin/bash
LOG=/var/log/secure
echo "SSH 登录失败次数:"
grep "Failed password" "$LOG" | wc -l
#!/bin/bash
journalctl -u nginx \
--since "2026-01-21 00:00:00" \
--until "2026-01-21 23:59:59" \
> /tmp/nginx.log
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head
awk '{print $4}' /var/log/nginx/access.log | cut -d: -f2 | sort | uniq -c
#!/bin/bash
find /var/log -name "*.log" -mtime +30 -exec rm -f {} \;
或只清特定服务:
find /var/log/nginx -name "*.log" -mtime +7 -delete
⚠️ 建议配合 logrotate 使用(CentOS 自带)
#!/bin/bash
COUNT=$(grep "Failed password" /var/log/secure | wc -l)
if [ "$COUNT" -gt 20 ]; then
echo "SSH 暴力破解警告!失败次数:$COUNT" | mail -s "安全警告" admin@xxx.com
fi
crontab -e
示例(每天 3 点执行):
0 3 * * * /root/scripts/log_check.sh
你可以告诉我:
我可以给你可直接用的完整脚本。