2013-03-11 25 views
6

Ho bisogno dello stesso output ESATTO di "cat/proc/uptime" di Linux./proc/uptime in Mac OS X

Ad esempio, con/proc/uptime, si otterrebbe

1884371,64 38646169,12

ma con alcuna alternativa Mac, come "uptime", si otterrebbe

20:25 su 20:26, 6 utenti, medie di carico: 3.19 2.82 2.76

Ho bisogno che sia esattamente come cat/proc/uptime, ma su Mac OS X.

risposta

6

Got it ...

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

Poi ho solo convertito che in formato leggibile (non ricordo come):

1 Giorni 00:26:28

+0

Dato che non mi piace tagliare semplicemente i confini rigidi (nel caso in cui il layout dell'output cambi), ho optato per quanto segue: 'while IFS = '=', leggi -d ',' valore chiave; eval "boot_time_ $ key = '$ value'" 2>/dev/null; done <<< $ (sysctl -n kern.boottime | sed 's /^.*{//; s /}.*$/,/') ', puoi semplicemente tirare il valore che ti serve da' boot_time_sec' e può convertirlo con qualcosa come 'date -jf '% s'" $ boot_time_sec "' – Haravikk

+1

Un piccolo problema con questa risposta. Il tuo 'taglio' sta ottenendo personaggi tra posizioni fisse (da 14 a 18). Questo ha funzionato nel tuo caso perché il tuo sistema non funzionava da molto tempo, ma per me questo ha causato problemi. Ho modificato il comando 'cut' per risolvere questo piccolo problema. 'sysctl -n kern.boottime | cut -f4 -d '' | cut -d ',' -f1'. – Jibran

3

Semplicemente non esiste una directory "/ proc" su Macintosh.

On MacOS, you can do a command like:

sysctl kern.boottime 

e si otterrà una risposta come:

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

Quindi dovrei usare 'taglio' per rimuovere il primo x lettere, che sarebbe "kern.boottime: {sec ="? Ho anche bisogno di rimuovere il resto ... Sto iniziando con questo tipo di cose. – rtainc

+1

c'è anche "' sysctl -n kern.boottime' ", che elimina il bit" 'kern.boottime'". La variabile boottime è una struct e non riesco a vedere un modo semplice incorporato nel comando sysctl per ottenere le variabili all'interno della struct. –

-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 

Tornerà qualcosa come 1 giorno, 20 ore, 10 minuti, 55 secondi