Как определить «возраст» системы linux с момента установки?


39

Я думал, что могу легко проверить временную метку определенных файлов. Тогда я понял, что это будет не так просто, когда я увидела метки времени 1991.


Я люблю все эти ответы, и некоторые проголосовали, и извлекли уроки из них. Но мне приходит в голову, что вопрос не является четко определенным: например, моя коробка colo'ed прошла через два воплощения материнской платы и четыре полных смены жесткого диска за десять лет, в течение которых она работала, с FS, являющейся дампом | восстанавливается каждый раз. Все мои открытые ключи ssh датированы 19 февраля 2001 г .; но корневой FS был создан 11 июня 2010, 20:59:01, когда последний раз обновлялся mobo (вместе с дисками); все же другие тесты дают еще другие результаты, и мне приходит в голову: как вы определяете (не обнаруживаете) возраст системы Linux?
MadHatter поддерживает Монику

4
По-видимому, это также известно как проблема корабля Тесея; см. en.wikipedia.org/wiki/Ship_of_Theseus .
MadHatter поддерживает Монику

У меня всегда есть жесткий диск с разделом, который существует с тех пор, как я купил машину ... Я помещаю туда все необходимое для резервного копирования, когда я покупаю новый диск или создаю новый корневой раздел со свежим ядром ... Но это мне не пришло в голову :-)
Лисак

Ответы:


47

Вероятно, самый простой способ (предположим, что sda1 - это ваш / root /):

tune2fs -l / dev / sda1 | grep создан

Это должно показать вам дату создания файловой системы. Подтвержден для работы с ext2 до ext4, не уверен насчет других файловых систем!


1
Когда я получаю новый диск для своих компьютеров, я обычно создаю на нем разделы, а затем cp -aперезаписываю данные. Итак, вкратце: невозможно определить возраст системы во всех случаях.
Хьюберт Карио

Возможно, использование /dev/rootнемного более общее.
Camh

Я установил новую систему поверх предыдущей, сохранив sda1 FS, и, таким образом, решение MihaiM ниже (ключи ssh) было более точным.
Кольцо Ø

14

Один из механизмов, который я часто использую, заключается в проверке времени изменения (ctime) файлов в корневом домашнем каталоге. Поскольку /rootдомашний каталог создается во время установки и часто используется редко, это может обеспечить относительно хорошее приближение. Как пояснил Кайл в комментариях, поскольку ctime относится к иноду, а не к данным, изменение содержимого файла не изменит ctime.

По умолчанию lsкоманда печатает время изменения (mtime) файла. Так что если подставить в опцию ctime вот так,

ls -alct /root

Это распечатает все файлы, отобразит время создания и отсортирует по времени.

В качестве примера, вот пример 3 самых старых файлов в /rootкаталоге с одной из моих систем.

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

Дата 18 февраля 2010 года определенно соответствует приблизительному времени, когда я впервые установил эту систему.


4
На самом деле ctime - это не время создания файла, а время изменения. Это последний раз, когда я вносил изменения в индекс. Если вы измените права доступа или владельца файла, это изменится. Скорее всего, владелец или права доступа к самой папке / root не изменились, поэтому это происходит. (Я не знаю, что на самом деле означает c - в спецификации Single Unix просто есть «time_t st_ctime время последнего изменения статуса».
Кайл Брандт,

Действительно, дата / время установки журнала. Который может или не может быть там в зависимости от вашего дистрибутива / ОС.
Koos van den Hout

6

пытаться

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

ключи генерируются при установке ОС.


3
Это хорошая идея, однако некоторые недостатки были обнаружены в ключах SSH, и если вы выполняли системные обновления (и вы должны делать системные обновления!), То ключи были бы восстановлены.
Джош

Отличная идея! Однако, если ключ достаточно новый, lsдата отображается по-разному (по крайней мере, на моем компьютере), поэтому cutкоманда работает неправильно. Я бы сейчас воспользовался stat -c %y /etc/ssh/ssh_host*pub. Кроме того, мне интересно, почему времена создания файлов не получили больше любви в Linux ...
Rennex

3

Проверка оборудования была бы хорошей идеей, если у вас есть к ней доступ. Вы можете проверить систему и / или компоненты оборудования, чтобы получить представление о том, когда она была собрана.

С другой стороны, если вы можете получить доступ к экрану BIOS, там часто есть информация о дате, которую можно использовать для определения возраста компьютера.

Если вы можете получить доступ к информации SMART на жестком диске ( smartctl -a /dev/sda), возможно, вам нужно что-то предпринять. Я не вижу конкретной метки времени в SMART, но есть счетчик часов использования по крайней мере. Это обеспечит нижнюю границу возраста компьютера (поскольку, если жесткий диск проработал 100 часов, система не может быть моложе 100 часов).

Что касается проверок файловой системы, вы можете посмотреть информацию о дате /lost+found- этот каталог был создан при создании файловой системы. Дата должна совпадать с информацией о настройках из предыдущего ответа.


+1 за /lost+foundподсказку, так как эта информация доступна непривилегированным пользователям. Запуск пакетной операции, такой как tune2fs, в корневых файловых системах в качестве суперпользователя немного беспокоит. Кроме того, это решение работает с файловыми системами FreeBSD и не ext2 / 3/4.
Стефан Ласевский

3

С RedHat и его производными, довольно просто получить общее представление о версии / сборке ОС через комбинацию возраста файла и других системных файлов. Обычно я проверяю /root/anaconda-ks.cfgфайл, так как он содержит начальную настройку сервера и параметры пакета. Иногда uname -aбудет хорошая информация о дате сборки ядра. Там также будет кластер файлов с той же датой в /etc; обычно ссылки на rcx.d, скрипты rc, inittab и т. д.


3

Это также работает для систем Red Hat:

rpm -qi basesystem | grep "Install Date"

Обратите внимание, что это (и трюк tune2fs) работает хуже с виртуальными машинами, если они запускаются из общего образа. Тем не менее, проверка ключей хоста ssh на моем Linode точна.
CJC
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.