Я хочу відображати /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.
Наприклад, використання (працює таким чином, лише якщо тривалість> 1 год)
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
для нового рядка було б добре!