Como determinar a "idade" de um sistema Linux desde a instalação?

39

Eu pensei que poderia facilmente verificar o carimbo de data / hora de arquivos específicos. Então eu percebi que não seria tão fácil quando eu vi timestamps como 1991.

lisak
fonte
Eu amo todas essas respostas, votei algumas e aprendi com elas. Mas me ocorre que a pergunta não está bem definida: por exemplo, minha caixa colorida passou por duas encarnações da placa-mãe e quatro alterações completas do disco rígido nos dez anos em que está rodando, com o FS sendo despejado | restaurado cada vez. Todas as minhas chaves públicas ssh são datadas de 19 de fevereiro de 2001; mas o FS raiz foi criado em 11 de junho de 2010, 20:59:01, quando o mobo foi atualizado pela última vez (junto com os discos); outros testes ainda dão resultados diferentes, e me ocorre: como você define (não descobre) a idade de um sistema linux?
MadHatter suporta Monica
4
Aparentemente, isso também é conhecido como o problema da nave de Teseu; consulte en.wikipedia.org/wiki/Ship_of_Theseus .
MadHatter apoia Monica
Eu sempre tenho um disco rígido com uma partição que existe desde que comprei a máquina ... Coloco todas as coisas necessárias para fazer backup quando compro uma nova unidade ou crio uma nova partição raiz com novo kernel ... Mas não me ocorreu :-)
lisak 12/01

Respostas:

47

A maneira mais simples provavelmente seria (presumindo que sda1 seja seu / root /):

tune2fs -l / dev / sda1 | grep criado

Isso deve mostrar a data em que o sistema de arquivos foi criado. Confirmado para trabalhar no ext2 para ext4, não tenho certeza sobre outros sistemas de arquivos!

Niall Donegan
fonte
11
Quando recebo uma nova unidade para meus PCs, geralmente crio partições nela e depois os cp -adados. Em resumo: não é possível determinar a idade do sistema em todos os casos.
Hubert Kario
Talvez o uso /dev/rootseja um pouco mais geral.
Camh
Instalei um novo sistema em relação ao anterior, mantendo o sda1 FS e, portanto, a solução do MihaiM abaixo (chaves ssh) era mais precisa.
Ring Ø
14

Um mecanismo que costumo usar é verificar o tempo de alteração (ctime) nos arquivos no diretório inicial raiz. Como o /rootdiretório inicial é criado no momento da instalação e raramente é usado, isso pode fornecer uma aproximação relativamente boa. Conforme esclarecido por Kyle nos comentários, como ctime refere-se ao inode, e não aos dados, a modificação do conteúdo do arquivo não altera o ctime.

Por padrão, o lscomando imprime o horário da modificação (mtime) do arquivo. Portanto, se você substituir na opção ctime,

ls -alct /root

Isso imprimirá todos os arquivos, exibirá a hora de criação e ordenará por hora.

Como exemplo, aqui está uma amostra dos 3 arquivos mais antigos no /rootdiretório de um dos meus sistemas.

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

E então, verificando o horário da mudança

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

A data de 18 de fevereiro de 2010 certamente acompanha o tempo aproximado em que eu teria instalado esse sistema pela primeira vez.

Scott Pack
fonte
4
ctime não é realmente a hora de criação de um arquivo, mas a hora da mudança. Esta é a última vez que mudei para o inode. Se você alterar as permissões ou o proprietário de um arquivo, isso será alterado. As chances são de que o proprietário ou as permissões da pasta / root em si não foram alteradas e é por isso que isso está alinhado. (Eu não sei o que o c realmente significa - especificação Single UNIX só tem "time_t st_ctime Hora da última mudança de status".
Kyle Brandt
De fato, a data / hora do log do instalador. O que pode ou não estar lá, dependendo da sua distribuição / sistema operacional.
Koos van den Hout
6

experimentar

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

as chaves são geradas quando você instala o sistema operacional.

MihaiM
fonte
3
Essa é uma boa idéia, no entanto, algumas fraquezas foram encontradas nas chaves SSH e, se você tiver feito atualizações do sistema (e deveria estar fazendo atualizações do sistema!), As chaves teriam sido regeneradas.
Josh
Excelente ideia! No entanto, se a chave for nova o suficiente, lsmostra a data de maneira diferente (pelo menos na minha máquina) para que o cutcomando não funcione corretamente. Eu usaria agora stat -c %y /etc/ssh/ssh_host*pub. Além disso, eu me pergunto por que os tempos de criação de arquivos não receberam mais amor no Linux ...
Rennex
3

Verificar o hardware seria uma boa aposta, se você tiver acesso a ele. Você pode inspecionar o sistema e / ou os componentes de hardware para ter uma boa idéia de quando foi montado.

Como alternativa, se você pode acessar a tela do BIOS, geralmente há informações de data que podem ser usadas para determinar a idade de uma máquina.

Se você puder acessar as informações SMART no disco rígido ( smartctl -a /dev/sda), pode haver algo para continuar. Não vejo um carimbo de data / hora específico no SMART, mas há pelo menos uma hora de contador de uso. Isso forneceria um limite menor de quantos anos a máquina tem (já que, se o disco rígido estiver em funcionamento há 100 horas, o sistema não poderá ter menos de 100 horas).

Quanto às verificações do sistema de arquivos, você pode procurar as informações de data para /lost+found- esse diretório foi criado quando o sistema de arquivos foi criado. A data deve estar de acordo com as informações dos ajustes da resposta anterior.

Phil Hollenback
fonte
+1 para a /lost+founddica, pois essas informações estão disponíveis para usuários não privilegiados. Executar uma operação em lote como o tune2fs nos sistemas de arquivos raiz, pois o superusuário é um pouco preocupante. Além disso, esta solução funciona em sistemas de arquivos FreeBSD e não ext2 / 3/4.
Stefan Lasiewski
3

Com RedHat e derivados, é muito fácil ter uma idéia geral da versão do sistema operacional / vintage através de uma combinação de idade do arquivo e outros arquivos do sistema. Normalmente, verificarei o /root/anaconda-ks.cfgarquivo, pois ele contém os parâmetros iniciais de configuração e pacote do servidor. Às vezes uname -a, há boas informações sobre a data de compilação do kernel. Também haveria um cluster de arquivos com a mesma data em /etc; normalmente os links rcx.d, scripts rc, inittab etc.

ewwhite
fonte
3

Isso também funciona para os sistemas Red Hat:

rpm -qi basesystem | grep "Install Date"
Marca
fonte
Observe que isso (e o truque do tune2fs) funciona menos bem com máquinas virtuais, se estiverem sendo geradas a partir de uma imagem comum. A verificação das chaves do host ssh é precisa no meu Linode, no entanto.
Cjc 01/08/2012