890

最近、就職の面接でこれを聞かれました。私は正直に言って、シンボリックリンクがどのように動作し、どのように作成するかは知っていると言いましたが、ハードリンクの使用法とシンボリックリンクとの違いについては理解していません。

4

24 に答える 24

900

ファイルシステムの下では、ファイルはiノードで表されます。(または、複数のiノードですか?わかりません。)

ファイルシステム内のファイルは、基本的にiノードへのリンクです。
ハードリンクは、同じ基になるiノードへのリンクを持つ別のファイルを作成するだけです。

ファイルを削除すると、基になるiノードへのリンクが1つ削除されます。iノードへのすべてのリンクが削除された場合にのみ、iノードが削除されます(または削除可能/上書き可能)。

シンボリックリンクは、ファイルシステム内の別の名前へのリンクです。

ハードリンクが作成されると、iノードへのリンクになります。元のファイルを削除、名前変更、または移動しても、基になるiノードにリンクするため、ハードリンクには影響しません。iノード上のデータへの変更は、そのiノードを参照するすべてのファイルに反映されます。

注:ハードリンクは、同じファイルシステム内でのみ有効です。シンボリックリンクは、単に別のファイルの名前であるため、ファイルシステムにまたがることができます。

于 2008-10-09T04:07:48.293 に答える
534

ことわざにあるように、写真は千の言葉に値します。これが私がそれを視覚化する方法です:

ここに画像の説明を入力

その画像に到達する方法は次のとおりです。

  1. myfile.txt新しい i ノード (ファイルのメタデータを含み、その内容を含むデータのブロック、つまりテキスト "Hello, World!" を指す) を指す名前をファイル システムに作成します。

    $ echo 'Hello, World!' > myfile.txt
    
  2. my-hard-linkfile へのハードリンクを作成しますmyfile.txt。これは、「指し示すのと同じ inode をmyfile.txt指すファイルを作成する」ことを意味します。

    $ ln myfile.txt my-hard-link
    
  3. my-soft-linkファイルへのソフトリンクを作成しますmyfile.txt。これは、「ファイルを指す必要があるファイルを作成する」ことを意味しますmyfile.txt

    $ ln -s myfile.txt my-soft-link
    

myfile.txtが削除 (または移動) された場合に何my-hard-linkが起こるかを見てくださいmy-soft-link。他の回答では、それぞれの長所と短所について説明しています。

于 2015-04-22T01:45:24.817 に答える
76

ハード リンクは、元のファイルが移動している場合に便利です。たとえば、ファイルを /bin から /usr/bin または /usr/local/bin に移動します。/bin 内のファイルへのシンボリック リンクはこれによって壊れますが、ファイルの inode への直接リンクであるハードリンクは気にしません。

ハード リンクは、ディレクトリ エントリを占有するだけなので、必要なディスク容量が少ない場合がありますが、シンボリック リンクは、それが指す名前を格納するために独自の inode を必要とします。

ハード リンクは、解決にかかる時間も短くなります。シンボリック リンクは、シンボリック リンクされたディレクトリにある他のシンボリック リンクを指すことができます。これらの一部は、NFS またはその他の高遅延ファイル システム上にある可能性があるため、ネットワーク トラフィックが解決される可能性があります。常に同じファイル システム上にあるハード リンクは、常に 1 回のルックアップで解決され、ネットワーク レイテンシが発生することはありません (NFS ファイル システム上のハードリンクの場合、NFS サーバーが解決を行い、サーバーには見えません)。クライアントシステム)。時にはこれが重要です。私にとってはそうではありませんが、これが重要な高性能システムを想像することはできます。

また、mmap(2) や open(2) のようなものでも、ハードリンクと同じ機能を使用してファイルの inode をアクティブに保ち、ファイルが unlink(2) された場合でも、inode が残り、プロセスが引き続きアクセスできるようにすると思います。プロセスが閉じられると、ファイルは実際に消えます。これにより、はるかに安全な一時ファイルが可能になります(オープンとリンク解除をアトミックに行うことができれば、私が覚えていないPOSIX APIが存在する可能性があります)。誰もアクセスできないようにデータを保護します。/proc によってすべてのユーザーがファイル ディスクリプタを参照できるようになる前は、これは真実でしたが、それはまた別の話です。

そういえば、プロセス A で開いているが、ファイル システムでリンクされていないファイルを回復するには、ハードリンクを使用して inode リンクを再作成することを中心に展開するため、ファイルを開いているプロセスがファイルを閉じたり消えたりしても、ファイルは消えません。

于 2008-10-09T05:22:59.407 に答える
40

ソフトリンク:

ソフトまたはシンボリックは、元のファイルへのショートカットです....元のファイルを削除すると、ショートカットは失敗し、ショートカットのみを削除すると、元のファイルには何も起こりません。

ソフトリンク構文:ln -s Pathof_Target_file link

出力: link -> ./Target_file

証拠: readlink link また、ls -l link出力では、最初の文字がllrwxrwxrwxとして表示されます。これは、ファイルがソフト リンクであることを示しています。

リンクの削除: unlink link

注:必要に応じて、現在のディレクトリから別の場所に移動した後でも、ソフトリンクを機能させることができます。ソフトリンクを作成するときは、相対パスではなく絶対パスを指定してください。つまり (./Target_file ではなく、/root/user/Target_file から開始)

ハードリンク:

ハード リンクは、ミラー コピーまたは同じファイルへの複数のパスのようなものです。file1 に何かをすると、ファイル 2 に表示されます。一方を削除しても、もう一方は問題ありません。

i ノード (またはファイル) は、すべての (ハード) リンクまたは (同じファイル) i ノードへのすべてのパスが削除された場合にのみ削除されます。

ハード リンクが作成されると、リンクには元のファイルの inode が含まれます。元のファイルを削除したり、元のファイルを移動したりしても、基になる i ノードにリンクしているため、ハード リンクには影響しません。inode 上のデータへの変更は、その inode を参照するすべてのファイルに反映されます。

ハード リンクの構文:ln Target_file link

出力:リンク名のファイルが、Targetfile と同じ inode 番号で作成されます。

証明: ls -i link Target_file (inode を確認してください)

リンクの削除: rm -f link (通常のファイルと同じようにリンクを削除します)

: シンボリック リンクは単に別のファイルの名前であるため、複数のファイル システムにまたがることができます。一方、ハード リンクは同じファイル システム内でのみ有効です。

シンボリック リンクには、ハード リンクにはないいくつかの機能があります。

  • ファイルコンテンツへのハードリンクポイント。一方、ソフトリンクはファイル名を指しています。
  • ハードリンクのサイズはコンテンツのサイズですが、ソフトリンクはファイル名のサイズです。
  • ハード リンクは同じ inode を共有します。ソフトリンクはそうではありません。
  • ハード リンクはファイル システムをまたがることはできません。ソフトリンクはそうです。
  • シンボリック リンクがどこを指しているかがすぐにわかりますが、ハード リンクでは、ファイル システム全体を調べて、同じ inode を共有しているファイルを見つける必要があります。

    # find / -inum 517333

    /home/bobbin/sync.sh
    /root/synchro
    
  • ハードリンクはディレクトリを指すことはできません。

ハード リンクには 2 つの制限があります。

  • ディレクトリはハード リンクできません。Linux では、これがディレクトリの非循環ツリー構造を維持することを許可していません。
  • ファイルシステム間でハード リンクを作成することはできません。異なるファイルシステムには異なる独立した inode テーブルがあるため、両方のファイルは同じファイルシステム上にある必要があります (2 つのファイルは異なるファイルシステムにありますが、同じ inode 番号を持つ場合は異なります)。
于 2014-05-02T06:55:50.680 に答える
36

ハード リンクとシンボリック リンクの違いを確認する簡単な方法は、簡単な例です。ファイルへのハードリンクは、ファイルが保存されている場所、またはそのファイルの inode を指します。シンボリック リンクは、実際のファイル自体を指します。

したがって、「a」というファイルがあり、すべてファイル「a」を参照するハードリンク「b」とシンボリックリンク「c」を作成するとします。

echo "111" > a
ln a b
ln -s a c

「a」、「b」、および「c」の出力は次のようになります。

cat a --> 111
cat b --> 111
cat c --> 111

ここで、ファイル "a" を削除して、"a"、"b"、および "c" の出力がどうなるかを見てみましょう。

rm a
cat a --> No such file or directory
cat b --> 111
cat c --> No such file or directory

どうしたの?

ファイル "c" はファイル "a" 自体を指しているため、ファイル "a" が削除されると、ファイル "c" には指すものがなくなり、実際にはファイルも削除されます。

ただし、ファイル「b」は、ファイル「a」のストレージの場所または inode を指しています。そのため、ファイル「a」が削除されると、それはもはや i ノードを指しませんが、ファイル「b」が削除されるため、i ノードは、それを指しているハード リンクがなくなるまで、「a」に属するコンテンツを格納し続けます。

于 2014-12-08T20:09:39.747 に答える
31

シンボリックリンクはパス名にリンクしています。これはシステムのファイルツリーのどこにあってもかまいません。リンクの作成時に存在している必要はありません。ターゲットパスは、相対パスまたは絶対パスにすることができます。

ハードリンクはiノードへの追加のポインタです。つまり、ハードリンクはターゲットと同じボリュームにのみ存在できます。ファイルへの追加のハードリンクは、ファイルの参照に使用される「元の」名前と区別できません。

于 2008-10-09T04:09:05.530 に答える
22

ウィキペディアを紹介します。

いくつかのポイント:

  • シンボリックリンクは、ハードリンクとは異なり、ファイルシステム間を移動できます(ほとんどの場合)。
  • シンボリックリンクはディレクトリを指すことができます。
  • ハードリンクはファイルを指し、複数の名前で同じファイルを参照できるようにします。
  • 少なくとも1つのリンクがある限り、データは引き続き利用可能です。
于 2008-10-09T04:11:32.763 に答える
9

増分バックアップを行う場合、ハード リンクは非常に便利です。たとえば、 rsnapshotを参照してください。アイデアは、ハードリンクを使用してコピーを行うことです:

  • バックアップ番号 n を n + 1 にコピー
  • バックアップ n - 1 を n にコピー
  • ...
  • バックアップ 0 をバックアップ 1 にコピー
  • 変更されたファイルでバックアップ 0 を更新します。

すべての増分バックアップは、変更されていないファイルの同じ inode セットを指すため、新しいバックアップは、行った変更以外に余分なスペースを占有しません。

于 2008-10-09T06:54:24.993 に答える
8

ハードリンク vs ソフトリンク

ハードリンク対ソフトリンクは、この画像で簡単に説明できます。

于 2017-12-13T06:29:18.237 に答える
6

MSDNから、

シンボリックリンク

シンボリック リンクは、別のファイル システム オブジェクトを指すファイル システム オブジェクトです。指し示されるオブジェクトは、ターゲットと呼ばれます。

シンボリック リンクはユーザーに対して透過的です。リンクは通常のファイルまたはディレクトリとして表示され、ユーザーまたはアプリケーションがまったく同じ方法で操作できます。

シンボリック リンクは、UNIX オペレーティング システムとの移行およびアプリケーションの互換性を支援するように設計されています。Microsoft は、シンボリック リンクを UNIX リンクと同じように機能するように実装しました。

シンボリック リンクは、絶対リンクまたは相対リンクのいずれかです。絶対リンクは、パス名の各部分を指定するリンクです。相対リンクは、相対リンク指定子が指定されたパスのどこにあるかを基準にして決定されます

絶対シンボリックリンクの例

X: "C:\alpha\beta\absLink\gamma\file"
Link: "absLink" maps to "\\machineB\share"
Modified Path: "\\machineB\share\gamma\file"

相対シンボリック リンクの例

X: C:\alpha\beta\link\gamma\file
Link: "link" maps to "..\..\theta"
Modified Path: "C:\alpha\beta\..\..\theta\gamma\file"
Final Path: "C:\theta\gamma\file"

ハードリンク

ハードリンクは、複数のパスが同じボリューム内の1 つのファイルを参照するファイル システム表現です。

Windows でハード リンクを作成するには、リンクを作成する場所に移動し、次のコマンドを入力します。

mklink /H Link_name target_path

ハード リンクは、作成された順序に関係なく、任意の順序で削除できることに注意してください。また、次の場合はハードリンクを作成できません。

  • 参照は異なるローカル ドライブにあります
  • 参照には、ネットワーク ドライブが含まれます。つまり、参照の 1 つはネットワーク ドライブです。
  • 作成するハードリンクはターゲットと同じパスにあります

ジャンクション

NTFS は、ジャンクションと呼ばれる別のリンク タイプをサポートしています。MSDN は次のように定義しています。

ジャンクション (ソフト リンクとも呼ばれます) は、参照するストレージ オブジェクトが個別のディレクトリであり、ジャンクションが同じコンピューター上の異なるローカル ボリュームにあるディレクトリをリンクできるという点で、ハード リンクとは異なります。それ以外の場合、ジャンクションはハード リンクと同じように動作します。

ハード リンク セクションとジャンクション セクションの太字部分は、両者の基本的な違いを示しています。

Windows でジャンクションを作成するコマンド。リンクを作成する場所に移動し、次のように入力します。

mklink /J link_name target_path
于 2015-12-24T15:24:05.257 に答える
5

Nick の質問に追加します:ハード リンクが役立つ、または必要になるのはいつですか? シンボリック リンクが役に立たない唯一のアプリケーションは、chroot 環境でシステム ファイルのコピーを提供することです。

于 2008-10-09T05:05:43.560 に答える
3

また:

  1. ハードリンクの読み取りパフォーマンスは、シンボリックリンクよりも優れています (マイクロパフォーマンス)
  2. シンボリック リンクは、コピー、バージョン管理などが可能です。つまり、実際のファイルです。一方、ハード リンクは少し低いレベルのものであり、シンボリック リンクと比較して、ハード リンクを通常のファイルとしてではなくハード リンクとして操作する手段を提供するツールが少ないことがわかります。
于 2009-11-04T08:55:20.860 に答える
3

通常の「ファイル」と考えられるものは、実際には 2 つの別個のものです。ファイルのデータとディレクトリ エントリです。ファイルのハード リンクを作成すると、実際には、同じデータを参照する 2 番目のディレクトリ エントリが作成されます。両方のディレクトリ エントリの機能はまったく同じです。それぞれを使用してファイルを開いて読み取ることができます。したがって、実際には「ファイルとハードリンク」ではなく、「2 つのディレクトリエントリを持つファイルデータ」があります。ファイルの削除と考えると、実際にはディレクトリ エントリが削除されます。データの最後のディレクトリ エントリが削除されると、データ自体も削除されます。ディレクトリエントリが1つしかない通常のファイルの場合、ディレクトリエントリを削除すると、通常どおりデータが削除されます。(ファイルが開かれている間、OS はファイルへの一時的なリンクを作成します。

例として、ファイル A.txt、ハード リンク B.txt を作成し、A.txt を削除します。A.txt を作成すると、いくつかのデータが作成され、ディレクトリ エントリ A.txt. ハード リンクを作成すると、まったく同じデータを指す別のディレクトリ エントリ B.txt が作成されました。A.txt を削除しても、最初にファイル B.txt を作成した場合とまったく同じように、すべてのデータと 1 つのディレクトリ エントリ B.txt が残ります。

ソフト リンクは、データを含まず、別のディレクトリ エントリのパスであることを除けば、(ほぼ) 通常のファイルです。ソフト リンクが参照するファイルを削除すると、ソフト リンクにはディレクトリ エントリを指していないパスが含まれます。これは壊れています。ソフト リンクを削除すると、他のファイルを削除するのと同じように、それが指すファイルは影響を受けません。

于 2014-11-28T15:32:19.357 に答える
3

単純に、ハード リンク : ファイルに新しい名前を追加するだけです。つまり、ファイルには同時に多くの名前を付けることができます。すべての名前は互いに同じであり、誰も優先しません。ハード リンクはすべてのコンテンツをコピーすることを意味するものではありません。 of file と make new file はそうではなく、知られる代替名を作成するだけです..

シンボリック リンク (symlink) : 別のファイルへのファイル ポインターです。シンボリック リンクが、後で削除される既存のファイルを指している場合、シンボリック リンクは、その名前がもはやファイルを指定していなくても、同じファイル名を指し続けます。

于 2013-08-05T05:11:19.607 に答える
2

上記のすべての回答に加えて、ハードリンク ファイルとソフトリンク ファイルの検索の違いは次のように理解できます。

f6という名前のディレクトリだけでなく、現在のディレクトリにもファイルがありますt2

f1およびという名前のファイルは、./t2/f2へのシンボリック リンクf6です。

f7とという名前のファイル./t2/f8は のハード リンクですf6

ソフトリンクとハードリンクを見つけるには、次を使用できます。

$ find -L . -samefile f6 

> ./f1
> ./f6
> ./f7
> ./t2/f2
> ./t2/f8

ハードリンクのみを見つけるには、次を使用できます。

$ find . -xdev -samefile f6

> ./f6
> ./f7
> ./t2/f8

ハードリンクは同じファイル システム上に作成できるため、同じファイル システム/マウント ポイント内の-Lオプションを使用しない (オプションを使用する) すべてのハードリンクを検索できます。-xdev不要な検索を別のマウント ポイントに保存します。

したがって、ハードリンクの検索は、ソフトリンクの検索よりも多少高速です (間違っているか明確でない場合は修正してください)。

于 2012-01-16T14:03:17.060 に答える
1

シンボリック リンクは、ハード リンクと同様に、ファイルに別の名前を付けます。ただし、シンボリック リンクが残っている場合でも、ファイルを削除できます。

于 2014-11-25T06:26:13.567 に答える
0

一般的なシナリオであるソフトウェアのインストールで、ハード リンクを理解する簡単な方法を見つけました。

ある日、インストール用のソフトウェアを Downloads フォルダにダウンロードしました。sudo make install を実行した後、一部の実行可能ファイルがローカルの bin フォルダーにコピーされました。ここで、cp はハード リンクを作成します。私はソフトウェアに満足していましたが、ダウンロードは長期的には良い場所ではないことにすぐに気付きました。そのため、ソフトウェアフォルダーをソースディレクトリに移動しました。Windows のように、ターゲット リンクのことを気にせずに、以前と同じようにソフトウェアを実行できます。これは、ハード リンクが inode を直接検出し、他のファイルを検出することを意味します。

于 2021-01-04T03:35:54.510 に答える