¿Cómo obtener de manera confiable la marca de tiempo en la que se inició el sistema?

13

Soy consciente del uptimecomando, pero devuelve segundos desde el inicio, por lo que si solo resta ese número de la marca de tiempo actual, en teoría puedo obtener un resultado diferente si el segundo cambia después de haber leído el tiempo de actividad y la marca de tiempo actual. uptime -ses lo que quiero, pero no está disponible en centos (¿cómo se calcula por cierto?). ¿Puedo obtener ctime de / proc dir? Esto parece darme el número adecuado, pero me pregunto si cada sistema Linux tiene / proc creado en el arranque.

Mullido
fuente
¿Qué formato quieres? HH:MM:SS? ¿Algo más?
terdon
1
@terdon, marca de tiempo UNIX
Fluffy

Respuestas:

12

En primer lugar, crtimees complicado en Linux . Dicho eso, ejecuta algo como

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

o

$ stat -c %Z /proc/ 
1414674003

Probablemente sea exactamente lo que necesita. El /procsistema de archivos está definido por el estándar LFS y debería estar allí para cualquier sistema Linux, así como para la mayoría (¿todos?) De UNIXen.

Alternativamente, suponiendo que realmente no necesita precisión de segundos, sino que solo necesita que la marca de tiempo sea correcta, puede usar who:

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

Desde man who: -b, - hora de inicio del último inicio del sistema

Puede convertir eso a segundos desde la época usando GNU date:

$ date -d "$(who -b | awk '{print $4,$3}' | tr - / )" +%s
1414674000
terdon
fuente
1
Una advertencia menor es que el tiempo de arranque se determina a partir del RTC, o algún valor predeterminado si carece de un RTC. Esta vez se escribe en utmp(por init) como la entrada de "arranque del sistema" y se lee por who -b. La hora del sistema puede estar equivocada hasta bien entrado el inicio. who -ben mi RPI dice que arranca en 1970, y otro RTC-ARM dice menos 2.008 ;-)
mr.spuratic