/ proc / uptime в Mac OS X

Мне нужен ТОЧНЫЙ тот же результат, что и у Linux "cat / proc / uptime".

Например, с / proc / uptime вы получите

1884371.64 38646169.12

но с любой альтернативой Mac, например "время безотказной работы", вы получите

20:25 до 20:26, 6 пользователей, средняя нагрузка: 3,19 2,82 2,76

Мне нужно, чтобы он был в точности как cat / proc / uptime, но в Mac OS X.


person Ryan    schedule 11.03.2013    source источник


Ответы (4)


Понятно...

$sysctl -n kern.boottime | cut -c14-18
87988

Затем я просто преобразовал это в читаемый формат (не помню, как):

1 дн. 00:26:28

person Ryan    schedule 14.03.2013
comment
Поскольку мне не нравится просто сокращать жесткие границы (в случае изменения макета вывода), я выбрал следующее: while IFS=' =', read -d ',' key value; do eval "boot_time_$key='$value'" 2>/dev/null; done <<< $(sysctl -n kern.boottime | sed 's/^.*{//;s/}.*$/,/'), затем вы можете просто вытащить нужное значение из boot_time_sec и преобразовать его с помощью чего-то вроде date -jf '%s' "$boot_time_sec" - person Haravikk; 25.09.2014
comment
Одна небольшая проблема с этим ответом. Ваш cut получает символы между фиксированными позициями (с 14 по 18). В вашем случае это сработало, потому что ваша система долгое время не работала, но для меня это вызвало проблемы. Я изменил команду cut, чтобы исправить эту небольшую проблему. sysctl -n kern.boottime | cut -f4 -d' ' | cut -d',' -f1. - person Jibran; 25.12.2015
comment
Если вы хотите, чтобы время безотказной работы на Mac составляло секунды, вы можете использовать ts_boot=`sysctl -n kern.boottime | cut -d" " -f4 | cut -d"," -f1`; ts_now=`date +%s`; echo $(($ts_now-$ts_boot)); - person carpii; 01.01.2021

На Macintosh просто нет каталога "/ proc".

В MacOS вы можете выполнить такую ​​команду, как:

sysctl kern.boottime 

и вы получите такой ответ:

kern.boottime: { sec = 1362633455, usec = 0 } Wed Mar  6 21:17:35 2013
person Michael Dautermann    schedule 11.03.2013
comment
Поэтому я должен использовать 'cut', чтобы удалить первые буквы x, что будет kern.boottime: {sec =? Мне также нужно удалить остальное ... Я начинаю с таких вещей. - person Ryan; 11.03.2013
comment
есть также sysctl -n kern.boottime, который избавляется от бита kern.boottime. Переменная времени загрузки - это структура, и я не вижу простого способа, встроенного в команду sysctl, для получения переменных внутри структуры. - person Michael Dautermann; 11.03.2013

boottime=`sysctl -n kern.boottime | awk '{print $4}' | sed 's/,//g'`
unixtime=`date +%s`
timeAgo=$(($unixtime - $boottime))
uptime=`awk -v time=$timeAgo 'BEGIN { seconds = time % 60; minutes = int(time / 60 % 60); hours = int(time / 60 / 60 % 24); days = int(time / 60 / 60 / 24); printf("%.0f days, %.0f hours, %.0f minutes, %.0f seconds", days, hours, minutes, seconds); exit }'`
echo $uptime

Вернет что-то вроде 1 день, 20 часов, 10 минут, 55 секунд.

person ZedicusZZ    schedule 18.07.2013
comment
Я пишу сценарий оболочки для macOS, и мне нужно время безотказной работы за секунды. Это действительно полезно. - person ERU; 06.03.2019

Вот что я делаю, чтобы получить значения вместо метода Cut

sysctl kern.boottime | awk '{print $5}'

Где $ 5 - это диапазон строки

Пример

$1 Gives you "sysctl kern.boottime"
$2 Gives you "{"
$3 Gives you "sec"

из строки

kern.boottime: { sec = 1604030189, usec = 263821 } Fri Oct 30 09:26:29 2020
person iOSDeveloper    schedule 03.11.2020