last [选项] [用户名] [终端设备]
| 选项 | 说明 |
|---|---|
-n 数字 或 --limit 数字 |
限制显示的行数 |
-R |
不显示主机名字段 |
-a |
在最后一列显示主机名 |
-d |
显示登录IP对应的主机名 |
-i 或 --ip |
以数字形式显示IP地址 |
-x |
显示系统关机、重启和运行等级变更记录 |
-f 文件 |
指定替代的日志文件 |
-t YYYYMMDDHHMMSS |
显示指定时间之前的记录 |
--since 时间 |
显示指定时间之后的记录 |
--until 时间 |
显示指定时间之前的记录 |
-w |
显示完整的用户名和主机名 |
-F |
显示完整的登录和登出时间 |
last 命令读取以下文件:
/var/log/wtmp - 主要数据源,记录所有登录/登出信息/var/log/btmp - 失败的登录尝试记录/var/run/utmp - 当前登录用户信息注意:这些文件是二进制格式,不能直接使用文本编辑器查看
显示最近的登录记录(默认显示所有记录):
last
输出格式:
用户名 终端设备 登录IP/主机名 登录时间 登出时间
root pts/0 192.168.1.100 Mon Mar 11 09:30:01 2024 still logged in
john tty1 Tue Mar 10 14:22:15 2024 Tue Mar 10 18:45:22 2024
只显示最近10条登录记录:
last -n 10
或者使用简写:
last -10
查看用户"john"的登录记录:
last john
查看多个用户的登录记录:
last john root admin
使用 -x 选项查看系统事件:
last -x
只查看重启记录:
last -x reboot
只查看关机记录:
last -x shutdown
使用 -F 选项显示完整的登录/登出时间:
last -F
输出示例:
root pts/0 192.168.1.100 Mon Mar 11 09:30:01 2024 still logged in
(00:15:22)
使用 lastb 命令查看失败的登录尝试:
lastb
限制显示行数:
lastb -n 20
lastb 通常需要root权限才能执行
查看今天以来的登录记录:
last --since today
查看过去24小时内的记录:
last --since yesterday
查看指定日期之后的记录:
last --since "2024-03-01"
查看指定日期范围内的记录:
last --since "2024-03-01" --until "2024-03-10"
监控可疑登录活动:
# 查看最近的非工作时间登录
last -a | grep -E "(22:|23:|00:|01:|02:|03:|04:|05:|06:)" | head -20
# 查看来自特定IP的登录
last -i | grep "192.168.1.100"
# 检查root用户的远程登录
last root | grep -E "pts/|tty" | head -10
统计用户登录次数和时长:
# 统计每个用户的登录次数
last | grep -v "reboot\|shutdown\|wtmp" | awk '{print $1}' | sort | uniq -c | sort -nr
# 计算用户总登录时长
last -F | grep -v "reboot\|shutdown\|wtmp" | awk '{if($7!="still") print $1,$5,$6,$7,$8,$9}' | head -20
查看服务器重启和关机历史:
# 查看最近10次重启记录
last -x reboot -n 10
# 查看最近5次关机记录
last -x shutdown -n 5
# 查看系统运行时间(结合uptime)
uptime
echo "最近重启记录:"
last reboot -n 3
| 命令 | 功能 | 数据源 |
|---|---|---|
last |
显示成功登录记录 | /var/log/wtmp |
lastb |
显示失败登录尝试 | /var/log/btmp |
lastlog |
显示每个用户最近一次登录 | /var/log/lastlog |
who |
显示当前登录用户 | /var/run/utmp |
w |
显示当前登录用户及活动 | /var/run/utmp |
users |
显示当前登录用户名 | /var/run/utmp |
当显示"wtmp begins [日期]"时,表示这是日志文件中最早可用的记录。这通常是因为:
要查看更多历史记录,可以查看归档的日志:
# 查看压缩的日志文件
sudo last -f /var/log/wtmp.1
# 查看系统日志轮转配置
cat /etc/logrotate.conf
注意:清除登录记录可能违反安全策略,仅在必要时操作。
清除wtmp文件:
# 清空wtmp文件(需要root权限)
sudo truncate -s 0 /var/log/wtmp
# 或使用特定工具
sudo lastlog -b
清除btmp文件(失败登录记录):
sudo truncate -s 0 /var/log/btmp
清除后,系统会重新开始记录。
last:显示所有用户的登录记录(按时间倒序),包括登录时间、登出时间、终端、IP地址等信息。
lastlog:显示每个用户最近一次的登录时间,无论这个登录发生在什么时候。
示例对比:
# last - 显示所有登录记录
last -n 5
# lastlog - 显示每个用户的最近登录
lastlog | head -10
SSH登录通常通过pts终端,可以筛选这些记录:
# 查看所有pts终端登录(通常是SSH)
last | grep "pts/"
# 查看特定时间段内的SSH登录
last --since "2024-03-10" | grep "pts/"
# 查看SSH登录的IP地址统计
last -i | grep "pts/" | awk '{print $3}' | sort | uniq -c | sort -nr
也可以查看SSH服务的专门日志:
# 查看SSH登录日志
sudo tail -f /var/log/auth.log | grep sshd
# 或对于RHEL/CentOS
sudo tail -f /var/log/secure | grep sshd
了解系统的日志轮转机制有助于管理登录记录:
# 查看wtmp的日志轮转配置
cat /etc/logrotate.d/wtmp
# 手动执行日志轮转
sudo logrotate -f /etc/logrotate.conf
# 查看归档的日志文件
ls -lh /var/log/wtmp*
ls -lh /var/log/btmp*
通常,wtmp和btmp文件会定期轮转(如每月),旧的日志会被压缩保存。