Perché cat non sta cambiando il tempo di accesso?


25

La seconda chiamata per cat un file non aggiorna il tempo di accesso. Mi aspettavo che il tempo di accesso fosse aggiornato ogni volta che veniva visualizzato il contenuto del file.

Vedo lo stesso comportamento se apro il file nel browser web. Il tempo di accesso non viene aggiornato in modo coerente.

Sto fraintendendo il tempo di accesso? Cosa c'è di diverso tra le due chiamate cat?

$ touch test
$ stat test
  File: `test '
  Dimensione: 0 blocchi: 0 blocco IO: 4096 file vuoto normale
Dispositivo: 803h / 2051d Inodo: 152694 Collegamenti: 1
Accesso: (0664 / -rw-rw-r--) Uid: (1001 / aaron) Gid: (1001 / aaron)
Accesso: 2012-08-21 11: 05: 40.586020996 +0200
Modifica: 21-08-2012 11: 05: 40.586020996 +0200
Modifica: 21-08-2012 11: 05: 40.586020996 +0200
 Nascita: -

$ vim test
$ stat test
  File: `test '
  Dimensioni: 5 blocchi: 8 blocchi IO: 4096 file regolari
Dispositivo: 803h / 2051d Inodo: 152694 Collegamenti: 1
Accesso: (0664 / -rw-rw-r--) Uid: (1001 / aaron) Gid: (1001 / aaron)
Accesso: 2012-08-21 11: 05: 52.890021630 +0200
Modifica: 21-08-2012 11: 06: 31.606023626 +0200
Modifica: 21-08-2012 11: 06: 31.638023629 +0200
 Nascita: -

$ test di gatto
test

$ stat test
  File: `test '
  Dimensioni: 5 blocchi: 8 blocchi IO: 4096 file regolari
Dispositivo: 803h / 2051d Inodo: 152694 Collegamenti: 1
Accesso: (0664 / -rw-rw-r--) Uid: (1001 / aaron) Gid: (1001 / aaron)
Accesso: 2012-08-21 11: 06: 44.662024298 +0200
Modifica: 21-08-2012 11: 06: 31.606023626 +0200
Modifica: 21-08-2012 11: 06: 31.638023629 +0200
 Nascita: -

$ test di gatto
test

$ stat test
  File: `test '
  Dimensioni: 5 blocchi: 8 blocchi IO: 4096 file regolari
Dispositivo: 803h / 2051d Inodo: 152694 Collegamenti: 1
Accesso: (0664 / -rw-rw-r--) Uid: (1001 / aaron) Gid: (1001 / aaron)
Accesso: 2012-08-21 11: 06: 44.662024298 +0200
Modifica: 21-08-2012 11: 06: 31.606023626 +0200
Modifica: 21-08-2012 11: 06: 31.638023629 +0200
 Nascita: -

Risposte:


44

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

Critica dell'atime

Scrivere su un file cambia il suo mtime e ctime, mentre la lettura di un file cambia il suo tempo. Di conseguenza, su un sistema conforme a POSIX, la lettura di un file provoca una scrittura, che è stata criticata. Questo comportamento di solito può essere disabilitato aggiungendo un'opzione mount in / etc / fstab.

Tuttavia, la disattivazione dell'aggiornamento temporaneo interrompe la conformità POSIX e alcune applicazioni, in particolare il lettore di posta elettronica mutt (in alcune configurazioni) e alcuni programmi di utilità per la visualizzazione dell'utilizzo dei file, in particolare tmpwatch. Nel caso peggiore, il mancato aggiornamento di atime può causare il mancato backup di un file da parte di alcuni programmi di backup.

Lo sviluppatore del kernel Linux Ingo Molnár ha definito atime "forse la più stupida idea di progettazione Unix di tutti i tempi", aggiungendo: "[T] pensaci un po 'su questo:' Per ogni file letto dal disco, facciamo un ... write sul disco! E, per ogni file già memorizzato nella cache e che leggiamo dalla cache ... scriviamo sul disco! "" Ha ulteriormente sottolineato l'impatto sulle prestazioni in questo modo:

Gli aggiornamenti di Atime sono di gran lunga il più grande deficit di prestazioni IO che Linux ha oggi. Sbarazzarsi degli aggiornamenti atime ci darebbe più prestazioni Linux quotidiane di tutte le accelerazioni di pagecache degli ultimi 10 anni, messe insieme .

come sapere se noatime o relatime è l'opzione di mount predefinita nel kernel?

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

Ecco come è stata montata quella particolare partizione e perché cat non aggiorna il tempo di accesso come mi aspettavo.


Maggiori informazioni su come ubuntu gestisce atime askubuntu.com/questions/2099/…
nelaaro il

Ecco una discussione più vecchia su come atime è influenzato dalle diverse opzioni di mount. linux.koolsolutions.com/2009/01/30/…
nelaaro il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.