web-dev-qa-db-ja.com

ソフト(シンボリック)リンクとハードリンクの違いは何ですか?

Vistaでもソフトリンクを作成できる と聞きました 。では、UNIX/Linux/Vistaのソフト(シンボリック)リンクとハードリンクの違いは何ですか?

どちらか一方を使用する利点はありますか?それとも、2つの異なる目的を果たしているだけですか?

59
Aaron K

ハードリンクは伝統的に同じファイルシステム構造(unixspeakのiノード)を共有しますが、ソフトリンクはパス名のリダイレクトです。

  • ハードリンクは同じファイルシステム上にある必要があり、ソフトリンクはファイルシステムをまたぐことができます。
  • ハードリンクされたファイルは、どちらかを移動してもリンクされたままになります(コピーおよび削除メカニズムをトリガーする別のファイルシステムに移動しない限り)。ソフトリンクされたファイルは、ターゲット(元の)を移動すると、場合によってはリンクを移動すると破損します(絶対パスまたは相対パスを使用しましたか?それでも有効ですか?)。
  • ハードリンクされたファイルは同一ですが、オリジナルはソフトリンクで特別であり、オリジナルを削除するとデータが削除されます。 allハードリンクが削除されるまで、データは消えません。
  • ソフトリンクはanyターゲットを指すことができますが、ほとんどのOS /ファイルシステムでは、ファイルシステムグラフの循環を防ぐためにハードリンクディレクトリを許可しません(.および.. unixディレクトリのエントリで、ハードリンクです)。
  • ソフトリンクには、ファイルシステムウォーキングツールによる特別なサポートが必要になる場合があります。 readlink(2) をお読みください。

(いくつかの詳細は mat1t によって思い出されました。ありがとうございます。)

要約すると、シンボリック/ショートリンクは最初のファイルの場所へのショートカットとして機能しますが、ハードリンクはディスク上のファイルへのショートカットです。

ソフトリンクのターゲットを削除すると、ソフトリンクは機能しなくなりますが、ハードリンクのコピーを1つ削除すると、ハードリンクへのすべてのハードリンクが削除されるまで、ファイルはディスク上に残ります。事実上、すべてのファイル名はディスク上のファイルへのハードリンクです。

特定の制限もあります。たとえば、フォルダのハードリンクは作成できないと思いますが、フォルダのソフトリンクは作成できます。ソフトリンクは別のドライブやパーティション上のファイル/フォルダーを指すこともできますが、ハードリンクはできません。

10