9
votes

/ proc / disponibilité dans Mac OS X

J'ai besoin exacte de la même sortie que "CAT / PROC / UPTIME" DE LINUX ".

Par exemple, avec / proc / uptime, vous obtiendriez

1884371.64 38646169.12

mais avec une alternative Mac, comme "Uptime", vous obtiendriez

20:25 20:26, 6 utilisateurs, moyennes de charge: 3.19 2.82 2.76

J'en ai besoin d'être exactement comme Cat / Proc / Uptime, mais sur Mac OS X.


0 commentaires

4 Réponses :


6
votes

là-bas n'est tout simplement aucun répertoire "/ proc" sur le Macintosh.

sur macos, vous pouvez Faites une commande comme : xxx

et vous obtiendrez une réponse comme: xxx


2 commentaires

Donc, je devrais utiliser 'Cut' pour supprimer les premières lettres X, qui serait "kern.boottime: {sec ="? J'ai aussi besoin de supprimer le reste ... Je commence sur ce genre de choses.


Il y a aussi " sysctl -n kern.boottime ", qui se débarrasse de " kern.boottime " bit. La variable BOOTTIME est une structure et je ne peux pas voir un moyen facile intégré à la commande SYSCTL pour obtenir les variables dans la structure.



7
votes

obtenu ... xxx

puis je viens de convertir au format lisible (ne vous rappelez pas comment):

1 jours 00:26:28


3 commentaires

Puisque je n'aime pas simplement couper sur les limites dures (en cas de mise en page des modifications de sortie), j'ai opté pour les éléments suivants: tandis que ifs = '=', listre -d "," valeur clé; do Eval "boot_time_ $ clé = '$ valeur'" 2> / dev / null; fait <<< $ (SYSCTL -N -N KERN.BOOTTime | SED 'S /^.*///; S /AC.*.*$//'), vous pouvez alors simplement tirer la valeur dont vous avez besoin de boot_time_sec et peut le convertir avec quelque chose comme date -jf '% s' "$ s '" $ boot_time_sec "


Un petit problème avec cette réponse. Votre Cut obtient des caractères entre des positions fixes (de 14 à 18). Cela a travaillé dans votre cas parce que votre système n'était pas debout depuis longtemps, mais pour moi cela a causé des problèmes. J'ai changé la commande couper pour corriger ce petit problème. sysctl -n kern.boottime | CUT -F4 -D '' | Cut -D ',' -F1 .


Si vous voulez la disponibilité dans secondes sur Mac, vous pouvez utiliser ts_boot = `sysctl -n kern.boottime | Cut -D "" -f4 | Cut -D "," -f1`; ts_now = `date +% s`; echo $ (($ tts_now- $ ts_boot));



3
votes
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
Will return something like 
1 Day, 20 hours, 10 minutes, 55 seconds

1 commentaires

J'écris un script shell pour MacOS et je dois obtenir des heures de disponibilité en quelques secondes. C'est vraiment utile.



0
votes

Voici ce que je fais pour obtenir les valeurs au lieu de la méthode de coupe xxx pré>

où 5 $ est la plage de la chaîne p>

exemple p>

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


0 commentaires