Comment obtenir de manière fiable l'horodatage auquel le système a démarré?


13

Je connais la uptimecommande, mais elle renvoie des secondes depuis le démarrage, donc si je soustrais juste ce nombre à l'horodatage actuel, en théorie, je peux obtenir un résultat différent si la seconde change après avoir lu le temps de disponibilité et l'horodatage actuel. uptime -sc'est ce que je veux, mais il n'est pas disponible sur les centos (comment est-il calculé btw?). Puis-je simplement obtenir le ctime du répertoire / proc? Cela semble me donner le bon numéro, mais je me demande si chaque système Linux a / proc créé au démarrage.


Quel format souhaitez-vous? HH:MM:SS? Autre chose?
terdon

1
@terdon, horodatage UNIX
Fluffy

Réponses:


12

Tout d'abord, crtimec'est délicat sous Linux . Cela dit, exécuter quelque chose comme

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

ou

$ stat -c %Z /proc/ 
1414674003

est probablement exactement ce dont vous avez besoin. Le /procsystème de fichiers est défini par la norme LFS et devrait être présent pour tout système Linux ainsi que pour la plupart (tous?) UNIXen.

Vous pouvez également utiliser who:

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

De man who: -b, --boot time of last system boot

Vous pouvez convertir cela en secondes depuis l'époque en utilisant GNU date:

$ date -d "$(who -b | awk '{print $4,$3}' | tr - / )" +%s
1414674000

1
Une mise en garde mineure est que le temps de démarrage est déterminé à partir du RTC, ou une valeur par défaut s'il manque un RTC. Cette heure est écrite dans utmp(par init) comme entrée de "démarrage du système" et lue par who -b. L'heure du système peut être erronée jusqu'au début du démarrage. who -bsur mon rPi dit qu'il a démarré en 1970, et un autre ARM sans RTC dit 2008 ;-)
mr.spuratic

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.