如何可靠地获取系统启动的时间戳?

Flu*_*ffy 14 uptime

我知道该uptime命令,但它自启动后返回秒数,所以如果我只是从当前时间戳中减去该数字,理论上如果在我读取正常运行时间和当前时间戳后秒发生变化,我可以获得不同的结果。uptime -s是我想要的,但它在 centos 上不可用(顺便说一句,它是如何计算的?)。我可以只获取 /proc 目录的 ctime 吗?这似乎给了我正确的数字,但我想知道是否每个 linux 系统都在启动时创建了 /proc。

ter*_*don 14

首先,在 Linux 上crtime棘手。也就是说,运行类似

$ stat -c %z /proc/ 
2014-10-30 14:00:03.012000000 +0100
Run Code Online (Sandbox Code Playgroud)

或者

$ stat -c %Z /proc/ 
1414674003
Run Code Online (Sandbox Code Playgroud)

可能正是您所需要的。该/proc文件系统由标准的LFS定义,应该有任何Linux系统以及大部分(所有?)UNIXen。

或者,假设您并不真正需要秒精度,而只需要时间戳正确,您可以使用who

$ who -b
   system boot  2014-10-30 14:00
Run Code Online (Sandbox Code Playgroud)

From man who: -b, --boot time of last system boot

您可以使用 GNU 将其转换为自纪元以来的秒数date

$ date -d "$(who -b | awk '{print $4,$3}' | tr - / )" +%s
1414674000
Run Code Online (Sandbox Code Playgroud)


小智 5

/proc/stat另一种解决方案是btime[1]:

$ cat /proc/stat | grep btime | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)

输出示例:

1583547431
Run Code Online (Sandbox Code Playgroud)

这是自纪元以来的秒数时间戳。

[1] http://man7.org/linux/man-pages/man5/proc.5.html