我正在阅读有关 UNIX(特别是 OS X Mavericks)man
的页面ls
。这引起了我的兴趣:
如果文件的修改时间在过去或将来超过 6 个月,则将显示上次修改的年份来代替小时和分钟字段。
为什么有人会把修改时间设置为未来呢?
答案1
这一切都取决于参考点。也许不是文件的修改时间是未来的,也许是查看文件的用户生活在过去?
否则,文件系统可用于存储任意数据,并且文件可以具有任意属性(例如在xattr
OS X 上),因此,也许有人想在文件系统中存储类似日历的数据,并通过修改时间属性表示事件?
答案2
用户可以自由地将文件的修改时间设置为任何日期(至少在一个很大的范围内,通常是1901年到2038年)。未来的日期可能是由于用户的突发奇想或输入错误造成的。未来的日期也可能是文件系统损坏的结果。
然而,在几乎所有具体情况下,未来的日期都是时钟设置为错误日期的结果,无论是在写入文件的计算机上还是在您正在查看文件的计算机上。
特别是,在使用 NFS 或 Samba 等协议共享文件的网络上,经常会看到带有今天日期而不是时间的文件,但计算机之间的时钟不同步。如果文件的日期甚至是未来的一秒,它也会显示为未来的日期。
答案3
除了 cnst 答案之外,当文件通过 NFS 或 CIFS 存储在远程文件服务器共享上并且客户端和服务器时钟未通过 NTP 同步或其中之一已同步时,可能会发生将来的文件修改时间。时间正确但时区错误。
另请注意,此 ls 行为是 BSD / OS X 特定的,并且违反了 POSIX 标准。如果文件修改时间稍稍晚于未来,则大多数(如果不是全部)其他 Unixls
实现都会显示年份而不是时间。
BSD / OS Xls
手册页指出
如果文件的修改时间超过过去或未来6个月
如果改写一下,就不会那么含糊了:
如果文件的修改时间超过过去或未来6个月