システムが起動したタイムスタンプを確実に取得する方法は?


12

私はuptimeコマンドを知っていますが、ブート後の秒数を返しますので、現在のタイムスタンプからその数値を差し引くだけで、理論的には、稼働時間と現在のタイムスタンプを読み取った後に2番目の変更があった場合、異なる結果を得ることができます。uptime -s私が欲しいものですが、centosでは利用できません(どのように計算されますか?)。/ proc dirのctimeを取得できますか?これは私に適切な数を与えるようですが、すべてのLinuxシステムがブート時に作成された/ procを持っているのだろうかと思います。


どのフォーマットが必要ですか?HH:MM:SS?他に何か?
テルドン

1
@terdon、UNIXタイムスタンプ
ふわふわ

回答:


12

まず第一に、crtimeあるLinuxのトリッキー。とはいえ、次のようなものを実行する

$ stat -c %z /proc/ 
2014-10-30 14:00:03.012000000 +0100

または

$ stat -c %Z /proc/ 
1414674003

おそらくまさにあなたが必要とするものです。/procファイルシステムは、標準LFSによって定義され、任意のLinuxシステムのためだけでなく、そこにあるべきほとんどの(すべての?)UNIXen。

あるいは、秒の精度は本当に必要ないが、正しいタイムスタンプだけが必要であると仮定すると、次を使用できますwho

$ who -b
   system boot  2014-10-30 14:00

From man who:-b、-最後のシステムブートのブート時間

GNUを使用して、エポックからの秒数に変換できますdate

$ date -d "$(who -b | awk '{print $4,$3}' | tr - / )" +%s
1414674000

1
軽微な警告は、ブート時間はRTCから決定されることです。RTCがない場合はデフォルトが使用されます。この時間はutmp(initによって)「システムブート」エントリとして書き込まれ、によって読み取られwho -bます。起動するまでシステム時間が間違っている可能性があります。who -b私のrPiには1970年に起動し、別のRTCなしのARMは2008年だと言っています
;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.