2013-03-11 23 views
6

Potrzebuję EXACT tego samego wyjścia co "cat/proc/uptime" Linuksa./proc/uptime w systemie Mac OS X

Na przykład z/proc/uptime, to by dostać

1884371,64 38646169,12

ale z jakiejkolwiek alternatywy Mac, jak "czas pracy", którą można dostać

20:25 do 20:26, 6 użytkowników, średnie obciążenia: 3,19 2,82 2,76

Potrzebuję tego, aby być dokładnie jak cat/proc/uptime, ale na Mac OS X.

Odpowiedz

6

Got to ...

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

Wtedy właśnie konwertowane do formatu czytelnego że (nie pamiętam jak):

1 Dni 00:26:28

+0

Ponieważ nie lubię po prostu obcinać twardych granic (w przypadku zmiany układu wyjściowego), zdecydowałem się na: 'while IFS = '=', read -d ',' key value; do eval "boot_time_ $ key = '$ value'" 2>/dev/null; zrobione <<< $ (sysctl -n kern.boottime | sed 's /^.*{//; s /}.*$/,/') ', możesz wtedy po prostu wyciągnąć potrzebną wartość z' boot_time_sec' i można go przekonwertować z czymś takim, jak 'date -jf '% s'" $ boot_time_sec "' – Haravikk

+1

Jeden mały problem z tą odpowiedzią. Twoje 'cut' dostaje postacie pomiędzy ustalonymi pozycjami (od 14 do 18). To działało w twoim przypadku, ponieważ twój system nie działał przez dłuższy czas, ale dla mnie spowodowało to problemy. Zmieniłem polecenie 'cut', aby naprawić ten mały problem. 'sysctl -n kern.boottime | cut -f4 -d '' | cut -d ',' -f1'. – Jibran

3

Po prostu nie ma katalogu "/ proc" na komputerze Macintosh.

On MacOS, you can do a command like:

sysctl kern.boottime 

a dostaniesz odpowiedź w stylu:

kern.boottime: { sec = 1362633455, usec = 0 } Wed Mar 6 21:17:35 2013 
+0

więc powinien używać 'cut' aby usunąć pierwszy X litery, które byłyby "kern.boottime: {sec ="? Muszę też usunąć resztę ... Zaczynam od tego rodzaju rzeczy. – rtainc

+1

jest także "' sysctl -n kern.boottime ", który pozbywa się bitów" 'kern.boottime". Zmienna boottime jest strukturą i nie widzę łatwej metody wbudowanej w komendę sysctl, która pobiera zmienne wewnątrz struktury. –

-1
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 

Wrócimy coś 1 dzień, 20 godzin, 10 minut, 55 sekund

Powiązane problemy