Время доступа к файлам не поддерживается должным образом в 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.
Это определенно Прожектор.