Warum ändert Cat die Zugriffszeit nicht?

Warum ändert Cat die Zugriffszeit nicht?

Der zweite Aufruf von cat für eine Datei aktualisiert die Zugriffszeit nicht. Ich hatte erwartet, dass die Zugriffszeit jedes Mal aktualisiert wird, wenn ein Dateiinhalt angezeigt wird.

Dasselbe Verhalten tritt auf, wenn ich die Datei im Webbrowser öffne. Die Zugriffszeit wird nicht konsistent aktualisiert.

Verstehe ich die Zugriffszeit falsch? Was ist der Unterschied zwischen den beiden Katzenrufen?

$ Berührungstest
$ Statistiktest
  Datei: „test“
  Größe: 0 Blöcke: 0 IO Block: 4096 normale leere Datei
Gerät: 803h/2051d Inode: 152694 Links: 1
Zugriff: (0664/-rw-rw-r--) Uid: ( 1001/ aaron) Gid: ( 1001/ aaron)
Zugriff: 21.08.2012 11:05:40.586020996 +0200
Ändern: 2012-08-21 11:05:40.586020996 +0200
Änderung: 2012-08-21 11:05:40.586020996 +0200
 Geburt: -

$ vim-Test
$ Statistiktest
  Datei: „test“
  Größe: 5 Blöcke: 8 IO Block: 4096 reguläre Datei
Gerät: 803h/2051d Inode: 152694 Links: 1
Zugriff: (0664/-rw-rw-r--) Uid: ( 1001/ aaron) Gid: ( 1001/ aaron)
Zugriff: 21.08.2012 11:05:52.890021630 +0200
Ändern: 2012-08-21 11:06:31.606023626 +0200
Änderung: 2012-08-21 11:06:31.638023629 +0200
 Geburt: -

$ Katzentest
prüfen

$ Statistiktest
  Datei: „test“
  Größe: 5 Blöcke: 8 IO Block: 4096 reguläre Datei
Gerät: 803h/2051d Inode: 152694 Links: 1
Zugriff: (0664/-rw-rw-r--) Uid: ( 1001/ aaron) Gid: ( 1001/ aaron)
Zugriff: 21.08.2012 11:06:44.662024298 +0200
Ändern: 2012-08-21 11:06:31.606023626 +0200
Änderung: 2012-08-21 11:06:31.638023629 +0200
 Geburt: -

$ Katzentest
prüfen

$ Statistiktest
  Datei: „test“
  Größe: 5 Blöcke: 8 IO Block: 4096 reguläre Datei
Gerät: 803h/2051d Inode: 152694 Links: 1
Zugriff: (0664/-rw-rw-r--) Uid: ( 1001/ aaron) Gid: ( 1001/ aaron)
Zugriff: 21.08.2012 11:06:44.662024298 +0200
Ändern: 2012-08-21 11:06:31.606023626 +0200
Änderung: 2012-08-21 11:06:31.638023629 +0200
 Geburt: -

Antwort1

http://en.wikipedia.org/wiki/Stat_(Systemaufruf)

Kritik an atime

Das Schreiben in eine Datei ändert ihre Mtime und Ctime, während das Lesen einer Datei ihre Atime ändert. Infolgedessen verursacht das Lesen einer Datei auf einem POSIX-kompatiblen System einen Schreibvorgang, was kritisiert wurde. Dieses Verhalten kann normalerweise durch Hinzufügen einer Mount-Option in /etc/fstab deaktiviert werden.

Das Deaktivieren der atime-Aktualisierung beeinträchtigt jedoch die POSIX-Konformität und einige Anwendungen, insbesondere den Mutt-Mail-Reader (in einigen Konfigurationen) und einige Dienstprogramme zur Überwachung der Dateinutzung, insbesondere tmpwatch. Im schlimmsten Fall kann das Nicht-Aktualisieren von atime dazu führen, dass einige Sicherungsprogramme eine Datei nicht sichern können.

Der Linux-Kernel-Entwickler Ingo Molnár nannte atime „vielleicht die dümmste Unix-Designidee aller Zeiten“ und fügte hinzu: „Denken Sie ein wenig darüber nach: ‚Lasst uns für jede Datei, die von der Festplatte gelesen wird, einen … Schreibvorgang auf die Festplatte durchführen! Und für jede Datei, die bereits zwischengespeichert ist und die wir aus dem Cache lesen … einen Schreibvorgang auf die Festplatte durchführen!‘“ Er betonte die Auswirkungen auf die Leistung folgendermaßen:

Atime-Updates sind bei weitem das größte IO-Leistungsdefizit, das Linux heute hat. Die Beseitigung von Atime-Updates würde uns mehr alltägliche Linux-Leistung bringen als alle Pagecache-Beschleunigungen der letzten 10 Jahre.kombiniert.

Wie kann man feststellen, ob „noatime“ oder „relatime“ die Standard-Mount-Option im Kernel ist?

man mount
....
   relatime
          Update inode access times relative to  modify  or  change  time.
          Access time is only updated if the previous access time was ear‐
          lier than the current modify or change time. (Similar  to  noat‐
          ime,  but  doesn't break mutt or other applications that need to
          know if a file has been read since the last time  it  was  modi‐
          fied.)

          Since Linux 2.6.30, the kernel defaults to the behavior provided
          by this option (unless noatime was  specified), and the stricta‐
          time  option  is  required  to  obtain traditional semantics. In
          addition, since Linux 2.6.30, the file's  last  access  time  is
          always  updated  if  it  is more than 1 day old.
....

So wurde diese bestimmte Partition gemountet und deshalb aktualisiert Cat die Zugriffszeit nicht wie erwartet.

verwandte Informationen