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.

Duveteux
la source
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
terdon
la source
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
0

Une autre solution est celle /proc/statde btime[1]:

$ cat /proc/stat | grep btime | awk '{print $2}'

Exemple de sortie:

1583547431

Il s'agit d'un horodatage de secondes depuis l'époque.

[1] http://man7.org/linux/man-pages/man5/proc.5.html

Jay Sullivan
la source