Jak określić „wiek” systemu Linux od momentu instalacji?

39

Pomyślałem, że mogę łatwo sprawdzić znacznik czasu poszczególnych plików. Potem zdałem sobie sprawę, że nie byłoby tak łatwo, gdy zobaczyłem takie znaczniki czasu 1991.

lisak
źródło
Uwielbiam wszystkie te odpowiedzi, niektóre z nich głosowałem i nauczyłem się od nich. Ale przychodzi mi do głowy, że pytanie nie jest dobrze zdefiniowane: na przykład, moje pudełko z kolorem przeszło dwa wcielenia płyty głównej i cztery kompletne zmiany dysku twardego w ciągu dziesięciu lat, kiedy działało, a FS był zrzutem | przywracane za każdym razem. Wszystkie moje klucze publiczne ssh są datowane na 19 lutego 2001; ale root FS został utworzony 11 czerwca 2010, 20:59:01, kiedy mobo zostało ostatnio zaktualizowane (wraz z dyskami); jeszcze inne testy dają jeszcze inne wyniki i przychodzi mi do głowy: jak zdefiniować (nie odkryć) wiek systemu linux?
MadHatter obsługuje Monikę
4
Najwyraźniej jest to również znane jako problem statku Tezeusza; patrz en.wikipedia.org/wiki/Ship_of_Theseus .
MadHatter obsługuje Monikę
Zawsze mam dysk twardy z partycją, która istnieje, odkąd kupiłem maszynę ... Wkładam tam wszystko, czego potrzebuję, aby wykonać kopię zapasową, kiedy kupuję nowy dysk lub tworzę nową partycję root ze świeżym jądrem ... Ale to nie
przyszło

Odpowiedzi:

47

Najprostszym sposobem byłby prawdopodobnie (zakładając, że sda1 to twój / root /):

tune2fs -l / dev / sda1 | grep utworzony

Powinno to pokazywać datę utworzenia systemu plików. Potwierdzono pracę z ext2 na ext4, nie jestem pewien co do innych systemów plików!

Niall Donegan
źródło
1
Kiedy dostaję nowy dysk dla moich komputerów, zwykle tworzę na nim partycje, a następnie cp -aprzesyłam dane. Krótko mówiąc: nie można ustalić wieku systemu we wszystkich przypadkach.
Hubert Kario
Być może używanie /dev/rootjest nieco bardziej ogólne.
camh 12.01.11
Zainstalowałem nowy system w stosunku do poprzedniego, zachowując sda1 FS, a zatem rozwiązanie MihaiM poniżej (klucze ssh) było bardziej dokładne.
Pierścień Ø
14

Jednym z często używanych przeze mnie mechanizmów jest sprawdzanie czasu zmiany (ctime) plików w głównym katalogu głównym. Ponieważ /rootkatalog domowy jest tworzony w czasie instalacji i jest często używany, może to zapewnić względnie dobre przybliżenie. Jak wyjaśnił Kyle w komentarzach, ponieważ ctime odnosi się do i-węzła, a nie danych, modyfikacja zawartości pliku nie zmieni ctime.

Domyślnie lspolecenie wypisuje czas modyfikacji (mtime) pliku. Więc jeśli zastąpimy w takiej opcji ctime,

ls -alct /root

Spowoduje to wydrukowanie wszystkich plików, wyświetlenie czasu utworzenia i sortowanie według czasu.

Jako przykład, oto przykład 3 najstarszych plików w /rootkatalogu z jednego z moich systemów.

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

A następnie sprawdzając czas zmiany

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

Data 18 lutego 2010 r. Z pewnością śledzi przybliżony czas, w którym po raz pierwszy zainstalowałbym ten system.

Scott Pack
źródło
4
ctime nie jest tak naprawdę czasem utworzenia pliku, ale raczej czasem zmiany. To był ostatni raz, kiedy zmieniłem na i-węzeł. Jeśli zmienisz uprawnienia lub właściciela pliku, zmieni się to. Możliwe, że właściciel lub uprawnienia do samego folderu / root nie uległy zmianie, dlatego ustawia się w kolejce. (Nie wiem, co faktycznie oznacza c - Specyfikacja Single Unix ma tylko „time_t st_ctime Czas ostatniej zmiany stanu”.
Kyle Brandt
Rzeczywiście, data / godzina dziennika instalatora. Który może, ale nie musi być, w zależności od twojej dystrybucji / systemu operacyjnego.
Koos van den Hout
6

próbować

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

klucze są generowane podczas instalacji systemu operacyjnego.

MihaiM
źródło
3
To dobry pomysł, jednak wykryto pewne słabości kluczy SSH i jeśli dokonałeś aktualizacji systemu (i powinieneś robić aktualizacje systemu!), Klucze zostałyby zregenerowane.
Josh
Świetny pomysł! Jeśli jednak klucz jest wystarczająco nowy, lspokazuje datę inaczej (przynajmniej na moim komputerze), więc cutpolecenie nie działa poprawnie. Chciałbym teraz użyć stat -c %y /etc/ssh/ssh_host*pub. Zastanawiam się także, dlaczego czasy tworzenia plików nie zyskały więcej miłości w Linuksie ...
Rennex
3

Sprawdzanie sprzętu byłoby dobrym wyborem, jeśli masz do niego dostęp. Możesz sprawdzić system i / lub komponenty sprzętowe, aby zorientować się, kiedy został złożony.

Alternatywnie, jeśli możesz uzyskać dostęp do ekranu BIOS, często są tam informacje o dacie, które można wykorzystać do ustalenia, ile lat ma maszyna.

Jeśli możesz uzyskać dostęp do informacji SMART na dysku twardym ( smartctl -a /dev/sda), może być coś do zrobienia. Nie widzę określonego znacznika czasu w SMART, ale jest co najmniej godzinny licznik użycia. Zapewniłoby to dolną granicę wieku maszyny (ponieważ jeśli dysk twardy działał przez 100 godzin, system nie może być młodszy niż 100 godzin).

Jeśli chodzi o kontrole systemu plików, możesz sprawdzić informacje o dacie dla /lost+found- ten katalog został utworzony podczas tworzenia systemu plików. Data powinna zgadzać się z informacjami tunefs z poprzedniej odpowiedzi.

Phil Hollenback
źródło
+1 za /lost+foundpodpowiedź, ponieważ ta informacja jest dostępna dla nieuprzywilejowanych użytkowników. Uruchamianie operacji wsadowej, takiej jak tune2fs, w systemach plików root, ponieważ superużytkownik jest nieco niepokojący. Ponadto to rozwiązanie działa w systemach plików FreeBSD i innych niż ext2 / 3/4.
Stefan Lasiewski
3

Dzięki RedHat i pochodnym bardzo łatwo jest uzyskać ogólne pojęcie o wersji / archiwum systemu operacyjnego poprzez połączenie wieku plików i innych plików systemowych. Zazwyczaj sprawdzam /root/anaconda-ks.cfgplik, ponieważ zawiera on początkową konfigurację serwera i parametry pakietu. Czasami uname -abędą mieć dobre informacje o dacie kompilacji jądra. Byłby też klaster plików z tą samą datą /etc; zazwyczaj linki rcx.d, skrypty rc, inittab itp.

ewwhite
źródło
3

Działa to również w systemach Red Hat:

rpm -qi basesystem | grep "Install Date"
znak
źródło
Zauważ, że ta (i sztuczka tune2fs) działa gorzej z maszynami wirtualnymi, jeśli są one rozdzielane ze wspólnego obrazu. Jednak sprawdzenie kluczy hosta ssh jest dokładne na moim Linode.
cjc