在触摸新文件时,为什么 mtime 和 ctime 比 atime 旧?

在触摸新文件时,为什么 mtime 和 ctime 比 atime 旧?

我有这个:

$ ls -l ff
ls: cannot access ff: No such file or directory


$ touch ff
$ stat ff
  File: `ff'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d  Inode: 1057193     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   abc)   Gid: (    0/    root)
Access: 2011-09-18 20:36:08.351097228 -0700
Modify: 2011-09-18 20:36:07.340839847 -0700
Change: 2011-09-18 20:36:07.340839847 -0700

为什么 mtime 和 ctime 比 atime 旧?

答案1

您是否正在运行某些程序来监视该目录的更改?

如果我在只运行 shell 提示符的情况下尝试执行此操作,则访问时间与ff修改和更改时间相匹配。但是,如果我在该目录上打开 Nautilus(GNOME 文件管理器)窗口并尝试,访问时间几乎恰好晚了一秒。

在我的例子中,Nautilus 正在监视该目录的更改,因为它上面打开了一个窗口。它看到创建了一个新文件并想知道要显示什么图标,因此它会查看该文件以查看它是什么类型的文件 - 这会更新访问时间。

答案2

至少就常规触摸命令而言,这 1 秒的差异是没有理由的。

 $ ls -l zz
    ls: cannot access zz: No such file or directory
    $ touch zz
    $ stat zz
      File: `zz'
      Size: 0           Blocks: 0          IO Block: 4096   regular empty file
    Device: 808h/2056d  Inode: 265633      Links: 1
    Access: (0644/-rw-r--r--)  Uid: ( 1000/jlliagre)   Gid: ( 1000/jlliagre)
    Access: 2011-09-19 07:35:50.679679571 +0200
    Modify: 2011-09-19 07:35:50.679679571 +0200
    Change: 2011-09-19 07:35:50.679679571 +0200

使用 strace 验证影响 touch 创建的文件的唯一系统调用是:

open("zz", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
dup2(3, 0)                              = 0
close(3)                                = 0
utimensat(0, NULL, NULL, 0)             = 0
close(0)                                = 0

如果属实,则可能有一个守护进程或其他东西(例如防病毒软件)在创建文件后访问您的文件。

相关内容