mtimeとctimeのようなときにatimeが更新されるのはなぜですか?

mtimeとctimeのようなときにatimeが更新されるのはなぜですか?

Linuxのデフォルトの「相対時間」マウントオプションがinodeアクセス時間をどのように処理するかを理解しようとしていますが、文書化された動作は設置(8)私が見たものと完全に一致しません。それは言う:

関係時間

変更または変更時間に基づいて inode アクセス時間を更新します。以前のアクセス時間が現在の変更または変更時間より前の場合にのみ、アクセス時間が更新されます。 (noatimeに似ていますが、最後の修正以降にファイルを読み込んだかどうかを知る必要があるmuttまたは他のアプリケーションを破損しません。)

テストファイルに同じatime / mtime / ctime設定を使用できます。

$ touch sometestfile
$ stat sometestfile 
  File: sometestfile
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 259,2   Inode: 38318274    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   user)   Gid: ( 1000/   user)
Context: unconfined_u:object_r:unlabeled_t:s0
Access: 2023-03-24 16:56:56.758033579 -0400
Modify: 2023-03-24 16:56:56.758033579 -0400
Change: 2023-03-24 16:56:56.758033579 -0400
 Birth: 2023-03-24 16:56:56.758033579 -0400

ただし、後続の読み出しでは、atime が増加しても atime が増加します。いいえ現在の変更または変更時間より前:

$ cat sometestfile
$ stat sometestfile
  File: sometestfile
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 259,2   Inode: 38318274    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   user)   Gid: ( 1000/   user)
Context: unconfined_u:object_r:unlabeled_t:s0
Access: 2023-03-24 16:57:02.336950126 -0400
Modify: 2023-03-24 16:56:56.758033579 -0400
Change: 2023-03-24 16:56:56.758033579 -0400
 Birth: 2023-03-24 16:56:56.758033579 -0400

マニュアルページを見ると、そのまま維持されるべきではないでしょうか?これは、マンページの「<」とカーネルソースの「<=」の場合ですか? (これは基本的に反対です。この問題;後続の読み取りでは変更されないことがわかりますが、最初の読み取りでは変更される理由が何であるか混乱しています。 )私はこれが非常にトリッキーであることを知っていますが、ファイルアクセス時間に関連するすべての極端なケースについて頭を包みようとしていましたが、この問題を発見しました。これはカーネル6.1.9のあるFedora 37とカーネル6.2.6のArchで見たことがあります。

ベストアンサー1

はい、「早い」は「遅くない」を意味するはずです。

あなたが見る行動は正しいです。ファイルに触れることは書き込みを意味します。atime最初の後続の読み取りで更新されました。

マニュアルにバグがあるようです。

おすすめ記事