シンボリックリンクとハードリンクの違いは何ですか?

シンボリックリンクとハードリンクの違いは何ですか?

いつ他のものを使用しますか?

答え1

ハードリンクとソフトリンクの意味が異なるため、さまざまな用途に適しています。

ハードリンク:

  • 他のディレクトリエントリと区別できないためすべてディレクトリエントリはハードリンクです。
  • 同じ inode への別のハードリンクを壊さずに「オリジナル」を移動または削除することができます。
  • 同じファイルシステムでのみ使用できます。
  • 権限は「ソース」と同じでなければなりません(権限はディレクトリエントリではなくinodeに保存されます)。
  • のみ作成できますディレクトリ以外のファイル

シンボリックリンク(ソフトリンク)

  • 別のファイルパスを指すことを記録するだけです。 (ls -lシンボリックリンクが指すパスが表示されます)
  • ソースを移動または削除すると、この操作は中止されます。 (場合によっては、実際には現在特定の場所を占めているファイルを指すリンクが必要な場合があります。)
  • 他のファイルシステムのファイルを指すことがある
  • ディレクトリを指すことができます
  • 一部のファイルシステム形式では、シンボリックリンクが指すファイルとは異なる権限を持つことができます(これは一般的ではありません)。

答え2

2種類のリンクの目的は、ファイルが同時に2つの場所に表示される方法を提供することです。これは多くの用途に使用されます。 10番のうち9番はシンボリックリンクを使いたいでしょう。

シンボリックリンクまたは「symlink」は、Windowsのショートカットと少し似て動作します。シンボリックリンクの内容は、ファイル/ディレクトリの実際の場所へのポインタです。実際のファイルを削除すると、シンボリックリンクが「ぶら下がって」機能しなくなります。シンボリックリンクを削除しても、実際のファイルは削除されません。単一ファイルへのシンボリックリンク(または他のシンボリックリンク)を好きなだけ持つことができます。

ただし、Windowsとは異なり、シェルやアプリケーションレベルではなくファイルシステムレベルで動作するため、ほぼすべてのアプリケーションが期待どおりにシンボリックリンクに従います。 ls -alシンボリックリンクが「指す」場所を確認するためのクイック方法として使用できます。

ハードリンクは低レベルでも動作します。ハードリンクは、ファイルの物理ファイルシステムレベルの物理ディレクトリエントリです。技術的には、ディレクトリエントリはハードリンクなので、すべてのファイルにはディレクトリのどこかに少なくとも1つのハードリンクがあります。ハードリンクは、そのファイルが指すファイルとは分離されません。ファイルに異なるディレクトリに複数のハードリンクがある場合、同様のユーティリティを使用してハードリンクを削除すると、rmすべてのハードリンクが消えるまでファイルは実際には削除されません。

意図的にファイルが削除されないようにしたり、パーティションや他のファイルシステム関連の操作で奇妙な下位レベルの操作を実行しない限り、ハードリンクを使用することは一般的または必須であるとは想像できません。編集:しかし、この質問に対する他の答えには素晴らしいアイデアがあります!

答え3

ハードリンクは、ディスクベースのバックアップメカニズムに役立ちます。これは、変更されていないファイルのスペースを共有しながら、各バックアップごとに完全なディレクトリツリーを持つことができ、ファイルシステムが参照カウントを追跡するため、バックアップによって最後の参照が作成された時期を知ることができるためです。スペースの問題により期限切れ/削除されたバージョンで、そのバージョンが消えた場合、そのバージョンが使用したスペースが自動的に回収されます。同じ理由で、一部のメールクライアントは、メールを複数のフォルダに保存するためにも使用されます。

答え4

ハードリンクは同じディスク領域への参照にすぎないため、他のファイルシステムのエントリをハードリンクすることはできません。

シンボリックリンクは、同じファイルシステムに存在する場合とない場合がある他のファイル(Windowsのショートカット)にリンクするファイルです。

編集:さらに詳しく説明します。存在するすべてのファイルには少なくとも1つのハードリンクがあります。ハードリンクは方法ファイルシステムのinodeコンテンツにアクセスします。ファイルのinode番号ls -iとハードリンク数を取得できます。statこの例は次のとおりです。

$ stat plantilla-disenos.odt 
  File: «plantilla-disenos.odt»
  Size: 12367       Blocks: 32         IO Block: 4096   fichero regular
Device: 803h/2051d  Inode: 319875      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   d4rio)   Gid: ( 1000/   d4rio)
Access: 2011-02-11 21:36:19.000000000 -0300
Modify: 2010-03-02 23:27:28.000000000 -0300
Change: 2010-04-10 17:46:27.000000000 -0300

この参照について @geekosaur に感謝します。

カーネルはシンボリックリンクを拡張するためにパス名をinodeに変換(ディレクトリツリーナビゲーション)を再開する必要がありますが、ハードリンクはすべて同じinodeを使用します。 (既存のUnixでこれを行うカーネル関数の名前では、nameiという名前をよく見ることができます。)

そしてこれは(編集済み):

ハードリンクはディスクベースに便利です。増加バックアップメカニズムAppleのタイムマシンのように、変更されていないファイルのスペースを共有しながら、各バックアップの完全なディレクトリツリーを持つことができ、ファイルシステムは参照数を追跡するため、特定のバージョンへの最後の参照がバックアップの有効期限/スペース削除によって消失した場合に、その理由で使用されたスペースは自動的に回収されます。同じ理由で、一部のメールクライアントは、メールを複数のフォルダに保持するためにも使用されます。

乾杯

関連情報