Os tempos de acesso a arquivos não são mantidos adequadamente no Mac OS X?

1

Estou tentando determinar como os horários de acesso a arquivos são mantidos por padrão no Mac OS X , como estou tentando diagnosticar algum comportamento estranho que estou vendo em um novo MBP Unibody (executando o Snow Leopard, 10.6.2) :

Os sintomas (detalhando o comportamento específico que parece estar causando o problema):

  • O mutt não consegue alternar para caixas de correio que receberam novos e-mails recentemente
  • o e-mail é entregue pelo procmail, que atualiza o mtime da pasta mbox que está atualizando, mas não altera o atime (é assim que a nova detecção de e-mail funciona: comparando atime com mtime)
  • no entanto, os dois tempo e atime do arquivo mbox está sendo atualizado

Por meio do teste, não parece que atimes possa ser definido separadamente no sistema de arquivos:

: [ether@tequila ~]$; touch test
: [ether@tequila ~]$; touch -m -t 200801010000 test2
: [ether@tequila ~]$; touch -a -t 200801010000 test3
: [ether@tequila ~]$; ls -l test*
-rw-------  1 ether  staff  0 Dec 30 11:42 test
-rw-------  1 ether  staff  0 Jan  1  2008 test2
-rw-------  1 ether  staff  0 Dec 30 11:43 test3
: [ether@tequila ~]$; ls -lu test*
-rw-------  1 ether  staff  0 Dec 30 11:42 test
-rw-------  1 ether  staff  0 Dec 30 11:43 test2
-rw-------  1 ether  staff  0 Dec 30 11:43 test3

O arquivo test2 é criado com um antigo mtime e o atime está definido como agora (já que é um novo arquivo), o que é correto. No entanto, test3 é criado com um antigo atime , mas não está definido corretamente no arquivo . Para ter certeza de que isso não é apenas um comportamento visto com novos arquivos, vamos modificar um arquivo antigo:

: [ether@tequila ~]$; touch -a -t 200801010000 test
: [ether@tequila ~]$; ls -l test
-rw-------  1 ether  staff  0 Dec 30 11:42 test
: [ether@tequila ~]$; ls -lu test
-rw-------  1 ether  staff  0 Dec 30 11:45 test

Assim, parece que os horários não podem ser definidos explicitamente (é sempre redefinido para "agora" quando as modificações mtime ou atime são enviadas).

Isso é algo inerente ao sistema de arquivos em si, é algo que pode ser mudado, ou eu estou totalmente louco e procurando no lugar errado?

PS. a saída de mount é:

: [ether@tequila ~]$; mount
/dev/disk0s2 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)

... e Disk Utility diz que a unidade é do tipo "Mac OS Extended (Journaled)".

    
por Ether 30.12.2009 / 20:52

1 resposta

5

De man touch (no snow leopard):

Change the modification time of the file.  The access time of the
file is not changed unless the -a flag is also specified.

Mais importante, funciona bem para mim:

betelgeuse:tmp james$ touch test
betelgeuse:tmp james$ touch -m -t 200801010000 test2
betelgeuse:tmp james$ touch -a -t 200801010000 test3
betelgeuse:tmp james$ ls -lu test*
-rw-r--r--  1 james  wheel  0 31 Dec 07:41 test
-rw-r--r--  1 james  wheel  0 31 Dec 07:41 test2
-rw-r--r--  1 james  wheel  0  1 Jan  2008 test3
betelgeuse:tmp james$ ls -l test*
-rw-r--r--  1 james  wheel  0 31 Dec 07:41 test
-rw-r--r--  1 james  wheel  0  1 Jan  2008 test2
-rw-r--r--  1 james  wheel  0 31 Dec 07:41 test3
betelgeuse:tmp james$ 

Por outro lado, quando tento a mesma coisa em ~ recebo os mesmos resultados que você:

betelgeuse:~ james$ touch test
betelgeuse:~ james$ touch -m -t 200801010000 test2
betelgeuse:~ james$ touch -a -t 200801010000 test3
betelgeuse:~ james$ ls -lu test*
-rw-r--r--  1 james  staff  0 31 Dec 07:42 test
-rw-r--r--  1 james  staff  0 31 Dec 07:42 test2
-rw-r--r--  1 james  staff  0 31 Dec 07:42 test3

A diferença? O Spotlight não indexa / tmp, mas indexa ~. Tenho certeza de que o que você está vendo aqui é o holofote lendo o arquivo para indexá-lo depois de alterar o atime - que então define o tempo de volta para agora.

A solução é fácil: basta adicionar os diretórios que você não deseja indexados na lista de pastas do Spotlight que não deve ser indexada.

Apenas para confirmar que esse era o caso, criei um novo diretório chamado "nospotlight" e disse ao Spotlight para não indexá-lo.

betelgeuse:nospotlight james$ ls -l *
-rw-r--r--  1 james  staff  0 31 Dec 07:47 test
-rw-r--r--  1 james  staff  0  1 Jan  2008 test2
-rw-r--r--  1 james  staff  0 31 Dec 07:47 test3
betelgeuse:nospotlight james$ ls -lu *
-rw-r--r--  1 james  staff  0 31 Dec 07:47 test
-rw-r--r--  1 james  staff  0 31 Dec 07:47 test2
-rw-r--r--  1 james  staff  0  1 Jan  2008 test3

Conceda permissão Spotlight para indexá-lo e, alguns segundos depois:

betelgeuse:nospotlight james$ ls -lu *
-rw-r--r--  1 james  staff  0 31 Dec 07:48 test
-rw-r--r--  1 james  staff  0 31 Dec 07:48 test2
-rw-r--r--  1 james  staff  0 31 Dec 07:48 test3

e, mais uma vez, modificar o mtime resulta em um atime atualizado.

É definitivamente o Spotlight.

    
por 30.12.2009 / 21:42