web-dev-qa-db-ja.com

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

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

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

9
icn

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

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

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

15
Flimzy

いいえ。ファイルへの(2番目以降のすべての)ハードリンクは、ディスク上の同じiノードへのポインターです。

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

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

3
Michael Lowman

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

2
bagavadhar