文件时间戳之间的关系

文件时间戳之间的关系

如果我是对的:

  • atime是最后一次读取/访问文件的时间。

  • mtime是文件内容最后一次修改的时间。

  • ctime是文件的索引节点最后一次更改的时间。

问题:

  1. 如果文件的内容存储在其 inode 之外,则更改其内容会将 mtime 更改为当前,但这会将其 ctime 和 atime 更改为当前吗?

  2. 如果我们更改存储在其 inode 中的文件属性,则会将 ctime 更改为当前,但这会更改 mtime 和 atime 为当前吗?

  3. 更改与文件相关的任何内容(例如其内容、属性或索引节点)是否也会更改时间?

答案1

正如@Celada 所说,这真的很容易测试。

但需要注意的是:ctime是最后一次更改 inode 信息(inode 编号未更改)。

所以:

  1. 如果文件的内容存储在其 inode 之外,则更改其内容会将 mtime 更改为当前,但这会将其 ctime 和 atime 更改为当前吗?

如果您更改内容,mtime不仅会更改,而且还会更改,ctime因为文件的时间戳(可能还有其大小)会更新,并且这些信息存储在 inode 中。

另外,假设这是一个文本文件,并且您使用 修改其内容vi,因此atime也会更新,因为显然vi会在显示文件之前读取该文件。

例子:

$ touch file1

$ stat file1
    Access: 2015-05-06 19:11:41.887622158 +0200
    Modify: 2015-05-06 19:11:41.887622158 +0200
    Change: 2015-05-06 19:11:41.887622158 +0200

$ echo "hello" >> file1

$ stat file1
    Access: 2015-05-06 19:11:41.887622158 +0200
    Modify: 2015-05-06 19:12:27.816047883 +0200
    Change: 2015-05-06 19:12:27.816047883 +0200
  1. 如果我们更改存储在其 inode 中的文件属性,则会将 ctime 更改为当前,但这会更改 mtime 和 atime 为当前吗?

如果仅更改文件的属性,则仅存储在 inode 中的信息会更改,所以是的,只会ctime更改。

$ stat file2
Access: 2015-05-06 19:28:09.378880724 +0200
Modify: 2015-05-06 19:28:09.378880724 +0200
Change: 2015-05-06 19:28:09.378880724 +0200

$ chmod 700 file2

$ stat file2
Access: 2015-05-06 19:28:09.378880724 +0200
Modify: 2015-05-06 19:28:09.378880724 +0200
Change: 2015-05-06 19:30:24.679022346 +0200
  1. 更改与文件相关的任何内容(例如其内容、属性或索引节点)是否也会更改时间?

正如我在第一个问题中所说,如果您不需要读取文件来更改这些信息,则atime不会更改。

答案2

你还需要两句话:

  • atime仅当您阅读、打开或触摸文件时才会更改。

  • ctime当文件内容改变时也会改变。

考虑到这些,我们可以轻松回答您的问题:

  1. 如果文件的内容存储在其 inode 之外,则更改其内容会将 mtime 更改为当前,但这会将其 ctime 和 atime 更改为当前吗?

它将改变ctime,而不是atime

  1. 如果我们更改存储在其 inode 中的文件属性,则会将 ctime 更改为当前,但这会更改 mtime 和 atime 为当前吗?

不,它不会改变mtime并且atime

  1. 更改与文件相关的任何内容(例如其内容、属性或索引节点)是否也会更改时间?不,atime仅当您阅读、打开或触摸文件时才会更改。

要记住的事情:

  • atime只有当你改变时,打开, 或者触碰文件。
  • ctimemtime将更新为与ifmtime已更新相同。
  • 改变ctime可能会改变,也可能不会改变mtime,也可能不会改变atime

相关内容