私のLinuxシステムでは、現在の日付「t1」を表示し、「f」ファイルをタッチしてから、その「f」の修正時間「t2」を表示すると、t1 < t2になると予想されます。
しかし、私のシステムでこれを行うとき、必ずしもそのような結果を得るわけではありません。
date +'%Y-%m-%d %H:%M:%S.%N'; \
touch f; \
stat -c %y f
出力例:
2017-09-18 21:47:48.855229801
2017-09-18 21:47:48.853831698 +0200
2番目のタイムスタンプ(統計)は最初のタイムスタンプ(日付)より前です:855229801> 853831698
私のファイルシステムはext4ですが、同じ効果でtmpfsのファイルを試してみました。なぜですか?
ありがとう
設定に関するいくつかの情報
% which date
/usr/bin/date
% which touch
/usr/bin/touch
% pacman -Qo /usr/bin/date /usr/bin/touch
/usr/bin/date is owned by coreutils 8.28-1
/usr/bin/touch is owned by coreutils 8.28-1
% uname -a
Linux machine 4.12.12-1-ARCH #1 SMP PREEMPT Sun Sep 10 09:41:14 CEST 2017 x86_64 GNU/Linux
% findmnt
TARGET SOURCE FSTYPE OPTIONS
/ /dev/sda1 ext4 rw,relatime,data=ordered
└─/tmp tmpfs tmpfs rw,nosuid,nodev
ベストアンサー1
すべてhttps://stackoverflow.com/questions/14392975/timestamp-accuracy-on-ext4-sub-millsecond:
ext4ファイルシステムコードは
current_fs_time()
現在キャッシュされているカーネル時間を呼び出し、ファイルシステムスーパーブロックで指定された時間単位(ext4の場合は1ns)に切り捨てられます。Linuxカーネルの現在時刻はキャッシュされ、通常タイマーが中断されたときにのみ更新されます。したがって、タイマー割り込みが10ミリ秒で実行されると、キャッシュ時間は10ミリ秒ごとに更新されます。更新が発生すると、結果の時間の正確さは、ハードウェアで使用可能なクロックソースに依存します。