いいえ、ハードリンクは完全に異なります。ソフトリンクはWindowsショートカットに近くなります(重要な違いはありますが、シンボリックリンクはハードリンクよりもWindowsショートカットに似ています)。ハードリンクは別のものであり、ほとんど必要ないものです。
簡単に言うと、次のコマンドでソフトリンクが作成されます。
ln -s foo bar
次にを実行するとls -l
、以下が表示されます。
lrwxrwxrwx 1 terdon terdon 3 Mar 10 15:58 bar -> foo
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo
->
手段bar
へのリンクですfoo
。したがって、bar
たとえばテキストエディタでを開くと、実際には別のファイルが開きますfoo
。ただし、削除するbar
とショートカットが削除されるだけで、ファイルには影響しませんfoo
。
一方、ハードリンクは次のコマンドで作成されます。
ln foo bar
を実行するls -l
と、ファイル間の関係が示されません。
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 bar
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo
しかし、これは非常に重要です。これらは実際には同じファイルです。Unixファイルシステム上のファイルは、iノードを使用して保存されます。iノードは基本的に、ファイルシステムがファイル名を物理ハードドライブの特定の場所にマップする方法です。したがって、ハードリンクは、ターゲットと同じiノードを指すファイルです。これを記述する別の方法は、すべてのファイルが実際にiノードを指すハードリンクであることです。ファイルへのハードリンクを作成すると、同じiノードを指す新しいポインター(ファイル)がファイルシステムに作成されます。各iノードは、それを指す複数のファイルを持つことも、1つまたはまったく持たないこともできます。
これをより明確に理解するls -i
には、ファイルに関連付けられたiノードを表示するwhichを使用します。ソフトリンクとハードリンクを作成して、何が起こるか見てみましょう。
ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo
次に、inodeを確認します。
あなたは、両方の、上記の見ることができるようにfoo
とHardLinkToFoo
SoftLinkToFooは異なる1(16648036)を持っていながら、同じiノード(16648029)を持っています。
で名前を変更するfoo
とmv foo bar
どうなりますか?
赤色は、ソフトリンクが壊れていることを示しており、そのターゲットはもう見つかりません。これは、ソフトリンクがそのiノードではなくファイルの名前を指しているためです。名前を変更しても、iノードは同じままであるため、ハードリンクは問題ないことに注意してください。
要約すると、ハードリンクは実際には同じファイルの2つの兆候です。これらはディスクの同じセクションへのポインタです。ソフトリンクは単なるショートカットです。現実の世界を例にとると、ハードリンクは同じ電話回線の2つの異なる電話番号のようであり、ソフトリンクは同じ家に2つの異なる電話回線があるようなものです。