Время доступа к файлам не поддерживается должным образом в Mac OS X?

Я пытаюсь определить, как время доступа к файлу поддерживается по умолчанию в Mac OS X, так как я пытаюсь диагностировать какое-то странное поведение, которое я вижу в новом MBP Unibody (работает Snow Leopard, 10.6.2):

Симптомы (углубление в конкретное поведение, которое, кажется, вызывает проблему):

  • Mutt не может переключиться на почтовые ящики, которые недавно получили новую почту
  • почта доставляется procmail, которая обновляет mtime папки mbox, которую она обновляет, но не изменяет atime (так работает обнаружение новой почты: сравнивая atime с mtime)
  • однако, mtime и atime файла mbox обновляются

При тестировании не выясняется, что atimes может быть установлен отдельно в файловой системе:

: [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

Файл test2 создается со старым mtimeи atime установлен на сейчас (как новый файл), что правильно. Тем не менее, test3 создается со старым atime, но не правильно настроен для файла. Чтобы убедиться, что это не просто поведение, наблюдаемое с новыми файлами, давайте изменим старый файл:

: [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

Так что может показаться, что atimes не может быть установлен явно (он всегда сбрасывается на "сейчас", когда либо mtime или же atime изменения представлены).

Это что-то присуще самой файловой системе, это что-то, что можно изменить, или я совершенно сумасшедший и смотрю не туда?

PS. выход 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)

... и Дисковая утилита сообщает, что диск имеет тип "Mac OS Extended (Journaled)".

1 ответ

Решение

От man touch (на снежном барсе):

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

Что еще более важно, это работает хорошо для меня:

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$ 

С другой стороны, когда я пытаюсь сделать то же самое в ~, я получаю те же результаты, что и вы:

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

Различия? Прожектор не индексирует / tmp, но он индексирует ~. Я почти уверен, что то, что вы видите здесь, - это чтение в центре внимания файла, чтобы проиндексировать его после того, как вы изменили atime, который затем возвращает atime обратно.

Решение легко: просто добавьте каталоги, которые вы не хотите индексировать, в список папок Spotlight, которые не должны индексироваться.

Просто чтобы подтвердить, что это так, я сделал новый каталог под названием "nospotlight" и велел Spotlight не индексировать его.

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

Дайте Spotlight разрешение на его индексирование, и через несколько секунд:

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

и еще раз, изменение mtime приводит к обновлению atime.

Это определенно Прожектор.

Другие вопросы по тегам