回答:
Unixでは、通常のファイルはすべてハードリンクです。Unix(およびほとんどの(すべて?))ファイルシステムのハードリンクは、と呼ばれるものへの参照inode
です。inode
あなたは、四分の一(通常の手口である)ファイルへの「リンク」2番目を作成するときにカウンタが1である、第三、等リンク、カウンタがインクリメントされる(増加)それぞれを有する場合、参照カウンタを有しています時間ごとに。rm
リンクを削除()すると、カウンターは1つ減少(減少)します。リンクカウンタが0に達すると、ファイルシステムはを削除し、inode
使用可能なスペースとしてマークします。
つまり、最後のリンクを削除しない限り、ファイルは残ります。
Edit:
最後のリンクが削除されても、ファイルは残ります。これは、ファイルに含まれるデータのセキュリティが他のプロセスからアクセスできないようにする方法の1つです。ファイルシステムからデータを完全に削除するのは、メタデータで指定されたデータへのリンクが0で、プロセスで使用されていない場合のみです。
この IMHOは、ハードリンク(およびソフトリンクとの違い)を理解する最も簡単な方法です。
unlink
編集されたときにファイルが開いている状況をカバーしていません。
/proc
、独立した(仮想)ファイルシステムであるため、@ OrangeDogは正確ではありません。
unlink()
1990年代前半にMS-DOSでCプログラミングをプレイし始めたとき、ファイルを削除するように呼び出すと、私は困惑しました。:)
テストは思ったよりも簡単でした。テキストファイルを作成し、そのファイルにハードリンクしました。ハードリンクを削除しても、ハードリンクされているファイルは削除されず、リンクされたファイルは元の場所に残ります。
ディスク内のすべてのファイルは、実際にはドライブ上の実際のデータへのポインターです。
そのファイルのハードリンクを作成すると、ハードリンクされたファイルは元のファイルが指していたのと同じデータを指します。
この例のように、a.txtはドライブ内のファイルのデータ(バイト)を指していましたが、ハードリンクb.txtが作成されると、a.txtが指していたものを指します。
したがって、それらの1つを削除しても、互いに分離されている他の1つには影響しません。
ただし、両方を削除すると、システムはディスク上のデータにそれを指すファイルがないことを確認します。そのため、システムはそれを空き領域と見なし、必要に応じて上書きします。
FILE "A.txt"
と同じことを明確にすることが重要だと思います。リンクは本当に黒い矢印です。LINK "B.txt"
FILE
LINK
unlink()
です。