0%

系统日志

Linux 系统日志全解析:从故障排查到安全审计

系统日志是 Linux 系统的 “黑匣子”,记录了从启动到运行的各类事件,是排查故障、追踪操作、审计安全的核心依据。本文将详细介绍 Linux 中最关键的日志文件,包括其功能、内容及实用查看技巧。

核心系统日志:/var/log/messages

/var/log/messages 是 Linux 系统的通用日志中心,几乎所有非特定服务的系统级事件都会在此记录,地位相当于系统的 “主日记”。

记录内容

  • 系统启动过程中的引导信息(如内核初始化、服务启动状态);
  • 运行时的错误事件(IO 失败、网络连接中断、硬件驱动异常);
  • 进程状态变化(如服务启动 / 停止、进程被强制终止);
  • 内核消息(如内存不足、文件系统错误)。

实用场景:排查进程异常终止

当应用程序突然崩溃时,可通过该日志确认是否被内核的 OOM Killer(内存不足杀手)终止:

1
2
# 查找被 OOM Killer 杀死的 Java 进程
grep "Kill process" /var/log/messages | grep java

输出示例:

1
Out of memory: Kill process 31201 (java) score 783 or sacrifice child
  • 保护关键进程:若需避免进程被 OOM Killer 终止,可调整其优先级:

    1
    echo -17 > /proc/$PID/oom_adj  # $PID 为进程 ID,-17 表示最高保护级别

启动日志:/var/log/dmesgdmesg 命令

该日志记录系统启动阶段的内核消息,聚焦硬件初始化和驱动加载,是排查硬件问题的首选。

记录内容

  • CPU、内存、磁盘、网卡等硬件的检测信息;
  • 内核模块(驱动)的加载状态;
  • 启动时的资源分配(如内存大小、磁盘分区识别)。

查看方式

1
2
3
4
5
6
7
8
# 直接查看日志文件
cat /var/log/dmesg

# 实时查看内核消息(包含本次启动后新增内容)
dmesg

# 过滤错误信息(-i 忽略大小写)
dmesg | grep -i error

实用案例

  • 网卡无法识别:dmesg | grep -i eth0 查看网卡初始化日志;
  • 内存故障:dmesg | grep -i memory 检查内存检测错误。

安全审计日志:/var/log/secure

/var/log/secure安全事件的专用日志,所有与用户认证、权限变更相关的事件都会记录,是防范入侵的关键依据。

记录内容

  • 远程登录事件(SSH、Telnet、FTP):包含登录用户、IP 地址、成功 / 失败状态;
  • sudo 命令使用记录:谁执行了什么特权操作;
  • 账户变更:密码修改、用户创建 / 删除、账户锁定。

实用场景

  • 检测暴力破解:

    1
    2
    # 统计失败登录的 IP 及次数
    grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
  • 追踪特权操作:

    1
    2
    # 查看 root 用户通过 sudo 执行的命令
    grep "sudo" /var/log/secure | grep "root"

登录历史日志:wtmplastlog

这两个日志均为二进制文件,需通过专用命令解析,用于追踪用户登录行为。

/var/log/wtmplast 命令

  • 功能:记录所有用户的完整登录 / 注销历史(含时间、终端、IP)。

  • 查看命令:

    1
    2
    3
    4
    last  # 显示所有登录记录(按时间倒序)
    last root # 仅查看 root 用户的登录记录
    last -i # 显示 IP 地址(而非主机名)
    last -n 10 # 仅显示最近 10 条记录

/var/log/lastloglastlog 命令

  • 功能:记录每个用户最后一次登录的信息(含时间、终端、IP)。

  • 查看命令:

    1
    2
    3
    lastlog  # 显示所有用户的最后登录时间
    lastlog -u username # 查看指定用户的最后登录记录
    lastlog | grep -v "Never logged in" # 筛选有过登录记录的用户

定时任务日志:/var/log/cron

/var/log/cron 专门记录定时任务(crontab)的执行情况,是排查定时任务故障的核心依据。

记录内容

  • 定时任务的启动时间、执行用户;
  • 任务执行结果(成功 / 失败);
  • 任务输出的错误信息(若有)。

实用场景

1
2
# 查看指定定时任务的执行记录(假设任务脚本名为 backup.sh)
grep "backup.sh" /var/log/cron

日志管理补充技巧

日志轮转(避免磁盘占满)

系统通过 logrotate 工具自动管理日志生命周期(压缩、删除旧日志),配置文件位于 /etc/logrotate.d/。例如,/etc/logrotate.d/syslog 控制 messages 等日志的轮转策略。

实时监控日志

使用 tail -f 实时查看日志新增内容,适合调试场景:

1
2
tail -f /var/log/messages  # 实时监控系统消息
tail -f /var/log/secure # 实时监控登录行为

日志权限

部分敏感日志(如 securewtmp)仅 root 可访问,普通用户需通过 sudo 查看:

1
sudo cat /var/log/secure

系统日志

messages日志

linux有一个很重要的日志文件/var/log/messages,是核心系统文件,包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO错误、网络错误和其他系统错误都会记录到这个文件中

可以用该日志判断进程是否被Killer杀死掉。

在文件里查找下,是否有之前pid对应的进程Kill信息,或者进程名,比如我们这里说的是Java应用,就直接查Java的就可以,像这样的内容,

“Out of memory: Kill process 31201 (java) score 783 or sacrifice child

Linux Kernel的这个Killer,会在内存不足的时候kill掉任何不受保护的进程,从而释放内存,保证Kernel的运行

echo -17 > /proc/$PID/oom_adj 使得自己的进程受保护

dmesg日志

/var/log/dmesg日志中记录了系统的启动信息,可以使用dmesg命令来查看,如果某个硬件有问题,使用这个命令是可以看到的

1
dmesg | grep error

secure日志

/var/log/secure日志时记录登入系统存取数据的文件,如POP3、SSH、Telnet、FTP等都会被记录,可以利用该文件找出不安全的登录IP

wtmp日志

/var/log/wtmp日志记录的是登入者的信息数据,但是由于该文件已经被编码过了,使用正常的文件查看命令肯定是不行的。可以使用last命令来进行读取

1
last

lastlog日志

/var/log/lastlog日志记录每个使用者最近登入系统的时间,可以使用lastlog命令来查看每个用户最后登录的时间

1
lastlog

cron日志

crontab定时任务中的执行日志是写在/var/log/cron中的

欢迎关注我的其它发布渠道