2

ファイル間にいくつかのリンクを作成しているbashでシェルスクリプトを書いていますが、使用するリンクの種類(物理的またはシンボリック)がわかりません。調査を行った結果、物理リンクではなくシンボリック リンクを使用する方が一般的であることに気付きました。私の質問は、ファイルを直接指すハードリンクを使用する代わりに、間接参照が必要な場合にシンボリックリンクを使用する理由です (ファイルの実際の I ノードに関する情報を保護するために追加の I ノードを作成します)。

言い換えると:

どうして

ln -s ...

それ以外の

ln -P ...
4

4 に答える 4

4

シンボリック リンクの主な理由は、「ソフト」シンボリック リンクがファイル システムの境界を超える可能性があるためです。シンボリック リンクを表すファイルには、指定されているファイルの実際のパスである文字列が含まれます。そのパスのエンドユーザー表現が同じままである限り、シンボリックリンクは機能します。ファイルをシンボリックリンクの最後に移動すると、シンボリックリンクが指すリソースが存在しなくなるため、シンボリックリンクは古くなります (別名「ダングリング」)。

ハード (別名物理) シンボリックリンクは inode 層で機能します。inode は単一のファイル システム内でのみ一意であるため、ACROSS ファイル システムをハードリンクすることはできません。これが許可されていれば、inode が重複する状況に簡単に陥る可能性があります。利点は、ハードリンクのターゲットをどこに移動しても、リソースを指すリンクが「たどる」ことです。これは、リンクが inode 自体を指していて、実際のパス/リソース名が何であるかを気にしないためです。

于 2013-07-08T21:52:42.700 に答える
3

私の頭の上から:

  1. シンボル リンクはファイル システム間で機能します。ソースファイルとリンク先リンクがどのファイルシステムにあるかを追跡したくない場合、またはファイルシステム間でファイルを移動することがある場合は、シンボリックリンクを使用する方が面倒ではありません.

  2. $ @ $&emacsバックアップ ファイル。emacsで編集、file.txt変更を加えると、emacsは元のファイルのfile.txt~名前を変更し、変更を元のファイル名で保存します。へのハード リンクがあった場合は、file.txt現在は にリンクされてfile.txt~いますが、これはおそらく望んでいるものではありません。へのシンボリック リンクfile.txtは、更新された inode を引き続き指します。

于 2013-07-08T21:54:15.980 に答える
0
  • ハード リンクは、基本的にローカル FS 上の inode へのポインタであるため、ファイル システム間では意味がありません。シンボリック リンクは気にしません。彼らはただの名前なので、どこにでも住むことができます。

  • ディレクトリ リストを見てシンボリック リンクが表示されている場合は、それが別の特定の場所へのリンクであることがわかります。一方、ハードリンクにはそのような手がかりはありません。stat両方の名前が付けられるまで、重要なファイルで遊んでいたことに気付かないかもしれません。

于 2013-07-08T21:58:02.150 に答える
0

ハードリンクは同じファイルシステムでのみ機能し、inode の名前を変更します。ファイルは、その inode への最後のリンクがなくなった場合にのみ削除できます。通常、ハードリンクはディレクトリではなくファイル用です。

シンボリックリンクは、別のファイルへのパスを含む実際のファイルです。シンボリック リンクはファイル システム間でも機能します。また、異なるファイル タイプを指すこともできます。シンボリック リンクは、ファイルまたはディレクトリを指すこともできます。

于 2013-07-08T21:54:19.667 に答える