web-dev-qa-db-ja.com

ハードリンクを削除するとどうなりますか?

もしあなたがそうするなら rm myFilemyFileはハードリンクですが、どうなりますか?

62
trusktr

Unixでは、すべての通常のファイルはハードリンクです。 Unix(およびほとんど(すべて?))ファイルシステムのハードリンクは、inodeと呼ばれるものへの参照です。 inodeには参照カウンターがあり、ファイルへの「リンク」が1つある場合(通常のオペランド)、カウンターは1です。2番目、3番目、4番目などのリンクを作成すると、カウンター毎に1ずつ増加します。リンク(rm)を削除すると、カウンターが1つ減少(減少)します。リンクカウンターが0に達すると、ファイルシステムはinodeを削除し、スペースを使用可能としてマークします。

つまり、最後のリンクを削除しない限り、ファイルは残ります。

Edit:最後のリンクが削除されても、ファイルは残ります。これは、ファイルに含まれるデータのセキュリティを他のプロセスからアクセスできないようにする方法の1つです。ファイルシステムからデータを完全に削除するのは、データのメタデータで指定されているように、データへのリンクが0であり、どのプロセスでも使用されていない場合のみです。

これ IMHOは、ハードリンク(およびソフトリンクとの違い)を理解する最も簡単な方法です。

113
xenoterracide

テストは思ったより簡単でした。テキストファイルを作成し、ハードリンクしました。ハードリンクを削除するとnotハードリンクされているファイルが削除され、リンクされていたファイルはそのまま残ります。

13
trusktr

ディスク内のすべてのファイルは、実際にはドライブ上の実際のデータへのポインタです。 enter image description here

そのファイルのハードリンクを作成すると、ハードリンクされたファイルは、元のファイルが指していたのと同じデータを指します。

enter image description here

この例のように、a.txtはドライブにあるファイルのデータ(バイト)を指していました。ハードリンクb.txtが作成されると、a.txtが指していたものを指します。

したがって、それらの1つを削除しても、互いに分離されている他の1つには影響しません。

ただし、両方を削除すると、システムはディスク上のデータにそれを指すファイルがないことがわかるため、システムはそれを空き領域と見なし、必要に応じて上書きします。

1
ZOLDIK