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


13

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


您要什么格式?HH:MM:SS?还有吗
terdon

1
@ terdon,UNIX时间戳
蓬松的

Answers:


12

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

$ stat -c %z /proc/ 
2014-10-30 14:00:03.012000000 +0100

要么

$ stat -c %Z /proc/ 
1414674003

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

另外,假设您实际上并不需要秒精度,而只需要时间戳正确,则可以使用who

$ who -b
   system boot  2014-10-30 14:00

man who:-b,-上一次系统引导的引导时间

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

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

1
一个较小的警告是引导时间由RTC确定,如果缺少RTC,则默认为启动时间。这段时间被写入utmp(通过init)作为“系统启动”条目,并由读取who -b。直到开始启动之前,系统时间可能是错误的。who -b在我的rPi上说它于1970年启动,而另一个没有RTC的ARM则说2008年;-)
spuratic先生

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.