Werden Dateizugriffszeiten in Mac OS X nicht ordnungsgemäß verwaltet?

2322
Ether

Ich versuche zu bestimmen, wie Dateizugriffszeiten standardmäßig in Mac OS X beibehalten werden, während ich versuche, ein seltsames Verhalten zu diagnostizieren, das in einem neuen MBP-Unibody (mit Snow Leopard, 10.6.2) angezeigt wird:

Die Symptome (Drilldown zu dem spezifischen Verhalten, das das Problem zu verursachen scheint):

  • mutt kann nicht zu Postfächern wechseln, die kürzlich neue E-Mails erhalten haben
  • mail wird von procmail zugestellt, wodurch die mtime des von ihr aktualisierten mbox-Ordners aktualisiert wird, jedoch nicht die Uhrzeit geändert wird (so funktioniert die neue Mail-Erkennung: durch Vergleichen von atime mit mtime)
  • jedoch sowohl die mtime und atime der Mbox - Datei wird immer aktualisiert

Durch das Testen scheint es nicht, dass atimesdas Dateisystem separat eingestellt werden kann:

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

Die test2-Datei wird mit einer alten erstellt mtime, und das atimeist jetzt auf Now gesetzt (da es sich um eine neue Datei handelt), was korrekt ist. Test3 wird jedoch mit einem alten erstellt atime, aber nicht ordnungsgemäß in der Datei festgelegt . Um sicherzugehen, dass dies nicht nur ein Verhalten ist, das bei neuen Dateien auftritt, ändern Sie eine alte Datei:

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

Es scheint also, dass atimes nicht explizit gesetzt werden kann (es wird immer auf "jetzt" zurückgesetzt, wenn entweder Änderungen vorgenommen werden mtimeoder atime).

Ist dies dem Dateisystem selbst inhärent, kann es geändert werden, oder bin ich total verrückt und schaue an der falschen Stelle?

PS. die Ausgabe von mountist:

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

... und das Festplatten-Dienstprogramm gibt an, dass das Laufwerk vom Typ "Mac OS Extended (Journaled)" ist.

1
Was meldet sich nach dem Ausführen des Touch-Befehls? Echo $? ` John T vor 14 Jahren 0
Alle Befehle melden $? = 0. Ether vor 14 Jahren 0

1 Antwort auf die Frage

5
James Polley

Von man touch(auf Schneeleopard):

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

Noch wichtiger ist, es funktioniert gut für mich:

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$  

Andererseits, wenn ich dasselbe in ~ versuche, erhalte ich dieselben Ergebnisse wie Sie:

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 

Der Unterschied? Spotlight kann / tmp nicht indizieren, aber ~. Ich bin mir ziemlich sicher, dass Sie hier das Spotlight lesen, um die Datei zu indizieren, nachdem Sie die atime geändert haben. Dadurch wird die atime wieder auf jetzt gesetzt.

Lösung ist einfach: Fügen Sie einfach die Verzeichnisse hinzu, die nicht indiziert werden sollen, zur Liste der Ordner, die nicht indiziert werden sollen.

Um dies zu bestätigen, habe ich ein neues Verzeichnis namens "nospotlight" erstellt und Spotlight angewiesen, es nicht zu indizieren.

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 

Erteilen Sie Spotlight die Berechtigung zum Indizieren, und Sekunden später:

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 

und noch einmal, das Ändern der mtime führt zu einem aktualisierten Zeitpunkt.

Es ist definitiv Spotlight.

Bestätigt! atime bleibt allein gelassen, wenn mail / der Liste "Datenschutz" von Spotlight hinzugefügt wird und Mutt / procmail wie erwartet funktioniert. Ich bin bestürzt darüber, dass Spotlight nicht genau genug weiß, um die Atime zu reparieren - ansonsten wird der Zweck einer Atime eher vernachlässigt. :( Ether vor 14 Jahren 0
Nun, es hat Sie darauf aufmerksam gemacht, dass sich in Ihren Mutt-Ordnern etwas versteckt hat: p James Polley vor 14 Jahren 0