Linuxのハードリンクとは何ですか?


9

私は周りを検索して、ハードリンクとシンボリックリンク(ソフトリンク)の違いを理解しようとしています。

私が見つかりました。このリンクは非常に便利です。しかし、私はまだはっきりしていません。ソフトリンクは元のファイルのコピーではないことを理解していますが、ハードリンクはコピーですか?

回答:


15

メール配信からの類推を使用すると、シンボリックリンクは転送アドレスのようなものです...シンボリックリンクを開こうとすると、そこに保存されている「ファイル」(ただし、ファイルではありません)が開かれ、それが表示されます。代わりに別の名前のファイルを見る必要があるため、代わりに他のファイルを開きます。

ハードリンクは、同じ場所に2つの住所があるようなものです。(もちろん、これは現実の世界では実際には不可能です)。何かがいずれかのファイル名(アドレス)を読み取ろうとすると、同じ物理ファイル(場所)を取得します。

したがって、ファイルは一度しか保存されないため(ただし、複数の名前で)、ハードリンクはコピーではありません。ただし、2つのファイル名から同じ情報にアクセスできるため、コピーのように動作します。


+1は非常にいい例えです。これで頭を悩ませようとしたときに私にとっては簡単になります。
ジョンガーデニア

1
+1、ただし2つの細かい詳細:1)現実には同じ場所に複数の住所を設定することは可能ですが、あまり一般的ではありません。2)あなたが持っている場合は、おそらくハードリンクとコピーとの間の最も重要な違いは、そのある/foo/bar、変更/fooも変更されます/bar、彼らはしているハードリンク(同じファイルのための彼らだ2名のため)場合ではなく、彼らはしている場合コピー(2つの完全に独立したファイルであるため)。
Dave Sherohman、2011年


3

ハードリンクを作成すると、同じファイルが2つの異なる場所に表示されることになります。ファイルは実際にはディスク上のデータブロックのセットへの参照にすぎないため、ハードリンクは別の参照を追加します。ファイルが本当に削除されることはほとんどありません。参照は削除されるだけなので、データにアクセスすることはできません。そのため、ハードリンクとして作成したファイルを削除しても、他の元のファイルはそのまま残り、その逆も同様です。

一方、シンボリックリンクは特定の名前のファイルにアクセスするための指示です。「このファイルを使用したい場合は、そこにあります」とプログラムに伝えます。これが、シンボリックリンクのターゲットを削除すると、シンボリックリンクが壊れる理由です。リンクを削除しても、ターゲットは影響を受けません。


2

* nixシステムのファイルには2つの部分があります。1つはデータ部分で、もう1つはiノードです。iノードは、メタ(HDD内の場所などのデータに関連する情報)情報を格納します。ハードリンクは、このiノードの正確なコピーを作成します。一方、sym linkは実際のiノードのiノードを指すiノードを作成します。したがって、ハードリンクのiノードデータはターゲットと同じですが、シンボリックリンクのデータは異なります。要するに、symリンクとハードリンクは、ファイルデータではなくiノードデータの内容によって異なります。これは、シンボリックリンクとハードリンクの違いについての私の理解です。これは開発者向けのものであり、私は開発者ではないため、最初はこれを理解するのに苦労しました。ああ知識のある人、私が間違っているなら私を訂正してください。


3
* nixの「ディレクトリ」は、ファイル名とiノード番号のリストです。ハードリンクは、同じiノード番号を持つ2つのディレクトリエントリであり、したがって、iノードのコピーではなく、まったく同じiノードを参照します。シンボリックリンクは、特定のiノードではなく、別のディレクトリエントリを(名前で)指すディレクトリエントリです。(OK、実際にはiノードがありますが、そのiノードはファイルのデータではなくディレクトリエントリを指します。)
Randy Orrison
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.