Ho creato uno script di shell universale, per sistemi che supportano uptime -p come Linux più recente e per quelli che non lo fanno, come 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"
Essenziale
Risposta John1024 referenziata con le mie personalizzazioni.
Il mio uptime produce un output simile a:
$ uptime
12:49:10 up 25 days, 21:30, 28 users, load average: 0.50, 0.66, 0.52
Per convertirlo nel tuo formato:
$ uptime | awk -F'( |,|:)+' '{print $6,$7",",$8,"hours,",$9,"minutes."}'
25 days, 21 hours, 34 minutes.
Come funziona
-
-F'( |,|:)+'awk divide il suo input in campi. Questo dice ad awk di usare qualsiasi combinazione di uno o più spazi, virgola o due punti come separatore di campo.
-
print $6,$7",",$8,"hours,",$9,"minutes."Questo dice ad awk di stampare il sesto campo e il settimo campo (separati da uno spazio) seguiti da una virgola, l'ottavo campo, la stringa
hours,il nono campo e, infine, la stringaminutes..
Gestione di computer con tempi di attività brevi utilizzando sed
A partire da un riavvio, il mio uptime produce un output come:
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
Il seguente sed comando gestisce questi formati:
uptime | sed -E 's/^[^,]*up *//; s/, *[[:digit:]]* users.*//; s/min/minutes/; s/([[:digit:]]+):0?([[:digit:]]+)/\1 hours, \2 minutes/'
Con i tempi di cui sopra, questo 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
Come funziona
-
-Eattiva la sintassi estesa delle espressioni regolari. (Su vecchi GNU seds, usa-ral posto di-E) -
s/^[^,]*up *//Questo comando di sostituzione rimuove tutto il testo fino a
up. -
s/, *[[:digit:]]* users.*//Questo comando sostitutivo rimuove il conteggio degli utenti e tutto il testo che lo segue.
-
s/min/minutes/Questo sostituisce
minconminutes. -
s/([[:digit:]]+):0?([[:digit:]]+)/\1 hours, \2 minutes/'Se la riga contiene un orario nel formato hh:mm, questo separa le ore dai minuti e lo sostituisce con
hh hours, mm minutes.
Gestione di computer con tempi di attività brevi utilizzando 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."}'
Negli stessi casi di test di cui sopra, questo 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.
Per coloro che preferiscono il codice awk distribuito su più righe:
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."
}'
Soluzione :Per ottenere il tempo di attività di Linux in pochi secondi, vai su bash e digita cat /proc/uptime .Analizza il primo numero e convertilo in base alle tue esigenze.
Dalla documentazione di RedHat:
Questo file contiene informazioni dettagliate per quanto tempo il sistema è stato acceso dall'ultimo riavvio . L'output di
/proc/uptimeè abbastanza minimale:350735.47 234388.90Il Primo numero è il numero totale di secondi in cui il sistema è stato attivo.
Il Secondo number è quanto di quel tempo la macchina ha trascorso inattiva, in secondi.
Solo per completezza... di cosa si tratta:
$ uptime -p
up 2 weeks, 3 days, 14 hours, 27 minutes