自安装以来如何确定linux系统的“年龄”?


39

我以为我可以轻松检查特定文件的时间戳。然后我意识到当我看到像这样的时间戳时并不是那么容易1991


我喜欢所有这些答案,并已投票赞成并从中吸取教训。但是我想到的是,这个问题的定义并不明确:例如,我的彩色包装盒在运行的十年中,经历了两块主板的化身和HDD的四次完整更换,而FS被丢弃了。每次恢复。我所有的ssh公钥都发布于2001年2月19日。但根FS是在上一次升级主板(以及光盘)时创建的,2010年6月11日20:59:01;还有其他测试却给出了不同的结果,我想到了:您如何定义(而不是发现)Linux系统的年龄?
MadHatter在2011年

4
显然,这也被称为These修斯之船问题。请参阅en.wikipedia.org/wiki/Ship_of_Theseus
MadHatter在2011年

自购买机器以来,我一直都有一个带有分区的硬盘...购买新驱动器或使用新内核创建新的根分区时,我会将需要备份的所有内容都放在这里。没发生在我身上:-)
lisak 2011年

Answers:


47

最简单的方法可能是(假设sda1是您的/ root /):

tune2fs -l / dev / sda1 | grep已创建

这应该显示您创建文件系统的日期。确认可以在ext2到ext4上使用,不确定其他文件系统!


1
当我为PC购买新驱动器时,通常会在其上创建分区,然后进行cp -a数据覆盖。简而言之:不可能在所有情况下都确定系统的寿命。
休伯特·卡里奥

也许使用/dev/root会更普遍。
camh 2011年

我在以前的系统上安装了新系统,并保留了sda1 FS,因此下面的MihaiM(ssh密钥)解决方案更加准确。
环Ø

14

我经常使用的一种机制是检查根主目录中文件的更改时间(ctime)。由于/root主目录是在安装时创建的,并且通常很少使用,因此可以提供一个相对较好的近似值。正如Kyle在评论中所阐明的那样,由于ctime是指索引节点而不是数据,因此修改文件内容不会更改ctime。

默认情况下,该ls命令显示文件的修改时间(mtime)。因此,如果像这样替换ctime选项,

ls -alct /root

这将打印所有文件,显示创建时间,并按时间排序。

例如,这是/root我的一个系统中目录中3个最旧文件的示例。

ls -alt install.log.syslog .cshrc .tcshrc
-rw-r--r--. 1 root 10238 Feb 18  2010 install.log.syslog
-rw-r--r--. 1 root   129 Dec  3  2004 .tcshrc
-rw-r--r--. 1 root   100 Sep 22  2004 .cshrc

然后通过检查更改时间

ls -alct install.log.syslog .cshrc .tcshrc
-rw-r--r--. 1 root   100 Feb 18  2010 .cshrc
-rw-r--r--. 1 root 10238 Feb 18  2010 install.log.syslog
-rw-r--r--. 1 root   129 Feb 18  2010 .tcshrc

当然,2010年2月18日这一日期与我第​​一次安装该系统的大概时间一致。


4
ctime实际上不是文件的创建时间,而是更改时间。这是我最后一次更改索引节点。如果您更改文件的权限或所有者,则此更改。可能是/ root文件夹本身的所有者或权限没有更改,这就是这种情况的原因。(我不知道是什么的C实际上代表-统一UNIX规范只是有“最后的状态改变的time_t的st_ctime时间。”
凯尔·勃兰特

实际上,安装程序日志的日期/时间。根据您的发行版/操作系统,哪个可能存在或可能不存在。
Koos van den Hout

6

尝试

ls -alp /etc/ssh/ssh_host_dsa_key.pub | cut -d " " -f6

安装操作系统时会生成密钥。


3
这是一个好主意,但是在SSH密钥中发现了一些弱点,如果您已经完成系统更新(并且您应该进行系统更新!),那么密钥将被重新生成。
乔什(Josh)

好主意!但是,如果密钥足够新,ls则以不同的方式显示日期(至少在我的机器上),因此该cut命令无法正常运行。我现在使用stat -c %y /etc/ssh/ssh_host*pub。另外,我想知道为什么文件创建时间在Linux上没有得到更多的关注……
Rennex 2015年

3

如果可以访问,检查硬件是一个不错的选择。您可以检查系统和/或硬件组件,以了解何时组装。

或者,如果您可以访问BIOS屏幕,则通常会有日期信息可用于确定计算机的年龄。

如果您可以访问硬盘驱动器(smartctl -a /dev/sda)上的SMART信息,则可能有其他情况。我在SMART中没有看到特定的时间戳,但是至少有一个小时的使用情况计数器。这将为机器的使用期限提供一个下限(由于硬盘驱动器已经运行了100个小时,因此系统不能少于100个小时)。

至于文件系统检查,您可以查看日期信息/lost+found-创建文件系统时已创建该目录。日期应与上一个答案中的tunefs信息一致。


+1 /lost+found,因为非特权用户可以使用此信息。以超级用户身份在根文件系统上运行类似tune2fs的批处理操作有些令人担忧。另外,该解决方案适用于FreeBSD和非ext2 / 3/4文件系统。
Stefan Lasiewski 2014年

3

使用RedHat及其衍生版本,可以通过结合文件使用期限和其他系统文件来轻松了解OS版本/年份。我通常会检查该/root/anaconda-ks.cfg文件,因为它包含初始服务器设置和程序包参数。有时uname -a会有关于内核构建日期的良好信息。还会有一组日期相同的文件/etc;通常是rcx.d链接,rc脚本,inittab等。


3

这也适用于Red Hat系统:

rpm -qi basesystem | grep "Install Date"

请注意,如果正在从通用映像中启动虚拟机,则此方法(以及tune2fs技巧)在虚拟机中的效果较差。ssh主机密钥的检查在我的Linode上是准确的。
cjc 2012年
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.