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

请注意,第二个时间戳 (stat) 在第一个时间戳 (date) 之前: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 毫秒更新一次。当更新确实发生时,结果时间的准确性将取决于硬件上可用的时钟源。

相关内容