33582


ハードリンクは既存のiノードを参照するディレクトリエントリを追加する事と習いました。  
例えば  
ln foo.txt bar.txtとすると、  
foo.txtとbar.txtは同じiノードを参照する事になります。

ここでrm foo.txtとした場合、bar.txtは既存のiノードを参照している状態だと思います。

さらにbar.txtを削除した場合は参照元のiノードも削除されるということで合っていますか？

1つわからなかったのがiノード自体はファイルの長さ、モード、iノード番号などの情報しか持っていないようですが、foo.txtとbar.txtの中に記述されているデータはfoo.txtとbar.txtが別々で持っているということなのでしょうか？


CC BY-SA 3.0
2017-03-27T04:34:48.773
33562
2017-03-28T20:33:53.587
2017-03-28T20:33:53.587
3054
15279
question
linux unix filesystems
inodeへの参照（ハードリンク）が無くなると、そのinodeは削除されますか？


> さらにbar.txtを削除した場合は参照元のiノードも削除されるということで合っていますか？

はい。

> 1つわからなかったのがiノード自体はファイルの長さ、モード、iノード番号などの情報しか持っていないようですが、

これはVFSでのiノードの定義のことを言っているものと思います。各ファイルシステムではVFSでの定義をもとに、データ情報などファイルシステム固有の情報を含んだiノードを定義しています。


CC BY-SA 3.0
2017-03-27T06:19:50.810
33567
2017-03-27T06:19:50.810
4010
33562
answer


foo.txt と bar.txt 同じデータを参照しています。

次のように考えるとイメージがつかみやすいと思います。

  * i-node → ファイルの実体
  * foo.txt や bar.txt → i-nodeへのリンク

同じ i-node を指している ２つのハードリンクは、リンク先の実体が同じものですので、全く同じデータが参照されます。

また、i-nodeには ハードリンクの数を表すカウント情報が含まれています。  
この、カウントが 0 になると iノードは削除されます。（つまりファイルが削除されます）

Linux で `ls -il` を実行すると i-node番号 と リンク数が表示することができます。  
試していただくと foo.txtとbar.txtは同じ i-node番号、リンク数が表示されるはずです。

また、新たに作成したファイルは、ハードリンク数が 1 であることが確認出来ます。  
つまり普通のファイルはカウント数 1 の ハードリンクなのです。


CC BY-SA 3.0
2017-03-27T13:07:00.033
33582
2017-03-27T13:07:00.033
5008
33562
answer