linux系统日志是结构化、分类明确、可追溯筛选的数据源,关键在于掌握日志路径(如/var/log/messages、auth.log)、实用命令(tail、grep、less、awk)及异常信号(error/fail/重复登录等),并配合logrotate、journalctl和auditd实现自动化管理。

Linux系统日志不是一堆杂乱文本,而是有明确结构、分门别类、可追溯可筛选的数据源。关键不在“能不能打开”,而在于“知道看哪个文件、用什么命令、关注什么线索”。
常见日志文件位置与用途
/var/log 是默认根目录,不同文件承担不同职责:
- /var/log/messages(RHEL/CentOS系)或 /var/log/syslog(Debian/Ubuntu系):系统级通用日志,含内核消息、服务启停、硬件事件等
- /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(RHEL/CentOS):所有认证行为记录,包括SSH登录、su/sudo操作、用户增删、密码修改
- /var/log/kern.log:纯内核日志,适合排查驱动异常、内存错误、硬件兼容问题
- /var/log/boot.log:系统启动阶段的初始化输出,常用于诊断开机卡顿或服务未加载
- /var/log/cron:定时任务执行记录,确认crontab是否按时触发、命令是否报错
- /var/log/btmp:失败登录尝试(需用 lastb 命令读取),是安全审计重点
高效查看日志的实用命令组合
不用硬翻几万行,按需选择工具:
- 查最新动态:tail -n 50 /var/log/syslog 看末尾50行;加 -f 实时追踪:tail -f /var/log/auth.log
- 查某关键字上下文:grep -A 3 -B 2 "Failed password" /var/log/auth.log(匹配行+后3行+前2行)
- 按时间范围筛选(如查今天14点的记录):grep "Mar 2.*14:" /var/log/messages(注意日期格式随系统locale变化)
- 分页精读大文件:less +G /var/log/syslog(自动定位到末尾,支持 / 搜索、g 跳首、G 跳尾)
- 快速统计高频事件:awk '{print $9}' /var/log/auth.log | sort | uniq -c | sort -nr | head -10(提取第9字段,通常是IP,统计出现次数)
识别异常日志的关键信号
日志本身不直接说“出错了”,但会暴露线索:
- 级别关键词:优先关注包含 error、fail、warning、denied、timeout 的行
- 重复模式:同一IP在auth.log中高频出现 Failed password,可能正在暴力破解
- 时间断层:/var/log/messages 中连续几小时无任何记录,可能是rsyslogd进程崩溃或磁盘满
- 服务状态突变:某服务日志突然中断,紧接着出现 systemd[1]: xxx.service: main process exited,说明进程非正常退出
- 权限拒绝提示:Permission denied 或 Operation not permitted 往往指向SELinux限制或文件权限误配
日志管理不能只靠手动查
生产环境必须配合自动化机制:
- logrotate 配置轮转策略,避免单个日志无限增长占满磁盘
- 用 journalctl(systemd系统)替代传统日志文件,支持按服务、时间、优先级过滤,例如:journalctl -u nginx.service --since "2 hours ago"
- 对关键事件设置简单告警,比如用 grep -q "Out of memory" /var/log/messages && echo "OOM detected" | mail -s "ALERT" admin@example.com
- 敏感操作(如sudo命令执行)建议启用 auditd,比auth.log记录更细粒度、更难绕过










