Dlaczego kot nie zmienia czasu dostępu?

25

Drugie wywołanie cat cat pliku nie aktualizuje czasu dostępu. Spodziewałem się, że czas dostępu będzie aktualizowany za każdym razem, gdy zostanie wyświetlona zawartość pliku.

Widzę to samo, jeśli otworzę plik w przeglądarce internetowej. Czas dostępu nie jest regularnie aktualizowany.

Czy źle zrozumiałem czas dostępu? Czym różnią się dwa wezwania kota?

$ test dotykowy
$ test statystyczny
  Plik: `test '
  Rozmiar: 0 Bloki: 0 Blok IO: 4096 zwykły pusty plik
Urządzenie: 803h / 2051d I-węzeł: 152694 Linki: 1
Dostęp: (0664 / -rw-rw-r--) Uid: (1001 / aaron) Gid: (1001 / aaron)
Dostęp: 2012-08-21 11: 05: 40.586020996 +0200
Zmień: 2012-08-21 11: 05: 40.586020996 +0200
Zmiana: 21.08.2012 11: 05: 40.586020996 +0200
 Narodziny: -

$ vim test
$ test statystyczny
  Plik: `test '
  Rozmiar: 5 bloków: 8 bloków IO: zwykły plik 4096
Urządzenie: 803h / 2051d I-węzeł: 152694 Linki: 1
Dostęp: (0664 / -rw-rw-r--) Uid: (1001 / aaron) Gid: (1001 / aaron)
Dostęp: 2012-08-21 11: 05: 52.890021630 +0200
Zmodyfikuj: 21.08.2012 11: 06: 31.606023626 +0200
Zmiana: 21.08.2012 11: 06: 31.638023629 +0200
 Narodziny: -

$ test kotów
test

$ test statystyczny
  Plik: `test '
  Rozmiar: 5 bloków: 8 bloków IO: zwykły plik 4096
Urządzenie: 803h / 2051d I-węzeł: 152694 Linki: 1
Dostęp: (0664 / -rw-rw-r--) Uid: (1001 / aaron) Gid: (1001 / aaron)
Dostęp: 2012-08-21 11: 06: 44,662024298 +0200
Zmodyfikuj: 21.08.2012 11: 06: 31.606023626 +0200
Zmiana: 21.08.2012 11: 06: 31.638023629 +0200
 Narodziny: -

$ test kotów
test

$ test statystyczny
  Plik: `test '
  Rozmiar: 5 bloków: 8 bloków IO: zwykły plik 4096
Urządzenie: 803h / 2051d I-węzeł: 152694 Linki: 1
Dostęp: (0664 / -rw-rw-r--) Uid: (1001 / aaron) Gid: (1001 / aaron)
Dostęp: 2012-08-21 11: 06: 44,662024298 +0200
Zmodyfikuj: 21.08.2012 11: 06: 31.606023626 +0200
Zmiana: 21.08.2012 11: 06: 31.638023629 +0200
 Narodziny: -
nelaaro
źródło

Odpowiedzi:

44

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

Krytyka atime

Zapis do pliku zmienia mtime i ctime, podczas gdy czytanie pliku zmienia jego czas. W rezultacie w systemie zgodnym z POSIX odczyt pliku powoduje zapis, który został skrytykowany. To zachowanie można zwykle wyłączyć, dodając opcję montowania w / etc / fstab.

Jednak wyłączenie aktualizacji na czas przerywa zgodność z POSIX, a niektóre aplikacje, w szczególności czytnik poczty mutt (w niektórych konfiguracjach), oraz niektóre narzędzia do monitorowania zużycia plików, zwłaszcza tmpwatch. W najgorszym przypadku brak aktualizacji może spowodować, że niektóre programy do tworzenia kopii zapasowych nie utworzą kopii zapasowej pliku.

Twórca jądra Linuksa, Ingo Molnár, nazwał atime „być może najgłupszym pomysłem Uniksa wszechczasów”, dodając: „[T] trochę o tym pomyślę:„ Dla każdego pliku odczytywanego z dysku, zróbmy ... napisz na dysk! I dla każdego pliku, który jest już buforowany i który czytamy z pamięci podręcznej ... zrób zapis na dysk! ”„ Podkreślił ponadto wpływ na wydajność w ten sposób:

Aktualizacje Atime są zdecydowanie największym niedoborem wydajności we / wy, jaki ma dziś Linux. Pozbycie się aktualizacji atime zapewniłoby nam większą codzienną wydajność Linuksa niż wszystkie przyspieszenia pagecache ostatnich 10 lat łącznie .

jak się dowiedzieć, czy noatime lub relatime jest domyślną opcją montowania w jądrze?

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

W ten sposób została zamontowana ta konkretna partycja i dlaczego cat nie aktualizuje czasu dostępu zgodnie z oczekiwaniami.

nelaaro
źródło
Więcej informacji o tym, jak Ubuntu radzi sobie z atime askubuntu.com/questions/2099/…
nelaaro
Oto starsza dyskusja na temat wpływu różnych opcji montowania na atime. linux.koolsolutions.com/2009/01/30/…
nelaaro