我使用以下 3 个命令来检查计算机重新启动的最新时间点:
last reboot
who -b
uptime
上次重启的结果是:
wtmp begins Sat Oct 9 04:49:27 2021
who -b 的结果是:
system boot 2018-01-11 20:52
正常运行时间的结果是:
22:49:01 up 1372 days, ...
看起来uptime和who -b的结果是一致的,但是和上次重启的结果不一致。
我找到这个帖子Uptime 和 who -b 显示系统上次在 Linux 上启动的不同时间,但是却说他的 uptime 和 who -b 不一致,和我的情况不同。
答案1
在 Linux 上,默认情况下所有三个命令都使用不同的信息源。
uptime
使用内核给出的信息/proc/uptime
。后者包含两条信息:系统的正常运行时间,包括挂起的时间和空闲进程的时间。这些值是准确的。
who -b
使用存储在中的信息/var/run/utmp
。在当前系统上,这实际上是/run/utmp
,并且仅包含当前启动的信息(/run
是tmpfs
在系统重新启动时丢失其内容的信息);但对于当前的启动来说,也是准确的。
last reboot
使用存储在 中的信息/var/log/wtmp
。那里存储的信息通常也是准确的,但是您的信息需要可能不再存储在那里:wtmp
在许多设置中轮换,通常每月一次。这意味着如果系统的当前启动时间早于wtmp
上次轮换时间,则显示的信息将是部分的。特别是,last reboot
最终显示的是上次轮换时间,而不是系统的实际启动时间。这就是last
显示开始时间的原因wtmp
:这是 所显示信息的时间范围last
。
当wtmp
包含上次启动时间时,last reboot
确实显示它:
$ last reboot | head -n 1
reboot system boot 5.10.0-8-amd64 Mon Sep 13 15:56 still running
$ who -b
system boot 2021-09-13 15:56
$ uptime
09:11:03 up 31 days, 17:15, 13 users, load average: 0.48, 0.34, 0.42