¿Cómo mostrar el tiempo transcurrido desde el último inicio del sistema usando "tiempo de actividad"?

17

Quiero mostrar el tiempo transcurrido desde el último inicio del sistema uptime, pero no quiero que muestre toda esa información. Solo quiero saber cuántas horas pasaron desde el último inicio del sistema (es decir: 18:17:59)

Adrian George
fuente

Respuestas:

31

Para obtener el tiempo transcurrido desde el último inicio del sistema en hh:mm:ssformato, puede usar:

awk '{print int($1/3600)":"int(($1%3600)/60)":"int($1%60)}' /proc/uptime

/proc/uptime El pseudo-archivo contiene dos números:

  • El primer número es cuánto tiempo ha estado funcionando el sistema en segundos.
  • El segundo número es la cantidad de tiempo que la máquina ha estado inactiva en segundos.

Entonces, usando awkpuedes tomar el primer número y convertirlo en hh:mm:ssformato.

Radu Rădeanu
fuente
15

Para obtener el tiempo de actividad en segundos:

awk '{print $1}' /proc/uptime

Para obtener el tiempo de actividad en minutos:

 echo $(awk '{print $1}' /proc/uptime) / 60 | bc

Para obtener el tiempo de actividad en horas:

 echo $(awk '{print $1}' /proc/uptime) / 3600 | bc

Para obtener x dígitos de precisión, puede agregar scale = x, por ejemplo, para x = 2

echo "scale=2; $(awk '{print $1}' /proc/uptime) / 3600" | bc
Realmoonstruck
fuente
2

Prueba este:

uptime | awk '{ print $3 }'

De hecho, imprime la tercera palabra de la línea producida por uptime.

Alen
fuente
3
Funciona. Pero no parece la forma correcta de hacerlo. ¿Qué pasa si la tercera palabra no es la hora, por ejemplo, mi tercera palabra es "4", porque mi máquina está funcionando durante 4 días. Esto es lo que obtengo: "02:00:39 hasta 4 días, 12:54, 2 usuarios, promedio de carga: 0.03. 0.06, 0.06".
Adrian George
¡Oh: DI no sabía sobre el tiempo más de 1 día!
Alen
Está bien: ¿ahora tienes algunas respuestas a esto?
Adrian George el
No lo siento. uptimeparece no tener opciones, pero tampoco pude encontrar nada en la red.
Alen
2

Una modificación trivial para mostrar días:

awk '{print int($1/86400)"days "int($1%86400/3600)":"int(($1%3600)/60)":"int($1%60)}' /proc/uptime
xerostomus
fuente
0

Esto formateará su salida como 2 cero relleno:

awk '{printf("%02d:%02d:%02d",int($1/3600),int($1/3600/60),int($1%60))}' /proc/uptime
D4NI3LS
fuente