En lugar de cat
debes usar touch
(o algo que fuerce una escritura), o declarando explícitamente atime
en su opción de montaje.
Ubuntu usa relatime
por defecto. El kernel de Linux, de hecho, usa relatime
como predeterminado desde la versión 2.6.30 en adelante. Esto solo actualiza ciertos valores cuando se accede a los archivos en lugar de a todos. Esto modifica el cat
comportamiento por lo que no actualizará el tiempo de acceso. Este es el valor predeterminado en las opciones de montaje de Ubuntu. La única forma de modificar el tiempo de acceso es tocar el archivo (también conocido como forzar una escritura) en lugar de una simple lectura.
La razón detrás de esto es el rendimiento. Si cada lectura requiere una escritura como lo requiere POSIX, la eficiencia de los discos y dispositivos basados en flash será peor. Esto también parece contraproducente en los sistemas de archivos de solo lectura.
Hay mucha discusión sobre este tema en Ask Ubuntu y Super User:
- https://askubuntu.com/q/2099/169736
- https://superusuario.com/q/464290/235569
Hay 3 opciones de montaje que generalmente debe tener en cuenta cuando se trata de atime
. Estás familiarizado con los primeros 2, de la página man de mount
extractos
atime Do not use noatime feature, then the inode access time is controlled
by kernel defaults. See also the description for strictatime and
relatime mount options.
noatime
Do not update inode access times on this filesystem (e.g., for
faster access on the news spool to speed up news servers).
La otra opción con la que probablemente no esté familiarizado, y la que le causa molestias, es esta, que ha sido la predeterminada desde el kernel 2.6.30:
relatime
Update inode access times relative to modify or change time.
Access time is only updated if the previous access time was
earlier than the current modify or change time. (Similar to
noatime, but doesn't break mutt or other applications that need to
know if a file has been read since the last time it was
modified.)
Since Linux 2.6.30, the kernel defaults to the behavior provided
by this option (unless noatime was specified), and the
strictatime 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.
Puede verificar si estas opciones están configuradas en un sistema de archivos mirando en /proc/mounts
.
Ejemplo
$ head -5 /proc/mounts
rootfs / rootfs rw 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=3976812k,nr_inodes=994203,mode=755 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
La diferencia con relatime
contra noatime
es que hará cambios, pero solo cuando la hora de acceso actual sea posterior a la hora de acceso anterior.
La hora de acceso solo se actualiza si la hora de acceso anterior fue anterior a la hora actual de modificación o cambio. (Similar a noatime, pero no interrumpe mutt ni otras aplicaciones que necesitan saber si un archivo se ha leído desde la última vez que se modificó).