ウィキペディアでは、ハードリンクを次のように定義しています。
ファイルシステム上のファイルに名前を関連付けるディレクトリエントリ。(ディレクトリ自体は、そのようなエントリのリストを含む特別な種類のファイルです。)この用語は、同じファイルに対して複数のハードリンクを作成できるファイルシステムで使用されます。
ハードリンクの概念がWindowsのショートカットの概念と同等かどうか疑問に思っています。
ハードリンクがショートカットと同等でない場合、ハードリンクに最も近いWindows機能は何ですか?
ウィキペディアでは、ハードリンクを次のように定義しています。
ファイルシステム上のファイルに名前を関連付けるディレクトリエントリ。(ディレクトリ自体は、そのようなエントリのリストを含む特別な種類のファイルです。)この用語は、同じファイルに対して複数のハードリンクを作成できるファイルシステムで使用されます。
ハードリンクの概念がWindowsのショートカットの概念と同等かどうか疑問に思っています。
ハードリンクがショートカットと同等でない場合、ハードリンクに最も近いWindows機能は何ですか?
回答:
いいえ、ハードリンクは完全に異なります。ソフトリンクは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とHardLinkToFooSoftLinkToFooは異なる1(16648036)を持っていながら、同じiノード(16648029)を持っています。
で名前を変更するfooとmv foo barどうなりますか?
赤色は、ソフトリンクが壊れていることを示しており、そのターゲットはもう見つかりません。これは、ソフトリンクがそのiノードではなくファイルの名前を指しているためです。名前を変更しても、iノードは同じままであるため、ハードリンクは問題ないことに注意してください。
要約すると、ハードリンクは実際には同じファイルの2つの兆候です。これらはディスクの同じセクションへのポインタです。ソフトリンクは単なるショートカットです。現実の世界を例にとると、ハードリンクは同じ電話回線の2つの異なる電話番号のようであり、ソフトリンクは同じ家に2つの異なる電話回線があるようなものです。
rmまたはを介してunlink())削除すると、ファイルの内容で占有されているブロックが解放され、リンクカウントがゼロに達するまでリンクカウントが減少するだけです。「ハードリンクは実際には同じファイルの2つのインスタンスである」と言うのは、2つの名前が同じiノードを指し、したがって同じコンテンツを指すので、ファイル自体の2つのインスタンスが存在するのではなく、どんな意味でも。
ソフトリンクとハードリンクが何であるかについては十分な説明がありますが、1つ明確にする必要があります。
Windowsのショートカットは、 ソフトリンクでもハードリンクでもないか、同等のものです。ファイルシステムレベルでは、これらは単なるファイルです。それらの構造を理解し、それらをリンクとして解釈するのはシェルです。Windowsショートカットは、ファイルシステム(プリンター、コントロールパネルアイテム、仮想フォルダー)に関連しないシェル名前空間内のオブジェクトを指すこともできます。
Windowsショートカットには、ファイルシステムオブジェクトの名前に加えて、PIDL(シェル名前空間内の不透明なバイナリ「パス」)、説明、ホットキー、アイコン、作業ディレクトリの情報が含まれています。Windowsは、NTFSファイルシステムが使用されている場合、壊れたショートカットを修正するためにNTFSオブジェクト識別子も追加します。
Windowsショートカットの大まかな同等物は.desktopファイルです。SuperUserに関する次の質問を参照してください。Linuxに.lnkに相当するものはありますか?
いいえ。Linuxの場合、動作は異なります。
各ファイルは、「inode」というオブジェクトで表されます。すべてのiノードには番号(ID)が関連付けられています。
私たちが知っているように、人間は数字ではなく名前を覚えるのが苦手です。(それが電話帳の進化の仕方です)
そのため、各iノードに人間が読める名前を付けるために、filenameが写真に入ってきました。基本的に、ハードリンクはファイル名をiノードにバインドします。iノードは複数のハードリンクを持つことができます。特定のiノードにハードリンクが存在しない場合、iノードが使用するディスク容量は新しいファイル用に再割り当てされる場合があります。つまり、ファイルごとに少なくとも1つのハードリンクが存在する必要があります。ファイル名(ファイルブラウザに表示されるファイル名/アイコンとして表示される)自体はハードリンクです。
Windowsでは、ショートカットは個別のファイル(* .lnkファイル)です。元のファイルに関する情報(当然のことながらファイルパス)が含まれています。Linuxの認識では、Windowsショートカットは、「。lnk」で終わるファイル名にハードリンクされた別のiノードになります。
Windowsでは、NTFSファイルシステムがある場合、ハードリンクも作成できます。
fsutil hardlink create target_file source_file
ファイルは同じ論理ドライブ上になければなりません。
大きな違いは、フォルダーではなくファイルに対してハードリンクを作成できないことです。
ショートカットはフォルダ用に作成できるため、同等とは言えません。
あなたの質問は、シンボリックリンクまたはソフトリンク とショートカットの違いであるべきです。
これによると:
シンボリックリンクはファイルシステムレベルであり、すべてが元のファイルと見なされます。アプリケーションは、シンボリックリンクを使用するために特別なサポートを必要としません。
「ショートカット」は、宛先ファイルまたはディレクトリへの参照を持つ通常のファイルです。
したがって、ショートカットをクリックするとディレクトリが実際のファイルに変更されますが、ソフトリンクはその場所を実際のファイルのように参照します。
WindowsショートカットとLinuxランチャー(特定の場所を指す)は同一です。