为什么修改文件时目录的 mtime 和 ctime 会发生变化?

为什么修改文件时目录的 mtime 和 ctime 会发生变化?

我正在学习有关文件和目录的 atime、ctime、mtime。在我看来,如果我修改目录中的文件,我并没有更改“目录文件”本身的 inode 或文件内容,因此 ctime 和 mtime 应该保持不变。

但在下面的测试中,当我编辑文件时,更改时间和修改时间确实发生了变化。他们为什么改变?

$ ls    

blah.txt  test.txt  test.txt~

$ cd ..

$ stat -x Write
      File: "Write"
      Size: 170          FileType: Directory
      Mode: (0777/drwxrwxrwx)         Uid: (  501/user)  Gid: (   20/   staff)
    Device: 1,4   Inode: 652017    Links: 5
    Access: Tue Aug 11 08:20:33 2015
    Modify: Tue Aug 11 08:01:49 2015
    Change: Tue Aug 11 08:01:49 2015

$ cd Write

$ ls
    blah.txt  test.txt  test.txt~

$ emacs test.txt

$ cd ..

$ stat -x Write
      File: "Write"
      Size: 170          FileType: Directory
      Mode: (0777/drwxrwxrwx)         Uid: (  501/user)  Gid: (   20/   staff)
    Device: 1,4   Inode: 652017    Links: 5
    Access: Tue Aug 11 08:20:48 2015
    Modify: Tue Aug 11 08:20:48 2015
    Change: Tue Aug 11 08:20:48 2015

答案1

当您运行时,emacs它会创建一个备份文件,int his case test.txt~。如果已经存在一个具有该名称的文件,我怀疑它会将其删除并创建一个新文件。新文件的创建正在修改目录,从而更新其修改和更改时间。

相反,如果您说echo new line >> blah.txt您不会创建任何额外的文件,因此不会更新目录中的这些条目。在这种情况下,shell 仅打开文件(用于追加)。

相关内容