Я хочу отобразить /proc/uptime
в хорошем формате как:
DD:HH:MM:SS
/proc/uptime
дайте мне время системы в секундах, есть ли стандартное решение, которое конвертирует секунды в этот формат?
Я хочу отобразить /proc/uptime
в хорошем формате как:
DD:HH:MM:SS
/proc/uptime
дайте мне время системы в секундах, есть ли стандартное решение, которое конвертирует секунды в этот формат?
Ответы:
Вы можете сделать это, например, с помощью Perl и некоторой простой математики:
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'
Если вам не нужны секунды, вы можете просто запустить uptime
команду. Затем его выходной сигнал может быть просто преобразован в DD: HH: MM.
Например, используя (работает таким образом, только если uptime> 1h)
uptime | perl -ne '/(\d*) day[^\d]*(\d*):(\d*)/ ; printf "%02d:%02d:%02d\n", $1, $2, $3'
Нет, потому что это не очень сложная проблема. Разделите количество секунд на 86400, используя целочисленное деление, чтобы получить количество дней. Возьмите остаток и разделите его на 3600, чтобы получить количество часов. Разделите остаток от этого на 60, чтобы получить количество минут, и у вас останется количество секунд. Все это выполнимо из оболочки с помощью expr
команды, если ваша оболочка достаточно древняя, чтобы изначально не поддерживать арифметику
Взятие количества секунд с начала эпохи и превращение их в удобочитаемую дату - сложная проблема, и поэтому существуют стандартные способы сделать это, например, date -r SECONDS
из оболочки. Но это другая проблема.
Адаптация соответствующей части этого ответа .
До тех пор, пока вы работаете менее года, вы можете использовать следующую команду:
TZ=UTC date -d@$(cut -d\ -f1 /proc/uptime) +'%j %T' | awk '{print $1-1"d",$2}'
Я извлекаю первое поле файла uptime, так как, по крайней мере, в моем Linux есть второе поле, содержащее общее время простоя. Я рассматриваю это как количество секунд, прошедших с начала эпохи, и преобразовываю их в день года с последующим временем в часах, минутах и секундах. Так как день года начинается в один, я вычитаю один из них в моем последнем awk
обращении.
\n
для новой строки было бы хорошо!