Je souhaite afficher /proc/uptime
au format puits comme:
DD:HH:MM:SS
/proc/uptime
donnez-moi le temps du système en secondes, existe-t-il une solution standard qui convertit les secondes en ce format?
Je souhaite afficher /proc/uptime
au format puits comme:
DD:HH:MM:SS
/proc/uptime
donnez-moi le temps du système en secondes, existe-t-il une solution standard qui convertit les secondes en ce format?
Réponses:
Vous pouvez le faire par exemple avec perl et quelques calculs simples:
cat /proc/uptime | perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/3600),int(($1%3600)/60),$1%60'
Si vous n'avez pas besoin des secondes, vous pouvez simplement exécuter la uptime
commande. Sa sortie peut alors être simplement transformée en DD: HH: MM.
Par exemple, utiliser (ne fonctionne de cette façon que si le temps de disponibilité> 1 h)
uptime | perl -ne '/(\d*) day[^\d]*(\d*):(\d*)/ ; printf "%02d:%02d:%02d\n", $1, $2, $3'
Non, car ce n'est pas vraiment un problème difficile. Divisez le nombre de secondes par 86400 en utilisant la division entière pour obtenir le nombre de jours. Prenez le reste et divisez-le par 3600 pour obtenir le nombre d'heures. Divisez le reste par 60 pour obtenir le nombre de minutes, et vous vous retrouvez avec le nombre de secondes. Tout cela est réalisable depuis le shell en utilisant la expr
commande si votre shell est assez ancien pour ne pas supporter nativement l'arithmétique
Prendre le nombre de secondes écoulées depuis l'époque et en faire une date lisible par l'homme est un problème difficile, et il existe donc des moyens standard de le faire, par exemple à date -r SECONDS
partir de la coque. Mais c'est un problème différent.
Adapter la partie pertinente de cette réponse .
Tant que votre disponibilité est inférieure à un an, vous pouvez utiliser la commande suivante:
TZ=UTC date -d@$(cut -d\ -f1 /proc/uptime) +'%j %T' | awk '{print $1-1"d",$2}'
J'extrais le premier champ du fichier de disponibilité, car au moins sur mon Linux, il y a un deuxième champ contenant le temps d'inactivité total. Je considère cela comme le nombre de secondes écoulées depuis l'époque et je le convertis en jour de l'année suivi du temps en heures, minutes et secondes. Puisque le jour de l'année commence à un, j'en soustrais un dans mon awk
invocation finale .
$ s=12345678
$ printf '%d:%02d:%02d:%02d\n' $((s/86400)) $((s/3600%24)) $((s/60%60)) $((s%60))
142:21:21:18
Conversion des secondes depuis l'époque en une date et une heure:
$ gdate -d @1234567890 '+%F %T' # GNU date
2009-02-14 01:31:30
$ date -r 1234567890 '+%F %T' # BSD date
2009-02-14 01:31:30
\n
pour newline serait bien!