我通过 ssh 连接到我大学的 Linux 服务器 (RHEL 7)。事情是这样的。它与 'ls' 和“旧”文件有关。
主目录:
$ touch -d '1918-11-11 11:00 GMT' wwi-armistice
$ touch now
$ sleep 1
$ touch now1
$ TZ=UTC0 ls -lt --full-time wwi-armistice now now1
-rw-r--r-- 1 tsai csugrad 0 2054-12-17 17:28:16.000000000 +0000 wwi-armistice
-rw-r--r-- 1 tsai csugrad 0 2018-05-04 22:07:10.743637000 +0000 now1
-rw-r--r-- 1 tsai csugrad 0 2018-05-04 22:06:59.992632000 +0000 now
tmp 目录:
$ tmp=$(mktemp -d)
$ cd $tmp
$ touch -d '1918-11-11 11:00 GMT' wwi-armistice
$ touch now
$ sleep 1
$ touch now1
$ TZ=UTC0 ls -lt --full-time wwi-armistice now now1
-rw-r--r-- 1 tsai csugrad 0 2018-05-04 23:04:27.031485854 +0000 now1
-rw-r--r-- 1 tsai csugrad 0 2018-05-04 23:04:22.907373125 +0000 now
-rw-r--r-- 1 tsai csugrad 0 1918-11-11 11:00:00.000000000 +0000 wwi-armistice
我知道第一个输出显示 2054 年第一次世界大战停战的原因与 Unix 时间的有符号 32 位到无符号 32 位转换有关。如果有人可以证实这一点并解释原因(nfs 之类的东西?),那就太好了。
我的第二个更大的问题是:为什么当我在 tmp 目录中执行此示例时,wwi-armistice 会正确列出?
请记住,我对网络实际上一无所知,因此基本的解释会有所帮助。
答案1
如果您可以识别这里使用的文件系统及其挂载选项,这可能会有所帮助。
mount
将显示文件系统层次结构和挂载时间选项。
stat -f --format="%T" $file
将打印指定文件的文件系统类型。我怀疑 /tmp 版本的结果与(可能)您的主目录中的结果不同。
一旦您了解了特定的文件系统及其已安装的选项,您就可以研究它的时间戳限制,但我认为您已经了解了它的要点:第一个文件系统在其时间戳字节分配中没有足够的数字范围来表示 1918 年的日期,而第二个文件系统有。