Hice un script de shell universal, para sistemas que admiten uptime -p
como Linux más nuevo y para aquellos que no, como Mac OS X.
#!/bin/sh
uptime -p >/dev/null 2>&1
if [ "$?" -eq 0 ]; then
# Supports most Linux distro
# when the machine is up for less than '0' minutes then
# 'uptime -p' returns ONLY 'up', so we need to set a default value
UP_SET_OR_EMPTY=$(uptime -p | awk -F 'up ' '{print $2}')
UP=${UP_SET_OR_EMPTY:-'less than a minute'}
else
# Supports Mac OS X, Debian 7, etc
UP=$(uptime | sed -E 's/^[^,]*up *//; s/mins/minutes/; s/hrs?/hours/;
s/([[:digit:]]+):0?([[:digit:]]+)/\1 hours, \2 minutes/;
s/^1 hours/1 hour/; s/ 1 hours/ 1 hour/;
s/min,/minutes,/; s/ 0 minutes,/ less than a minute,/; s/ 1 minutes/ 1 minute/;
s/ / /; s/, *[[:digit:]]* users?.*//')
fi
echo "up $UP"
Esencia
Respuesta de John1024 referenciada con mis propias personalizaciones.
Mi uptime
produce una salida que se parece a:
$ uptime
12:49:10 up 25 days, 21:30, 28 users, load average: 0.50, 0.66, 0.52
Para convertir eso a su formato:
$ uptime | awk -F'( |,|:)+' '{print $6,$7",",$8,"hours,",$9,"minutes."}'
25 days, 21 hours, 34 minutes.
Cómo funciona
-
-F'( |,|:)+'
awk divide su entrada en campos. Esto le dice a awk que use cualquier combinación de uno o más espacios, comas o dos puntos como separador de campo.
-
print $6,$7",",$8,"hours,",$9,"minutes."
Esto le dice a awk que imprima el sexto campo y el séptimo campo (separados por un espacio) seguidos de una coma, el octavo campo, la cadena
hours,
el noveno campo y, por último, la cadenaminutes.
.
Manejo de computadoras con tiempos de actividad cortos usando sed
A partir de un reinicio, mi uptime
produce una salida como:
03:14:20 up 1 min, 2 users, load average: 2.28, 1.29, 0.50
04:12:29 up 59 min, 5 users, load average: 0.06, 0.08, 0.48
05:14:09 up 2:01, 5 users, load average: 0.13, 0.10, 0.45
03:13:19 up 1 day, 0 min, 8 users, load average: 0.01, 0.04, 0.05
04:13:19 up 1 day, 1:00, 8 users, load average: 0.02, 0.05, 0.21
12:49:10 up 25 days, 21:30, 28 users, load average: 0.50, 0.66, 0.52
El siguiente sed
comando maneja estos formatos:
uptime | sed -E 's/^[^,]*up *//; s/, *[[:digit:]]* users.*//; s/min/minutes/; s/([[:digit:]]+):0?([[:digit:]]+)/\1 hours, \2 minutes/'
Con los tiempos anteriores, esto produce:
1 minutes
59 minutes
2 hours, 1 minutes
1 day, 0 minutes
1 day, 1 hours, 0 minutes
25 days, 21 hours, 30 minutes
Cómo funciona
-
-E
activa la sintaxis extendida de expresiones regulares. (En las semillas GNU más antiguas, use-r
en lugar de-E
) -
s/^[^,]*up *//
Este comando de sustitución elimina todo el texto hasta
up
. -
s/, *[[:digit:]]* users.*//
Este comando sustituto elimina el recuento de usuarios y todo el texto que le sigue.
-
s/min/minutes/
Esto reemplaza
min
conminutes
. -
s/([[:digit:]]+):0?([[:digit:]]+)/\1 hours, \2 minutes/'
Si la línea contiene una hora en el formato hh:mm, esto separa las horas de los minutos y lo reemplaza con
hh hours, mm minutes
.
Manejo de computadoras con tiempos de actividad cortos usando awk
uptime | awk -F'( |,|:)+' '{d=h=m=0; if ($7=="min") m=$6; else {if ($7~/^day/) {d=$6;h=$8;m=$9} else {h=$6;m=$7}}} {print d+0,"days,",h+0,"hours,",m+0,"minutes."}'
En los mismos casos de prueba anteriores, esto produce:
0 days, 0 hours, 1 minutes.
0 days, 0 hours, 59 minutes.
0 days, 2 hours, 1 minutes.
1 days, 0 hours, 0 minutes.
1 days, 1 hours, 0 minutes.
25 days, 21 hours, 30 minutes.
Para aquellos que prefieren el código awk repartido en varias líneas:
uptime | awk -F'( |,|:)+' '{
d=h=m=0;
if ($7=="min")
m=$6;
else {
if ($7~/^day/) { d=$6; h=$8; m=$9}
else {h=$6;m=$7}
}
}
{
print d+0,"days,",h+0,"hours,",m+0,"minutes."
}'
Solución :Para obtener el tiempo de actividad de Linux en segundos, vaya a bash y escriba cat /proc/uptime
. Analice el primer número y conviértalo de acuerdo con sus requisitos.
De la documentación de RedHat:
Este archivo contiene información que detalla cuánto tiempo ha estado encendido el sistema desde su último reinicio . La salida de /proc/uptime
es bastante mínimo:
350735.47 234388.90
El primero número es el número total de segundos que el sistema ha estado activo.
El Segundo número es cuánto de ese tiempo la máquina ha estado inactiva, en segundos.
Solo para completar... de qué se trata:
$ uptime -p
up 2 weeks, 3 days, 14 hours, 27 minutes