Linux、Unix、Windows...访问/修改时间是否相对于系统时间?

Linux、Unix、Windows...访问/修改时间是否相对于系统时间?

我搜索过,但找不到正确的术语。

比如今天是星期五,而某个文件是在星期三修改的,那么当我将系统时间改为星期六时,该文件的修改时间还是保持为星期三,还是改为星期四?

这如何应用于其他操作系统?

答案1

系统时间是内核维护的时钟。更新文件时,文件的当前修改时间将更新为当前内核时间。文件时间以 UTC 为单位,以纪元秒数表示(从 1970 年 1 月 1 日起)。(这与 Windows 的做法并不完全一样 - 这是 Linux/UNIX 的做法)

因此,您可以摆弄系统时间并将其向后设置。您可以获取文件的未来日期,---一些较旧的文件系统不“喜欢”这样做。因此,更改系统时钟不会以任何方式改变现有的文件时间。只有使用更新文件时间的命令touch或实际更改文件或文件元数据的命令才能做到这一点。

您还可以通过滥用系统调用utime()和命令(例如)来获取文件的未来日期touch

这是一个 32 位系统,touch 命令使用超出 32 位日期算法的日期导致问题。UTC 秒数太大。

jmcnama@SNEDAP03 ~> ls -l t.lis
-rw-r--r--   1 jmcnama  other         68 Jun  4 10:17 t.lis


jmcnama@SNEDAP03 ~> touch -t 2099010100 t.lis
jmcnama@SNEDAP03 ~> ls -l t.lis
-rw-r--r--   1 jmcnama  other         68 Mar  1  2028 t.lis

答案2

请提供有关您所使用平台的更多详细信息,特别是操作系统和文件系统。

对于 Linux,它很可能会被存储为 UTC 时间戳(参见 Jim 的回答)。

在 Windows 上,如果你使用 NTFS,那么你会发现与 Linux 类似的行为,即时间戳基于 UTC。但它们使用不同的时代次。在 Linux 上存储为整数时,0表示1/1/1970。但在 Windows 上,0表示1/1/1601

如果你在 Windows 上使用 FAT 或 FAT32,请注意文件时间不是基于 UTC,而是基于当地的记录该时间的计算机的时区。这意味着夏令时转换日期可能存在歧义,如果您更改时区,或将文件带到不同时区的计算机(例如,通过 FAT32 格式的 USB 密钥),时间将被解释为时区。

您可以阅读更多有关 Windows 的详细信息这里

无论如何,时钟的滴答声或手动调整时钟不会以任何方式影响录制文件的时间戳。它只会影响新的文件。

相关内容