Ao tocar em um novo arquivo, por que o mtime e o ctime são mais antigos que o atime?

3

Eu tenho isso:

$ 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

Por que o mtime e o ctime são mais antigos que o atime?

    
por abc 19.09.2011 / 05:38

2 respostas

6

Você pode ter algo em execução que está aguardando alterações nesse diretório?

Se eu tentar isso sem nada em execução a não ser um prompt de shell, o tempo de acesso de ff corresponderá aos tempos de modificação e alteração. Mas se eu abrir uma janela do Nautilus (gerenciador de arquivos GNOME) no diretório e tentar, o tempo de acesso será quase exatamente um segundo depois.

O que está acontecendo no meu caso é que o Nautilus está observando as mudanças nesse diretório porque ele tem uma janela aberta nele. Ele vê que um novo arquivo foi criado e quer saber qual ícone mostrar, por isso ele espia no arquivo para ver que tipo de arquivo é - o que atualiza o tempo de acesso.

    
por 19.09.2011 / 08:05
1

Não há razão para essa diferença de 1 segundo, pelo menos no que diz respeito ao comando de toque regular.

 $ 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

Use strace para verificar se a única chamada do sistema que afeta o arquivo criado pelo toque é:

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

Se for verdade, pode haver um daemon ou algo assim, como um antivírus, acessando seu arquivo depois que ele é criado.

    
por 19.09.2011 / 08:05