有什么好方法可以知道 Linux 计算机的安装时间?
我能想到的任何解决方案都将基于stat -c %y
,例如。
stat --format %y /etc/os-release /etc/skel
2022-04-06 12:00:18.402055811 +0200
2022-04-06 12:00:19.895055839 +0200
但使用修改时间有明显的缺点,出生日期可能不受支持。
有什么好方法可以知道 Linux 计算机的安装时间?
我能想到的任何解决方案都将基于stat -c %y
,例如。
stat --format %y /etc/os-release /etc/skel
2022-04-06 12:00:18.402055811 +0200
2022-04-06 12:00:19.895055839 +0200
但使用修改时间有明显的缺点,出生日期可能不受支持。
我认为您能得到的最接近的(或者更准确地说,您所能期望的最好的)是根文件系统本身的创建时间戳,假设该文件系统是在安装期间创建的(并且在创建时时钟设置正确)。
因此,如果在 Ext4 上:
如果在 btrfs 上:
如果在 zfs 上:
在没有单独存储创建时间戳的文件系统上,可以使用根 inode 的创建(“诞生”)时间进行替换:
(或者任何其他文件系统挂载点
/
)。如果文件系统是从其他地方复制过来的,这种方法就行不通了;在这种情况下,系统中有些文件在安装过程中应该被设置为系统独有的,但这也不是 100% 可靠的。 其中一个文件是
/etc/machine-id
,因此您可以查看该文件的修改日期:但请记住,系统安装后可以删除并重新创建该文件。
您还可以通过检查已安装的硬件(假设是物理系统)来确定下限。不幸的是,没有可靠的方法来确定您在系统中找到的任何时间戳是否是可靠的指标!
如果系统是虚拟机,您可能能够通过查看虚拟机管理程序的元数据来确定其创建日期。
一个非常有趣的问题。我不知道是否 100% 可以找到答案,这取决于是否使用预配置的内核、initrd、GRUB、文件系统等,以及哪个系统使用哪个时间戳。
而且@Stephen Kitt已经提到了最重要的命令之一,我现在没有将其包括在内。
也许并非所有命令本身都有意义,而应该组合使用。
我在这里使用 Debian 12.x GNU/Linux 执行这些命令,并且以 root 身份运行所有命令。
以 root 身份运行脚本,并将其替换
/dev/sda2
为您的设备/分区:我从以下位置获取了最早的日期:文件系统创建时间 ext4
创建运行脚本
system_ctrl_date
:我还有一个读取 BIOS、UEFI、引导加载程序和硬件信息的脚本,但我认为它没有意义,因为它来自制造商。