ハードリンクされたtailファイルを削除すると、ヘッダーの変更時間が変わり、その逆も同様です。なぜ?

ハードリンクされたtailファイルを削除すると、ヘッダーの変更時間が変わり、その逆も同様です。なぜ?

注:質問には反対と言われていますが、どちらも同じinodeを指し、どちらが頭であり、どちらが尾であるかを区別できないため、実際には意味がありません。

hlh.txtファイルがあるとしましょう。

[root@FREL ~]# fallocate -l 100 hlh.txt

今hlh.txtの変更時間を見ると

[root@FREL ~]# stat hlh.txt
  File: hlh.txt
  Size: 100             Blocks: 8          IO Block: 4096   regular file
Device: fc00h/64512d    Inode: 994         Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2023-01-11 01:43:05.469703330 -0500
Modify: 2023-01-11 01:43:05.469703330 -0500
Change: 2023-01-11 01:43:05.469703330 -0500
 Birth: 2023-01-11 01:43:05.469703330 -0500

ハードリンクの作成

[root@FREL ~]# ln hlh.txt hlt.txt

hlh.txtとhlt.txtは両方とも同じinodeを指すので、変更時間はハードリンクされたtailファイルの理解できるctimeになります。

[root@FREL ~]# stat hlt.txt
  File: hlt.txt
  Size: 100             Blocks: 8          IO Block: 4096   regular file
Device: fc00h/64512d    Inode: 994         Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2023-01-11 01:43:05.469703330 -0500
Modify: 2023-01-11 01:43:05.469703330 -0500
Change: 2023-01-11 01:44:05.316842644 -0500
 Birth: 2023-01-11 01:43:05.469703330 -0500

ただし、ヘッダファイルのリンクを解除すると、ファイルのctimeも変更されます。なぜ?私たちがすることはヘッダーを削除することです。ここで時間を変えると何が役に立ちますか?なぜ変更が必要ですか?

[root@FREL ~]# unlink hlh.txt
[root@FREL ~]#
[root@FREL ~]# stat hlt.txt
  File: hlt.txt
  Size: 100             Blocks: 8          IO Block: 4096   regular file
Device: fc00h/64512d    Inode: 994         Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2023-01-11 01:43:05.469703330 -0500
Modify: 2023-01-11 01:43:05.469703330 -0500
Change: 2023-01-11 01:47:49.588364704 -0500
 Birth: 2023-01-11 01:43:05.469703330 -0500

答え1

これは要件ですライブラリunlink()機能POSIX経由:

正常に完了したら、unlink()更新親ディレクトリの最後のデータ変更と最後のファイル状態変更タイムスタンプを表示する必要があります。また、ファイルのリンク数がゼロでない場合は、ファイルの最後のファイル状態変更タイムスタンプが更新されたものとしてマークする必要があります。

標準文書はこの要件を拡張しません。リンク数が1つ減少したため、ファイルの状態が変更されたことを反映するように、ctimeタイムスタンプ(「最後のファイル状態変更タイムスタンプ」)が更新されたとします。

関連情報