在 Linux 系统中,last
和 lastb
命令是两个非常有用的工具,用于追踪用户登录和登出的历史记录。这两个命令可以帮助系统管理员了解用户的活动情况,以及系统的重启和关机事件。本文将详细介绍这两个命令的使用方法和选项。
last 命令
用法:
last [选项] [<用户名>...] [<tty>...]显示上次登录用户的列表。
选项:
-<数字> 显示行数
-a, --hostlast 最后一列显示主机名
-d, --dns 将 IP 号转换回主机名
-F, --file <文件> 用指定文件代替 /var/log/wtmp
-F, --fulltimes 打印完整的登录和注销时间和日期
-i, --ip 以数字和点的形式显示 IP 号
-n, --limit <数字> 要显示的行数
-R, --nohostname 不显示主机名字段
-s, --since <时间> 显示从指定时间起的行
-t, --until <时间> 显示到指定时间为止的行
-p, --present <时间> 显示在指定时间谁在场(present)
-w, --fullnames 显示完整的用户名和域名
-x, --system 显示系统关机项和运行级别更改
--time-format <格式> 以指定<格式>显示时间戳:
notime|short|full|iso-h, --help display this help
-V, --version display version
last
命令通过搜索 /var/log/wtmp
文件(或由 -f
标志指定的文件)来显示自文件创建以来所有用户的登录和登出记录。可以给出一个或多个用户名、/、tty,在这种情况下,last将只显示与这些参数匹配的条目。tty的名称可以缩写,“last 0”与“last tty0”相同。
当 last
命令捕获到 SIGINT(通常由 Ctrl+C 生成)或 SIGQUIT(通常由 Ctrl+\ 生成)信号时,它会显示已经搜索到的位置;对于 SIGINT 信号,last
然后终止。
伪用户 "reboot" 每次系统重启时都会登录。因此,last reboot
显示了自日志文件创建以来的所有重启日志。
lastb 命令
用法:
lastb [选项] [<用户名>...] [<tty>...]显示上次登录用户的列表。
选项:
-<数字> 显示行数
-a, --hostlast 最后一列显示主机名
-d, --dns 将 IP 号转换回主机名
-F, --file <文件> 用指定文件代替 /var/log/btmp
-F, --fulltimes 打印完整的登录和注销时间和日期
-i, --ip 以数字和点的形式显示 IP 号
-n, --limit <数字> 要显示的行数
-R, --nohostname 不显示主机名字段
-s, --since <时间> 显示从指定时间起的行
-t, --until <时间> 显示到指定时间为止的行
-p, --present <时间> 显示在指定时间谁在场(present)
-w, --fullnames 显示完整的用户名和域名
-x, --system 显示系统关机项和运行级别更改
--time-format <格式> 以指定<格式>显示时间戳:
notime|short|full|iso-h, --help display this help
-V, --version display version
lastb
命令的功能与 last
类似,但默认情况下,lastb
列出 /var/log/btmp
文件的内容,该文件包含系统上所有失败的登录尝试。
last lastb 命令选项解释
选项 | 描述 | 示例 |
---|---|---|
-n num 或 -n num | 显示最近的 num 行登录记录。 | last -n 1 或 last -1 |
-f, --file file | 使用指定的文件代替默认的 /var/log/wtmp 文件。 | last -f /path/to/file |
-F, --fulltimes | 打印完整的登录和登出时间及日期。 | last -F |
-p, --present <time> | 显示在指定时间点登录的用户,等同于同时使用 --since 和 --until 。 | last -p now |
-s, --since <time> | 显示自指定时间以来的登录记录。 | last -s YYYY-MM-DD |
-t, --until <time> | 显示直到指定时间的登录记录。 | last -t YYYY-MM-DD |
--time-format format | 定义输出时间戳的格式(notime 、short 、full 或 iso )。 | last --time-format full |
<format
>时间格式说明:
时间格式 | 描述 | 示例 |
---|---|---|
notime | 不打印任何时间戳。 | - |
short | 默认格式,简短的时间戳。 | Wed Jan 16 12:34 |
full | 完整的时间戳,与 --fulltimes 选项相同。 | Wed Jan 16 12:34:56 +0000 |
iso | ISO-8601 格式的时间戳,包含时区信息。 | 2024-01-16T12:34:56+00:00 |
<time>
时间参数格式:
时间参数格式 | 描述 | 示例 |
---|---|---|
YYYYMMDDhhmmss | 完整的日期和时间,精确到秒。 | 20240116123456 |
YYYY-MM-DD hh:mm:ss | 完整的日期和时间,使用破折号分隔,精确到秒。 | 2024-01-16 12:34:56 |
YYYY-MM-DD hh:mm | 完整的日期和时间,精确到分钟,秒默认为 00 。 | 2024-01-16 12:34 |
YYYY-MM-DD | 完整的日期,时间默认为 00:00:00 。 | 2024-01-16 |
hh:mm:ss | 时间,日期默认为当天。 | 12:34:56 |
hh:mm | 时间,日期默认为当天,秒默认为 00 。 | 12:34 |
now | 当前时间。 | - |
yesterday | 昨天的日期,时间默认为 00:00:00 。 | - |
today | 今天的日期,时间默认为 00:00:00 。 | - |
tomorrow | 明天的日期,时间默认为 00:00:00 。 | - |
+5min | 从当前时间起的5分钟后。 | - |
-5days | 从当前时间起的5天前。 | - |
这些选项和参数使得 last
命令非常灵活,可以根据需要显示不同时间段内的登录记录,以及以不同的格式显示时间戳。
使用举例
# 从两天前到一天前的记录
last -R -s -2days -t -1days
# 查看机器启动时间
last --time-format iso reboot|head -n 1
reboot system boot 4.19.91-26.an8.x 2025-02-05T10:00:07+08:00 still runningtop -n 1|head -n 1
top - 10:09:27 up 21 days, 9 min, 1 user, load average: 0.01, 0.00, 0.00