cat
の代わりに touch
を使用する必要があります (または書き込みを強制するもの)、または明示的に atime
を宣言する マウントオプションで。
Ubuntu は relatime
を使用します デフォルトとして。実際、Linux カーネルは relatime
を使用しています。 バージョン 2.6.30 以降のデフォルトとして。これは、すべてではなくファイルがアクセスされたときに特定の値のみを更新します。これは cat
を変更します アクセス時間が更新されないようにします。これは、Ubuntu マウント オプションのデフォルトです。アクセス時間を変更する唯一の方法は、単純な読み取りではなく、ファイルにアクセスすることです (つまり、強制的に書き込みます)。
この背後にある理由はパフォーマンスです。 POSIX が要求するように、読み取りごとに書き込みが必要な場合、ディスクとフラッシュ ベースのデバイスの効率は低下します。これはまた、読み取り専用ファイルシステムでは逆効果のようです。
このトピックについては、Ask Ubuntu and Super User で多くの議論があります:
- https://askubuntu.com/q/2099/169736
- https://superuser.com/q/464290/235569
atime
を扱う際に一般的に注意する必要がある 3 つのマウント オプションがあります。 .最初の 2 つについては、mount の man ページからおなじみです
抜粋
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).
もう 1 つのオプションは、おそらくなじみがなく、あなたの悲しみを引き起こしているものです。これは、カーネル 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.
/proc/mounts
の下を見ると、これらのオプションがファイルシステムに設定されているかどうかを確認できます。 .
例
$ 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
relatime
との違い vs.noatime
ただし、現在のアクセス時刻が前回のアクセス時刻より後の場合のみです。
アクセス時刻は、前回のアクセス時刻が現在の変更時刻または変更時刻より前であった場合にのみ更新されます。 (noatime に似ていますが、ファイルが最後に変更されてから読み取られたかどうかを知る必要がある mutt やその他のアプリケーションを中断しません。)