我有这个:
$ 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
如果属实,则可能有一个守护进程或其他东西(例如防病毒软件)在创建文件后访问您的文件。