Ich möchte in gutem /proc/uptime
Format anzeigen als:
DD:HH:MM:SS
/proc/uptime
Gib mir die Systemzeit in Sekunden. Gibt es eine Standardlösung, die Sekunden in dieses Format konvertiert?
Ich möchte in gutem /proc/uptime
Format anzeigen als:
DD:HH:MM:SS
/proc/uptime
Gib mir die Systemzeit in Sekunden. Gibt es eine Standardlösung, die Sekunden in dieses Format konvertiert?
Antworten:
Sie können dies zum Beispiel mit Perl und einigen einfachen Berechnungen tun:
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'
Wenn Sie die Sekunden nicht benötigen, können Sie den uptime
Befehl einfach ausführen . Seine Ausgabe kann dann einfach in DD: HH: MM umgewandelt werden.
Zum Beispiel mit (funktioniert nur so, wenn die Betriebszeit> 1 Stunde ist)
uptime | perl -ne '/(\d*) day[^\d]*(\d*):(\d*)/ ; printf "%02d:%02d:%02d\n", $1, $2, $3'
Nein, weil es kein wirklich schweres Problem ist. Teilen Sie die Anzahl der Sekunden durch 86400 mithilfe der Ganzzahldivision, um die Anzahl der Tage zu erhalten. Nehmen Sie den Rest und teilen Sie ihn durch 3600, um die Anzahl der Stunden zu erhalten. Teilen Sie den Rest durch 60, um die Anzahl der Minuten zu erhalten, und Sie haben die Anzahl der Sekunden übrig. All dies kann von der Shell aus mit dem expr
Befehl ausgeführt werden, wenn Ihre Shell alt genug ist, um Arithmetik nicht nativ zu unterstützen
Es ist ein schwieriges Problem, die Anzahl der Sekunden seit der Epoche zu nehmen und daraus ein von Menschen lesbares Datum zu machen. Daher gibt es Standardmethoden, um dies zu tun, z date -r SECONDS
. B. von der Shell aus. Aber das ist ein anderes Problem.
Anpassung des relevanten Teils dieser Antwort .
Solange Ihre Betriebszeit weniger als ein Jahr beträgt, können Sie den folgenden Befehl verwenden:
TZ=UTC date -d@$(cut -d\ -f1 /proc/uptime) +'%j %T' | awk '{print $1-1"d",$2}'
Ich extrahiere das erste Feld der Uptime-Datei, da zumindest unter Linux ein zweites Feld die gesamte Leerlaufzeit enthält. Ich behandle das als die Anzahl der Sekunden seit der Epoche und rechne das in den Tag des Jahres um, gefolgt von der Zeit in Stunden, Minuten und Sekunden. Da der Tag des Jahres um eins beginnt, subtrahiere ich bei meinem letzten awk
Aufruf einen davon.
$ s=12345678
$ printf '%d:%02d:%02d:%02d\n' $((s/86400)) $((s/3600%24)) $((s/60%60)) $((s%60))
142:21:21:18
Konvertieren von Sekunden seit der Epoche in Datum und Uhrzeit:
$ gdate -d @1234567890 '+%F %T' # GNU date
2009-02-14 01:31:30
$ date -r 1234567890 '+%F %T' # BSD date
2009-02-14 01:31:30
\n
für newline wäre gut!