Я хочу отобразить время, прошедшее с последней загрузки системы, используя uptime
, но я не хочу, чтобы оно отображало всю эту информацию. Я просто хочу знать, сколько часов прошло с момента последней загрузки системы (т.е.: 18:17:59)
Чтобы получить время, прошедшее с последней загрузки системы в формате hh:mm:ss
, вы можете использовать: псевдо-файл
awk '{print int($1/3600)":"int(($1%3600)/60)":"int($1%60)}' /proc/uptime
/proc/uptime
содержит два числа:
Таким образом, используя awk
, вы можете взять первое число и преобразовать его в формат hh:mm:ss
.
Чтобы узнать время безотказной работы в секундах:
awk '{print $1}' /proc/uptime
Чтобы узнать время безотказной работы в минутах:
echo $(awk '{print $1}' /proc/uptime) / 60 | bc
Чтобы узнать время безотказной работы в часах:
echo $(awk '{print $1}' /proc/uptime) / 3600 | bc
Чтобы получить х цифр точности вы можете добавить шкалу = х, например для х = 2
echo "scale=2; $(awk '{print $1}' /proc/uptime) / 3600" | bc
Попробуйте это:
uptime | awk '{ print $3 }'
Фактически, оно печатает третье слово строки, полученной из uptime
.
Тривиальная модификация для отображения дней:
awk '{print int($1/86400)"days "int($1%86400/3600)":"int(($1%3600)/60)":"int($1%60)}' /proc/uptime
Это отформатирует Ваш вывод как 2 нулевых дополнения:
awk '{printf("%02d:%02d:%02d",int($1/3600),int($1/3600/60),int($1%60))}' /proc/uptime
Для простых метрик мне иногда просто нужно INT часов:
#!/usr/bin/env -eux
upsince=$(date +%s -d "$(uptime -s)");
now=$(date +%s);
DIFF=$((now-upsince));
scale=2;
echo $((DIFF / 3600)))
ПРИМЕЧАНИЕ. Вы можете «+ 1» округлить до ближайшего полного часа