追加写入的二进制记录
/var/log/wtmp 保存登录、注销、关机与重启等记录,是固定长度的二进制结构,只能用工具体读取。关键在于它的写入方式是追加:新记录永远写在文件末尾,所以文件内部的记录顺序就等于事件发生的顺序。这个性质在处理同一秒内的多条记录时特别有用——时间字段只精确到秒,但顺序仍然可辨。
记录类型不止登录
wtmp 里除了用户登录与注销,还包含系统启动、关机、运行级别切换等记录。用 last -x 可以把这些非用户记录一并显示出来,与用户会话记录区分开。分析时要先按记录类型分组,再把用户会话归到对应的运行阶段里,否则会把重启记录误读成一次异常的登录。
基本信息
| 适用平台 | Linux/Unix(utmp/wtmp 体系) |
|---|---|
| 读取命令 | last -f /var/log/wtmp;utmpdump /var/log/wtmp |
| 记录类型 | 用户登录注销、启动关机、运行级别切换 |
| 精度 | 时间字段精确到秒,同秒事件靠文件顺序区分 |
| 历史文件 | 轮转后的记录保存在 wtmp.1 等文件中 |
典型使用场景
- 还原登录顺序:同一秒内多条记录靠文件顺序判断先后
- 区分重启与登录:先按记录类型分组再解读
- 核对会话归属:把用户会话归入对应的运行阶段
- 确认关机方式:结合关机记录判断是正常还是异常下线
- 补充认证日志:日志被清理时,wtmp 可能仍保留记录
查看记录顺序
查看记录顺序
# 按时间倒序列出登录记录
last -f /var/log/wtmp | head -20
# 包含重启与关机记录
last -x -f /var/log/wtmp | head -20
# 原始结构视图:文件顺序即事件顺序
utmpdump /var/log/wtmp | tail -10
# 轮转后的历史记录
last -f /var/log/wtmp.1 | head -20
# 文件本身的属性与时间
stat -c '%n | size=%s | mtime=%y' /var/log/wtmp记录字段读法
| 字段 | 含义 | 分析用法 |
|---|---|---|
| 用户字段 | 登录用户名 | 空值多为系统记录 |
| 终端字段 | tty 或 pts 设备名 | pts 说明来自远程会话 |
| 来源主机 | 远程登录的地址 | 本地登录通常为空 |
| 记录类型 | 登录、注销、启动、关机 | 先分组再解读 |
| 时间 | 精确到秒 | 同秒事件靠文件顺序区分 |
last 输出的顺序是倒序(最新的在前),而 utmpdump 展示的是文件实际顺序(最早的在前),对比时间线时注意方向,避免把顺序读反。
把不同主机上的 last 输出混在一张表里比较会出错:每台主机的记录顺序只在本机内部有意义,跨主机必须依赖统一的时间字段。