我知道该uptime
命令,但它返回自启动以来的秒数,因此,如果我只是从当前时间戳中减去该数字,理论上,如果在读取正常运行时间和当前时间戳后秒数发生变化,我可以得到不同的结果。uptime -s
是我想要的,但它在centos上不可用(顺便说一句,它是如何计算的?)。我可以只获取 /proc 目录的 ctime 吗?这似乎给了我正确的数字,但我想知道是否每个 Linux 系统都在启动时创建了 /proc。
答案1
首先,crtime
是在 Linux 上很棘手。也就是说,运行类似的东西
$ 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
From man who
: -b, --boot 上次系统启动的时间
您可以使用 GNU 将其转换为自纪元以来的秒数date
:
$ date -d "$(who -b | awk '{print $4,$3}' | tr - / )" +%s
1414674000
答案2
另一种解决方案是/proc/stat
[ btime
1]:
$ cat /proc/stat | grep btime | awk '{print $2}'
输出示例:
1583547431
这是自纪元以来的秒数时间戳。
答案3
在 macOS 上,/proc
不可用,但/dev
可以。以下是一些其他选项:
$ who -b
reboot ~ Dec 17 18:45
$ stat -f %m /dev
1608227137
其中-f %m
指定以“strftime(3) 格式”显示上次修改时间。
$ stat -F /dev
dr-xr-xr-x 3 root wheel 4606 Dec 17 18:45:37 2020 /dev/
如果安装了 GNU 工具(通过 Homebrew),这些工具也可用:
$ gwho -b
system boot 2020-12-17 18:45
$ gstat -c %Y /dev
1608227137
其中-c %Y
指定显示“上次数据修改的时间,自纪元以来的秒数”。
$ gstat -c %y /dev
2020-12-17 18:45:37.000000000 +0100
%y
相反,人类可读。
答案4
上述解决方案仅适用于具有 RTC 的计算机。在 Raspberry Pi 和其他没有 RTC 的嵌入式系统上,系统在创建系统目录结构时会将参考时间戳设置为 0。由于我们在这里讨论的是 Linux,因此请从 /proc/uptime 读取信息
cat /proc/uptime | awk '{ print $1 }'