質問: ハードリンクは既存の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が別々で持っているということなのでしょうか?
回答: foo.txt と bar.txt 同じデータを参照しています。 次のように考えるとイメージがつかみやすいと思います。 * i-node → ファイルの実体 * foo.txt や bar.txt → i-nodeへのリンク 同じ i-node を指している 2つのハードリンクは、リンク先の実体が同じものですので、全く同じデータが参照されます。 また、i-nodeには ハードリンクの数を表すカウント情報が含まれています。 この、カウントが 0 になると iノードは削除されます。(つまりファイルが削除されます) Linux で `ls -il` を実行すると i-node番号 と リンク数が表示することができます。 試していただくと foo.txtとbar.txtは同じ i-node番号、リンク数が表示されるはずです。 また、新たに作成したファイルは、ハードリンク数が 1 であることが確認出来ます。 つまり普通のファイルはカウント数 1 の ハードリンクなのです。