Я хочу отобразить /proc/uptime
в хорошем формате как:
DD:HH:MM:SS
/proc/uptime
дайте мне время системы в секундах, есть ли стандартное решение, которое конвертирует секунды в этот формат?
Вот способ без perl
:
awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}' /proc/uptime
\n
для новой строки было бы хорошо!Вы можете сделать это, например, с помощью Perl и некоторой простой математики:
Если вам не нужны секунды, вы можете просто запустить
uptime
команду. Затем его выходной сигнал может быть просто преобразован в DD: HH: MM.Например, используя (работает таким образом, только если uptime> 1h)
источник
Нет, потому что это не очень сложная проблема. Разделите количество секунд на 86400, используя целочисленное деление, чтобы получить количество дней. Возьмите остаток и разделите его на 3600, чтобы получить количество часов. Разделите остаток от этого на 60, чтобы получить количество минут, и у вас останется количество секунд. Все это выполнимо из оболочки с помощью
expr
команды, если ваша оболочка достаточно древняя, чтобы изначально не поддерживать арифметикуВзятие количества секунд с начала эпохи и превращение их в удобочитаемую дату - сложная проблема, и поэтому существуют стандартные способы сделать это, например,
date -r SECONDS
из оболочки. Но это другая проблема.источник
Адаптация соответствующей части этого ответа .
До тех пор, пока вы работаете менее года, вы можете использовать следующую команду:
Я извлекаю первое поле файла uptime, так как, по крайней мере, в моем Linux есть второе поле, содержащее общее время простоя. Я рассматриваю это как количество секунд, прошедших с начала эпохи, и преобразовываю их в день года с последующим временем в часах, минутах и секундах. Так как день года начинается в один, я вычитаю один из них в моем последнем
awk
обращении.источник
Преобразование секунд с начала эпохи в дату и время:
источник