Voglio visualizzare /proc/uptime
in un formato ben fatto come:
DD:HH:MM:SS
/proc/uptime
dammi il tempo di sistema in secondi, esiste una soluzione standard che converte i secondi in questo formato?
Voglio visualizzare /proc/uptime
in un formato ben fatto come:
DD:HH:MM:SS
/proc/uptime
dammi il tempo di sistema in secondi, esiste una soluzione standard che converte i secondi in questo formato?
Risposte:
Puoi farlo ad esempio con perl e alcuni semplici calcoli:
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'
Se non hai bisogno dei secondi, puoi semplicemente eseguire il uptime
comando. Il suo output può quindi essere semplicemente trasformato in DD: HH: MM.
Ad esempio utilizzando (funziona in questo modo solo se uptime> 1h)
uptime | perl -ne '/(\d*) day[^\d]*(\d*):(\d*)/ ; printf "%02d:%02d:%02d\n", $1, $2, $3'
No, perché non è davvero un problema difficile. Dividi il numero di secondi per 86400 usando la divisione intera per ottenere il numero di giorni. Prendi il resto e dividilo per 3600 per ottenere il numero di ore. Dividi il resto per 60 per ottenere il numero di minuti e ti rimane il numero di secondi. Tutto ciò è realizzabile dalla shell usando il expr
comando se la shell è abbastanza antica da non supportare l'aritmetica in modo nativo
Prendere il numero di secondi dall'epoca e trasformarlo in una data leggibile dall'uomo è un problema difficile, e quindi ci sono modi standard per farlo, ad esempio date -r SECONDS
dalla shell. Ma questo è un problema diverso.
Adattare la parte pertinente di questa risposta .
Finché il tempo di attività è inferiore a un anno, è possibile utilizzare il comando seguente:
TZ=UTC date -d@$(cut -d\ -f1 /proc/uptime) +'%j %T' | awk '{print $1-1"d",$2}'
Estraggo il primo campo del file uptime, poiché almeno sul mio Linux, c'è un secondo campo contenente il tempo di inattività totale. Lo considero come il numero di secondi dall'epoca e lo converto in giorno dell'anno seguito da tempo in ore, minuti e secondi. Poiché il giorno dell'anno inizia all'una, ne sottraggo uno nella mia awk
invocazione finale .
\n
per newline sarebbe buono!