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?
Oto sposób bez perl
:
awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}' /proc/uptime
\n
bo nowa linia byłaby dobra!Możesz to zrobić na przykład za pomocą Perla i prostej matematyki:
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)
źródło
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 natywniePoś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.źródło
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:
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.źródło
Konwertowanie sekund od epoki na datę i godzinę:
źródło