/proc/uptime
次のような素晴らしい形式で表示したいと思います。
DD:HH:MM:SS
/proc/uptime
システム時間を秒単位で教えてください。秒をこの形式に変換する標準的なソリューションはありますか?
答え1
なしで行う方法は次のとおりですperl
。
awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}' /proc/uptime
答え2
たとえば、Perlといくつかの簡単な数学を使用してこれを行うことができます。
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'
数秒が必要ない場合は、uptime
コマンドを実行してください。その後、その出力をDD:HH:MMに簡単に変換できます。
たとえば、次のようにします(稼働時間が1時間を超える場合にのみこの方法で機能します)。
uptime | perl -ne '/(\d*) day[^\d]*(\d*):(\d*)/ ; printf "%02d:%02d:%02d\n", $1, $2, $3'
答え3
いいえ、あまり難しい質問ではないからです。整数除算を使用して秒数を86400で除算して日数を取得します。残りを3600で割って時間数を求めます。残りを60で割って分数を求め、残りは秒数です。expr
シェルが十分に古く、デフォルトで算術をサポートしていない場合、これらの操作はすべて次のコマンドを使用してシェルで実行できます。
エポックの後に秒を取り、人が読める日付に変換します。はいdate -r SECONDS
これは難しい問題なので、シェルで実行するのと同じ標準的な方法があります。しかし、それは別の質問です。
答え4
$ s=12345678
$ printf '%d:%02d:%02d:%02d\n' $((s/86400)) $((s/3600%24)) $((s/60%60)) $((s%60))
142:21:21:18
epoch 以降の秒を日付と時刻に変換します。
$ 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