Chcę wyświetlać /proc/uptime
w dobrym formacie jako:
DD:HH:MM:SS
/proc/uptime
poświęć mi czas systemu w sekundach, czy istnieje standardowe rozwiązanie, które konwertuje sekundy na ten format?
Chcę wyświetlać /proc/uptime
w dobrym formacie jako:
DD:HH:MM:SS
/proc/uptime
poświęć mi czas systemu w sekundach, czy istnieje standardowe rozwiązanie, które konwertuje sekundy na ten format?
Odpowiedzi:
Możesz to zrobić na przykład za pomocą Perla i prostej matematyki:
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'
Jeśli nie potrzebujesz sekund, możesz po prostu uruchomić uptime
polecenie. Jego dane wyjściowe można następnie po prostu przekształcić na DD: GG: MM.
Na przykład używanie (działa w ten sposób tylko wtedy, gdy czas pracy> 1h)
uptime | perl -ne '/(\d*) day[^\d]*(\d*):(\d*)/ ; printf "%02d:%02d:%02d\n", $1, $2, $3'
Nie, ponieważ to nie jest naprawdę trudny problem. Podziel liczbę sekund przez 86400, używając podziału na liczby całkowite, aby uzyskać liczbę dni. Weź resztę i podziel ją przez 3600, aby uzyskać liczbę godzin. Podziel resztę tego przez 60, aby uzyskać liczbę minut, a pozostanie Ci liczba sekund. Wszystko to można wykonać z poziomu powłoki za pomocą expr
polecenia, jeśli jest ona wystarczająco stara, aby nie obsługiwać arytmetyki natywnie
Poświęcenie liczby sekund od epoki i przekształcenie jej w datę czytelną dla ludzi jest trudnym problemem, dlatego istnieją standardowe sposoby, aby to zrobić, np. date -r SECONDS
Z poziomu powłoki. Ale to inny problem.
Dostosowanie odpowiedniej części tej odpowiedzi .
Dopóki twój czas pracy jest krótszy niż rok, możesz użyć następującego polecenia:
TZ=UTC date -d@$(cut -d\ -f1 /proc/uptime) +'%j %T' | awk '{print $1-1"d",$2}'
Wyodrębniam pierwsze pole z pliku uptime, ponieważ przynajmniej w moim Linuksie jest drugie pole zawierające całkowity czas bezczynności. Traktuję to jako liczbę sekund od epoki i przeliczam na dzień roku, a następnie czas na godziny, minuty i sekundy. Ponieważ dzień roku zaczyna się o pierwszej, odejmuję jeden z tego w moim ostatnim awk
wywołaniu.
\n
bo nowa linia byłaby dobra!