Místo cat
musíte použít touch
(nebo něco, co vynutí zápis), nebo explicitně deklarující atime
ve vaší možnosti připojení.
Ubuntu používá relatime
jako výchozí. Linuxové jádro ve skutečnosti používá relatime
jako výchozí od verze 2.6.30 výše. Tím se aktualizují pouze určité hodnoty, když se přistupuje k souborům, nikoli ke všem. Tím se změní cat
chování, takže nebude aktualizovat přístupový čas. Toto je výchozí nastavení v možnostech připojení Ubuntu. Jediným způsobem, jak upravit dobu přístupu, je dotknout se souboru (neboli vynucení zápisu) namísto pouhého čtení.
Důvodem je výkon. Pokud každé čtení vyžaduje zápis, jak vyžaduje POSIX, bude účinnost disků a zařízení na bázi flash horší. To se také zdá být kontraproducentem v souborových systémech pouze pro čtení.
V Ask Ubuntu a Super User je na toto téma spousta diskuzí:
- https://askubuntu.com/q/2099/169736
- https://superuser.com/q/464290/235569
Při práci s atime
si musíte být vědomi 3 možností připojení . První 2 znáte z manuálové stránky mount
úryvky
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).
Další možností, kterou pravděpodobně neznáte a která způsobuje váš smutek, je tato, která je výchozí od jádra 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.
Zda jsou tyto možnosti nastaveny na souborovém systému, můžete zkontrolovat pod /proc/mounts
.
Příklad
$ 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
Rozdíl oproti relatime
vs. noatime
je, že provede změny, ale pouze tehdy, když je aktuální přístupový čas po předchozím přístupovém čase.
Čas přístupu se aktualizuje pouze v případě, že předchozí čas přístupu byl dřívější než aktuální čas úpravy nebo změny. (Podobné jako noatime, ale neruší mutt nebo jiné aplikace, které potřebují vědět, zda byl soubor přečten od poslední úpravy.)