¿Por qué cat no cambia el tiempo de acceso?

¿Por qué cat no cambia el tiempo de acceso?

La segunda llamada para capturar un archivo no actualiza el tiempo de acceso. Esperaba que el tiempo de acceso se actualizara cada vez que se mostrara el contenido de un archivo.

Veo el mismo comportamiento si abro el archivo en el navegador web. Su tiempo de acceso no se actualiza constantemente.

¿Estoy entendiendo mal el tiempo de acceso? ¿Qué es diferente entre los dos llamados de gato?

$ prueba táctil
$ prueba estadística
  Archivo: `prueba'
  Tamaño: 0 Bloques: 0 Bloque IO: 4096 archivo vacío normal
Dispositivo: 803h/2051d Inodo: 152694 Enlaces: 1
Acceso: (0664/-rw-rw-r--) Uid: (1001/aaron) Gid: (1001/aaron)
Acceso: 2012-08-21 11:05:40.586020996 +0200
Modificar: 2012-08-21 11:05:40.586020996 +0200
Cambio: 2012-08-21 11:05:40.586020996 +0200
 Nacimiento: -

$ prueba vim
$ prueba estadística
  Archivo: `prueba'
  Tamaño: 5 Bloques: 8 Bloque IO: 4096 archivo normal
Dispositivo: 803h/2051d Inodo: 152694 Enlaces: 1
Acceso: (0664/-rw-rw-r--) Uid: (1001/aaron) Gid: (1001/aaron)
Acceso: 2012-08-21 11:05:52.890021630 +0200
Modificar: 2012-08-21 11:06:31.606023626 +0200
Cambio: 2012-08-21 11:06:31.638023629 +0200
 Nacimiento: -

$ prueba de gato
prueba

$ prueba estadística
  Archivo: `prueba'
  Tamaño: 5 Bloques: 8 Bloque IO: 4096 archivo normal
Dispositivo: 803h/2051d Inodo: 152694 Enlaces: 1
Acceso: (0664/-rw-rw-r--) Uid: (1001/aaron) Gid: (1001/aaron)
Acceso: 2012-08-21 11:06:44.662024298 +0200
Modificar: 2012-08-21 11:06:31.606023626 +0200
Cambio: 2012-08-21 11:06:31.638023629 +0200
 Nacimiento: -

$ prueba de gato
prueba

$ prueba estadística
  Archivo: `prueba'
  Tamaño: 5 Bloques: 8 Bloque IO: 4096 archivo normal
Dispositivo: 803h/2051d Inodo: 152694 Enlaces: 1
Acceso: (0664/-rw-rw-r--) Uid: (1001/aaron) Gid: (1001/aaron)
Acceso: 2012-08-21 11:06:44.662024298 +0200
Modificar: 2012-08-21 11:06:31.606023626 +0200
Cambio: 2012-08-21 11:06:31.638023629 +0200
 Nacimiento: -

Respuesta1

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

Crítica de un tiempo

Escribir en un archivo cambia su mtime y ctime, mientras que leer un archivo cambia su atime. Como resultado, en un sistema compatible con POSIX, la lectura de un archivo provoca una escritura, lo cual ha sido criticado. Este comportamiento normalmente se puede desactivar agregando una opción de montaje en /etc/fstab.

Sin embargo, desactivar la actualización a tiempo interrumpe el cumplimiento de POSIX y algunas aplicaciones, en particular el lector de correo mutt (en algunas configuraciones), y algunas utilidades de vigilancia del uso de archivos, en particular tmpwatch. En el peor de los casos, no actualizar a tiempo puede provocar que algunos programas de copia de seguridad no puedan realizar la copia de seguridad de un archivo.

El desarrollador del kernel de Linux, Ingo Molnár, llamó a esta vez "quizás la idea de diseño de Unix más estúpida de todos los tiempos", y agregó: "[P]ensad un poco en esto: 'Por cada archivo que se lee del disco, hagamos un... escribir al disco! Y, por cada archivo que ya esté almacenado en caché y que leamos desde el caché... ¡escriba en el disco!'" Enfatizó además el impacto en el rendimiento de la siguiente manera:

Las actualizaciones puntuales son, con diferencia, la mayor deficiencia de rendimiento de IO que tiene Linux en la actualidad. Deshacernos de las actualizaciones puntuales nos daría un mayor rendimiento diario de Linux que todas las aceleraciones de la caché de páginas de los últimos 10 años.conjunto.

¿Cómo saber si noatime o relatime es la opción de montaje predeterminada en el 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.
....

Así es como se montó esa partición en particular y por qué cat no actualiza el tiempo de acceso como esperaba.

información relacionada