linux:タッチ日付精度

linux:タッチ日付精度

私の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ミリ秒ごとに更新されます。更新が発生すると、結果の時間の正確さは、ハードウェアで使用可能なクロックソースに依存します。

おすすめ記事