Statt cat
Sie müssen touch
verwenden (oder etwas, das einen Schreibvorgang erzwingt) oder explizit atime
deklariert in Ihrer Mount-Option.
Ubuntu verwendet relatime
als Standard. Der Linux-Kernel verwendet tatsächlich relatime
als Standard ab Version 2.6.30. Dies aktualisiert nur bestimmte Werte, wenn auf Dateien zugegriffen wird, anstatt alle. Dies modifiziert den cat
Verhalten, sodass die Zugriffszeit nicht aktualisiert wird. Dies ist die Standardeinstellung in Ubuntu-Mount-Optionen. Die einzige Möglichkeit, die Zugriffszeit zu ändern, ist das Berühren der Datei (auch bekannt als Erzwingen eines Schreibvorgangs) anstelle eines einfachen Lesevorgangs.
Der Grund dafür ist die Leistung. Wenn jeder Lesevorgang einen Schreibvorgang erfordert, wie es POSIX erfordert, verschlechtert sich die Effizienz von Festplatten und Flash-basierten Geräten. Dies scheint auch in schreibgeschützten Dateisystemen kontraproduktiv zu sein.
Es gibt eine Menge Diskussionen zu diesem Thema in Ask Ubuntu und Super User:
- https://askubuntu.com/q/2099/169736
- https://superuser.com/q/464290/235569
Es gibt 3 Mount-Optionen, die Sie im Allgemeinen beachten müssen, wenn Sie mit atime
arbeiten . Sie kennen die ersten 2 von der Manpage von mount
Auszüge
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).
Die andere Option, mit der Sie wahrscheinlich nicht vertraut sind und die Ihren Kummer verursacht, ist diese, die seit Kernel 2.6.30 die Standardeinstellung ist:
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.
Sie können überprüfen, ob diese Optionen auf einem Dateisystem gesetzt sind, indem Sie unter /proc/mounts
nachsehen .
Beispiel
$ 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
Der Unterschied zu relatime
gegenüber noatime
ist, dass Änderungen vorgenommen werden, aber nur, wenn die aktuelle Zugriffszeit nach der vorherigen Zugriffszeit liegt.
Die Zugriffszeit wird nur aktualisiert, wenn die vorherige Zugriffszeit vor der aktuellen Modifizierungs- oder Änderungszeit lag. (Ähnlich wie noatime, unterbricht aber Mutt oder andere Anwendungen nicht, die wissen müssen, ob eine Datei seit ihrer letzten Änderung gelesen wurde.)