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