什么算作文件修改或更改?

什么算作文件修改或更改?

重命名是否会影响文件修改或访问时间?是否有一个列表列出了哪些时间发生了变化?

答案1

影响文件的 mtime 的修改是文件数据的更改:写入非零字节数,或最终修改文件的截断。创建文件也会将其 mtime 设置为当前日期。假设文件未创建或截断,仅打开文件进行写入不会影响 mtime。

从文件读取(如果读取非零字节数)或执行文件将其 atime 设置为当前时间。仅仅打开文件进行读取不会影响 atime。在 Linux 上,这是现在大多数情况下默认禁用; mountatime选项恢复 atime 更新,而noatimemount 选项则完全禁用它们。

程序可以改变文件的mtime和atime;执行此操作的基本命令是touch.某些文件复制程序将副本设置为与原始文件相同的 mtime,例如cp -prsync -t

影响文件 ctime 的更改是文件元数据的更改:权限、所有者、时间、链接计数等。重命名文件也会更新其 ctime。文件数据的更改也会影响 ctime,但从文件读取即使更改 atime,也不会更改 ctime。除了将 ctime 设置为当前时间之外,不可能以任何方式更改 ctime(即使 root 也受到限制,但 root 可以通过首先更改系统时间或直接访问包含文件系统的分区来间接设置 ctime)。

答案2

重命名确实会更新更改时间:

$ mkdir tmp
$ cd tmp

$ echo abc > a
$ stat a
  File: `a'
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 26h/38d Inode: 5038682     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000 /  zelda   Gid: ( 1000/   zelda)
Access: 2013-12-12 07:06:58.981107444 +0100
Modify: 2013-12-12 07:06:58.981107444 +0100
Change: 2013-12-12 07:06:58.981107444 +0100
 Birth: -

$ mv a b
$ stat b
  File: `b'
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 26h/38d Inode: 5038682     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/  zelda)   Gid: ( 1000/   zelda)
Access: 2013-12-12 07:06:58.981107444 +0100
Modify: 2013-12-12 07:06:58.981107444 +0100
Change: 2013-12-12 07:07:14.893238472 +0100
 Birth: -

读取文件内容时,访问时间会更新。在实际更新文件时修改(打开修改不足以更改修改时间)。

答案3

其他答案未提及的额外经验观察:

打开文件进行写入会O_TRUNC更改 mtime,即使文件最初为空。

至少在 Linux 3.10 上的 ext3 上似乎是这样。

相关内容