ctime 如何变化?

ctime 如何变化?

我试图准确了解文件的 ctime 时间戳何时发生变化。在许多地方(例如,在这里接受的答案中) 有人认为文件属性的任何更改也会更改 ctime。然而,这似乎不是真的,至少在我的 Ubuntu 12.04 上是这样(是的,我知道,有点旧了……):

cat file.txt > /dev/null

改变了atime,所以它会改变文件属性(在文件inode中),但不会改变ct​​ime。

其他来源(例如,这里这里) 表明只有对文件属性的某些操作才会真正改变 ctime,但并未提供精确的列表。

在哪里可以找到有关哪些操作改变 ctime 的精确参考?

答案1

Unix 系统上有三种时间戳:

  • atime:访问时间

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

  • ctime:更改时间

    此时间戳会告诉您文件属性(inode 信息)已改变最后一次。这包括所有权和权限,但内容更改也会触发此时间戳的更新。

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

    我不确定,但有些人认为这种行为(对 atime 的更改不会更新 ctime)仅仅是由于relatime底层文件系统的挂载选项(如)在内存中缓存和延迟 inode 中的 atime 更新,以提高内存性能,并且仅在某些条件下将它们应用于磁盘上的实际 inode(触发 ctime 更新)。
    @kos 尝试过了,显然即使使用“strictatime”选项安装 FS,如果 atime 发生变化,ctime 似乎也永远不会更新。

  • mtime:修改时间

    此时间戳会告诉您文件的内容已修改最后一次。


因此,使用简单的读取访问cat FILENAME只会更改时间,但不是时间因为没有修改任何文件属性。更改后的时间不算数。

相关内容