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


回答:


110

Unixでは、通常のファイルはすべてハードリンクです。Unix(およびほとんどの(すべて?))ファイルシステムのハードリンクは、と呼ばれるものへの参照inodeです。inodeあなたは、四分の一(通常の手口である)ファイルへの「リンク」2番目を作成するときにカウンタが1である、第三、等リンク、カウンタがインクリメントされる(増加)それぞれを有する場合、参照カウンタを有しています時間ごとに。rmリンクを削除()すると、カウンターは1つ減少(減少)します。リンクカウンタが0に達すると、ファイルシステムはを削除し、inode使用可能なスペースとしてマークします。

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

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

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


7
また、ファイルを削除するためのシステムコールはunlink()です。
mouviciel

1
これは、最後のリンクがunlink編集されたときにファイルが開いている状況をカバーしていません。
cjm

5
ハードリンクはファイルシステムを横断できず/proc、独立した(仮想)ファイルシステムであるため、@ OrangeDogは正確ではありません。
cjm

2
/ procは、カーネルの内部データ構造もミラーリングします(Linuxカーネルが、カーネルメモリへの直接アクセスを一切与えずに、特定のデータを適切に定義された形式で公開する方法です)。したがって、カーネルがファイルが開いているという事実を追跡し、procfsを通じてその情報を公開していると言う方が正確です。
CVn

1
そして、はい、unlink()1990年代前半にMS-DOSでCプログラミングをプレイし始めたとき、ファイルを削除するように呼び出すと、私は困惑しました。:)
CVn

12

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


1
これは本当ですが、ない全体像
xenoterracide

3
重要なのは、テキストファイルを作成するとハードリンクも追加されることです。* NIXファイルシステムでは、すべてのファイル(inode)を少なくとも1回はディレクトリ構造にハードリンクする必要があります。
ハーミングモニカを停止

0

ディスク内のすべてのファイルは、実際にはドライブ上の実際のデータへのポインターです。 ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

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

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

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


2
特に1つをaともう1つをa と呼んでいるのFILE "A.txt"と同じことを明確にすることが重要だと思います。リンクは本当に黒い矢印です。LINK "B.txt"FILELINK
ロアイマ

はい、b.txtがハードリンクファイルであることは明らかではないと思っていました...
ZOLDIK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.