Como obter um carimbo de data / hora confiável no qual o sistema foi inicializado?

12

Estou ciente do uptimecomando, mas ele retorna segundos após a inicialização, por isso, se eu apenas subtrair esse número do carimbo de data / hora atual, em teoria, posso obter um resultado diferente se o segundo mudar depois de ler o tempo de atividade e o carimbo de data / hora atual. uptime -sé o que eu quero, mas não está disponível no centos (como é calculado btw?). Posso apenas obter ctime de / proc dir? Isso parece me dar o número adequado, mas eu me pergunto se todos os sistemas Linux criaram / proc criados na inicialização.

Fofo
fonte
Que formato você quer? HH:MM:SS? Algo mais?
terdon
1
@terdon, carimbo de data
Fluffy

Respostas:

12

Primeiro de tudo, crtimeé complicado no Linux . Dito isto, executando algo como

$ stat -c %z /proc/ 
2014-10-30 14:00:03.012000000 +0100

ou

$ stat -c %Z /proc/ 
1414674003

provavelmente é exatamente o que você precisa. O /procsistema de arquivos é definido pelo padrão LFS e deve estar lá para qualquer sistema Linux e para a maioria (todos?) UNIXen.

Como alternativa, supondo que você não precise realmente de segundos de precisão, mas que apenas o carimbo de data e hora esteja correto, você pode usar who:

$ who -b
   system boot  2014-10-30 14:00

De man who: -b, - hora de inicialização da última inicialização do sistema

Você pode converter isso em segundos desde a época usando o GNU date:

$ date -d "$(who -b | awk '{print $4,$3}' | tr - / )" +%s
1414674000
terdon
fonte
1
Uma ressalva menor é que o tempo de inicialização é determinado a partir do RTC, ou algum padrão, se não houver um RTC. Esse tempo é gravado em utmp(por init) como a entrada "inicialização do sistema" e lido por who -b. A hora do sistema pode estar incorreta até a inicialização. who -bno meu RPI diz ele iniciou em 1970, e outra RTC-less ARM diz 2.008 ;-)
mr.spuratic