Quiero mostrar /proc/uptime
en buen formato como:
DD:HH:MM:SS
/proc/uptime
dame el tiempo del sistema en segundos, ¿hay una solución estándar que convierta los segundos a este formato?
Quiero mostrar /proc/uptime
en buen formato como:
DD:HH:MM:SS
/proc/uptime
dame el tiempo del sistema en segundos, ¿hay una solución estándar que convierta los segundos a este formato?
Respuestas:
Puede hacer esto, por ejemplo, con perl y algunas matemáticas simples:
cat /proc/uptime | perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/3600),int(($1%3600)/60),$1%60'
Si no necesita los segundos, simplemente puede ejecutar el uptime
comando. Su salida se puede transformar simplemente en DD: HH: MM.
Por ejemplo, usando (funciona de esta manera solo si el tiempo de actividad es> 1 h)
uptime | perl -ne '/(\d*) day[^\d]*(\d*):(\d*)/ ; printf "%02d:%02d:%02d\n", $1, $2, $3'
No, porque no es realmente un problema difícil. Divide el número de segundos entre 86400 usando la división de enteros para obtener el número de días. Tome el resto y divídalo entre 3600 para obtener la cantidad de horas. Divide el resto de eso por 60 para obtener la cantidad de minutos, y te queda la cantidad de segundos. Todo esto se puede hacer desde el shell utilizando el expr
comando si su shell es lo suficientemente antiguo como para no admitir la aritmética de forma nativa
Tomar el número de segundos desde la época y convertirlo en una fecha legible por humanos es un problema difícil, por lo que hay formas estándar de hacerlo, por ejemplo, date -r SECONDS
desde el shell. Pero ese es un problema diferente.
Adaptando la parte relevante de esta respuesta .
Mientras su tiempo de actividad sea inferior a un año, puede usar el siguiente comando:
TZ=UTC date -d@$(cut -d\ -f1 /proc/uptime) +'%j %T' | awk '{print $1-1"d",$2}'
Extraigo el primer campo del archivo de tiempo de actividad, ya que al menos en mi Linux, hay un segundo campo que contiene el tiempo de inactividad total. Trato eso como el número de segundos desde la época, y lo convierto al día del año seguido de tiempo en horas, minutos y segundos. Como el día del año comienza en uno, resto uno de eso en mi awk
invocación final .
\n
¡para nueva línea sería bueno!