ctime如何变化?


8

我试图精确地了解文件的ctime时间戳何时更改。在许多地方(例如,在此处接受的答案),建议文件属性的任何更改也将更改ctime。但是,这似乎不正确,至少在我的Ubuntu 12.04上是这样(是的,我知道,有点旧了...):

cat file.txt > /dev/null

更改atime,因此它更改文件属性(在文件inode中),但不更改ctime。

其他来源(例如,herehere)建议仅对文件属性执行的某些操作实际上会更改ctime,但未提供精确列表。

在哪里可以找到关于哪些操作会更改ctime的精确参考?


也许问题与有关cat,您是否与之进行了检查touch
马赫迪

Answers:


8

Unix系统上有三个时间戳记:

  • atime:访问时间

    此时间戳告诉您上次访问文件的时间,包括仅读取访问权限。

  • ctime:更改时间

    该时间戳告诉您文件属性(inode信息)上次更改的时间。这包括例如所有权和权限,但是内容更改也会触发此时间戳的更新。

    请注意,对atime的更改似乎是一个例外,因为它们不会触发ctime更新。这可能是因为足以触发atime更新的简单读取访问不会对文件属性进行任何相关更改。ctime的主要目的之一是帮助备份工具确定文件是否已更改。对于这样的工具,atime是无关紧要的信息,而更新备份只是为了更新更改的时间,因为有人读取了该文件将是无用的。

    我不确定,但是有些人认为此行为(更改为atime不会更新ctime)仅是由于relatime基础文件系统的挂载选项(如)导致的,由于内存中的性能原因,该文件系统在inode中缓存和延迟了atime更新并且仅在某些情况下将它们应用于磁盘上的实际inode(触发ctime更新)。
    @kos尝试了它,显然即使使用`strictatime``选项挂载FS时,如果atime更改,ctime似乎也不会更新。

  • mtime:修改时间

    此时间戳告诉您上次修改文件内容的时间。


因此,cat FILENAME仅使用atime即可进行简单的读取访问,而不会更改ctime,因为没有更改文件属性。更改后的atime不计。


正是这一点:为什么改变的时间不计算在内?它不是文件属性吗?
VeryHardCoder

@VeryHardCoder我试图在这一点上详细说明我的答案,并添加了一些解释。
字节指挥官
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.