私はtune2fsを使用してLinuxディストリビューションのインストールの経過時間を判断していますが、タイムゾーンがわからないと、その日付はあまり役に立ちません。私が使用している正確なコマンドは ここ からです。ここではわかりやすくするためです。
Sudo tune2fs -l /dev/sda3 | grep created | sed 's/.*created\:\s*//g'
ただし、出力は次の形式です。
Fri Jun 23 23:59:22 2017
記載されているタイムゾーンがないことに注意してください。ただし、date
は次の形式の出力を返します。
Sun Jul 23 17:58:18 AEST 2017
タイムゾーンAESTがどのように言及されているかに注目してください。 tune2fs
のマニュアルページを読みました。 Webブラウザの検索ユーティリティを使用して「日付」、「作成済み」、「時刻」を検索しましたが、日付形式のタイムゾーンについての言及が1つも見つかりませんでした。または、手動で設定する方法があるかどうかそれ。 DuckDuckGoで「tune2fsdate」と「tune2fstimezone」を検索しましたが、上位5つの結果を確認しましたが、関連するものは見つかりませんでした。
日付は、作成時のローカルシステムのタイムゾーンに表示されているようです。
例えば私の/ bootパーティションはraid-1(/ dev/md0)のext4で、昨年ブートドライブを4つのSSDに交換し、ZFSでrootに変換したときに作成されました。緊急時に備えて/ bootext4パーティションを保持しました。
# tune2fs -l /dev/md0 | sed -n -e 's/.*created\:\s*//gp'
Sat Oct 8 16:38:45 2016
# TZ=UTC tune2fs -l /dev/md0 | sed -n -e 's/.*created\:\s*//gp'
Sat Oct 8 05:38:45 2016
私もオーストラリアの東海岸(メルボルン)にいます。16:38と05:38の差は11時間です。これは、AEDTにとって正しいことです(夏時間調整は、それを監視している州では10月に始まります)。
ところで、grepの出力をsedまたはawkにパイプする必要はほとんどありません。どちらもすでに正規表現パターンの一致を実行できます。 awkの例は次のようになります。
# tune2fs -l /dev/md0 | awk -F': +' '/created/ {print $2}'
Sat Oct 8 16:38:45 2016
時刻は、カレンダーの日付としてではなく、Unixエポック時刻( スーパーブロック のs_mkfs_time
を参照)として保存されるため、タイムゾーンに依存しません。
表示するとき、tune2fs
はそれをカレンダー/人間の日付に変換して、タイムゾーンで意味のある表現を提供します。
UTCで時刻を取得するには、次のコマンドで実行します。
TZ=UTC0 LC_ALL=C tune2fs -l /dev/sda3 |
sed -n 's/^Filesystem created: *//p'
これは、タイムゾーンがUTC(UTCからのオフセットが0)であることをtune2fs
に伝えています。
LC_ALL = Cを追加して、Filesystem created
が英語で返され、ユーザーのロケールに関係なく、日付が引き続き米国英語スタイルで表示されるようにしました(e2fsprogs
が国際化されている場合)未来)。
S_mkfs_time
はスーパーブロック内のオフセット0x108にあり、スーパーブロックはブロックデバイス内のオフセット0x400から始まるため、そのエポック時間を手動で取得することもできます。
od -vAn -j 0x508 -N4 < /dev/sda3
そしてそれをあなたが好きなフォーマットに変換してください:
$ date --iso-8601=s -d "@$(od -An -j0x508 -N4 -tu4 < /some/device)"
2017-07-23T12:20:22+01:00
$ date -u --iso-8601=s -d "@$(od -An -j0x508 -N4 -tu4 < /some/device)"
2017-07-23T11:20:22+00:00