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

2067
Ether

Я пытаюсь определить, как время доступа к файлу поддерживается по умолчанию в 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
После выполнения команды touch что сообщает echo $? John T 14 лет назад 0
Все команды сообщают $? = 0. Ether 14 лет назад 0

1 ответ на вопрос

5
James Polley

Из 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.

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

Подтверждено! atime остается один, если mail / добавлен в список «Приватности» Spotlight, и mutt / procmail работает, как и ожидалось. Я встревожен тем, что Spotlight не знает достаточно хорошо, чтобы исправить atime - иначе это скорее побеждает цель иметь atime для начала. :( Ether 14 лет назад 0
Ну, это действительно предупредило вас о том, что что-то просматривалось в ваших папках Mutt: p James Polley 14 лет назад 0