Au lieu de cat
vous devez utiliser touch
(ou quelque chose qui force une écriture), ou en déclarant explicitement atime
dans votre option de montage.
Ubuntu utilise relatime
par défaut. Le noyau Linux, en fait, utilise relatime
par défaut à partir de la version 2.6.30. Cela ne met à jour que certaines valeurs lors de l'accès aux fichiers au lieu de tous. Cela modifie le cat
comportement afin qu'il ne mette pas à jour le temps d'accès. C'est la valeur par défaut dans les options de montage d'Ubuntu. La seule façon de modifier le temps d'accès est de toucher le fichier (c'est-à-dire de forcer une écriture) au lieu d'une simple lecture.
La raison derrière cela est la performance. Si chaque lecture nécessite une écriture comme l'exige POSIX, l'efficacité des disques et des périphériques basés sur la mémoire flash sera moins bonne. Cela semble également contre-productif dans les systèmes de fichiers en lecture seule.
Il y a beaucoup de discussions sur ce sujet dans Ask Ubuntu et Super User :
- https://askubuntu.com/q/2099/169736
- https://superuser.com/q/464290/235569
Il existe 3 options de montage dont vous devez généralement être conscient lorsque vous traitez avec atime
. Vous connaissez les 2 premiers, de la page de manuel de mount
extraits
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).
L'autre option que vous ne connaissez probablement pas, et celle qui cause votre chagrin est celle-ci, qui est la valeur par défaut depuis le noyau 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.
Vous pouvez vérifier si ces options sont définies sur un système de fichiers en regardant sous /proc/mounts
.
Exemple
$ 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 différence avec relatime
vs noatime
est qu'il apportera des modifications, mais uniquement lorsque l'heure d'accès actuelle est postérieure à l'heure d'accès précédente.
L'heure d'accès n'est mise à jour que si l'heure d'accès précédente était antérieure à l'heure de modification ou de changement actuelle. (Similaire à noatime, mais ne casse pas mutt ou d'autres applications qui ont besoin de savoir si un fichier a été lu depuis la dernière fois qu'il a été modifié.)