新しいファイルに触れると、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

このディレクトリの変更を監視するためにいくつかのプログラムを実行していますか?

シェルプロンプトの実行中にこれを試みると、アクセス時間は変更ffおよび変更時間と一致します。ところで、そのディレクトリにノーチラス(GNOMEファイルマネージャ)ウィンドウを開いて試してみると、アクセス時間がほぼ正確に1秒程度遅くなる。

私の場合はウィンドウが開いているので、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を使用してタッチで生成されたファイルに影響を与える唯一のシステムコールが次のようになっていることを確認してください。

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

実際には、ファイルが作成された後にファイルにアクセスするデーモンや何か(ウイルス対策ソフトウェアなど)がある可能性があります。

関連情報