`cat`は最後の`Access`時間には影響しますが、最後の`Change`時間には影響しません。

`cat`は最後の`Access`時間には影響しますが、最後の`Change`時間には影響しません。

私のUbuntuシステムはをprueba.txt使用しますtouch prueba.txt。を使用してファイル統計を表示すると、stat prueba.txt出力は次のようになります。

  File: prueba.txt
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fc01h/64513d    Inode: 4092        Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-10-07 13:04:57.621272608 +0000
Modify: 2022-10-07 13:04:57.621272608 +0000
Change: 2022-10-07 13:04:57.621272608 +0000
 Birth: 2022-10-07 13:04:57.621272608 +0000

次に、を使用してファイルの内容を印刷しcat prueba.txtてからstat prueba.txt再度実行すると、出力は次のようになります。

  File: prueba.txt
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fc01h/64513d    Inode: 4092        Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-10-07 13:06:18.852005488 +0000
Modify: 2022-10-07 13:04:57.621272608 +0000
Change: 2022-10-07 13:04:57.621272608 +0000
 Birth: 2022-10-07 13:04:57.621272608 +0000

時間はAccess変わりましたが、Change時間は変わりませんでした。ただし、man 7 inodeこのファイルのメタデータを説明するトピックには、意味に関する次の情報が表示されますChange

Last status change timestamp (ctime)
              stat.st_ctime; statx.stx_ctime

              This is the file's last status change timestamp.  It is changed by writing or by setting inode informa‐
              tion (i.e., owner, group, link count, mode, etc.).

私が理解したことが正しい場合は、Changeファイルデータがあるたびに時間を更新する必要があります。またはメタデータ(おそらく)Accessメタデータを含む修正されました。それではcat、ファイルがメタデータ値に影響しますが、Accessプロセスでメタデータが変更されないのはなぜですか?このトピックが何を意味するのか、どのように機能するのかChange誤解しましたか?mancat

答え1

Linuxは各ファイルに対して3つのタイムスタンプを保持します。

  • 時間:ファイルの内容(データ自体)が最後に変更された時刻です。を通して見ることができます。ls -l
  • 時間:ファイルコンテンツまたはファイルメタデータ(所有者、グループ、権限、リンク数など)が最後に変更された時間。これにはタイムスタンプは含まれません。を通して見ることができます。ls -lc
  • アルテム:内容を読み取るためにファイルに最後にアクセスした時間。を通して見ることができます。ls -lu

期待どおりにatimeを変更してファイルを読み込みますcat。この操作中にファイルの内容やメタデータは変更されないため、対応するctimeは変更されません。

関連情報