ハードリンクはWindowsショートカットと同等ですか?


52

ウィキペディアでは、ハードリンクを次のように定義しています。

ファイルシステム上のファイルに名前を関連付けるディレクトリエントリ。(ディレクトリ自体は、そのようなエントリのリストを含む特別な種類のファイルです。)この用語は、同じファイルに対して複数のハードリンクを作成できるファイルシステムで使用されます。

ハードリンクの概念がWindowsのショートカットの概念と同等かどうか疑問に思っています。

ハードリンクがショートカットと同等でない場合、ハードリンクに最も近いWindows機能は何ですか?


1
実際に、共有したwikiページからいくつかの素晴らしい参照があります。
eccentricSam

8
Microsoft NTFSはハードリンクをサポートしており、UNIXハードリンクと非常によく似ています。私はショートカットは特別なオブジェクトOBの窓のエンバイロメントと思いますが、それらは、実際のハードリンクにfilesytem組織の反対に関連していない
Kiwy

次のリンクは良いの説明を与える:comptb.cects.com/...

3
並列は誤解を招くと思います。ショートカットは「インターフェイス」リンクで、ファイルシステムではなくインターフェイスによって解釈されるターゲットに関するテキスト情報を持つファイルだけです。コマンドラインからは、ファイルシステムの意味で実際に何かを指しているわけではありません。Windows(またはNTFSのほうがいい)には、ショートカットでもハードリンクでもない適切なシンボリックリンクen.wikipedia.org/wiki/NTFS_symbolic_linkがあります。実際、Windowsでそれらを使用してDropboxフォルダーをどこにでも持っています。これはショートカットではできません。
alfC 14年

5
Windowsのショートカットファイルは、Linuxの.desktopファイルに非常によく似ています。Linuxのシンボリックリンクとハードリンクはまったく異なるものであり、同じ目的に役立つことがあります。
ミケバブコック14年

回答:


113

いいえ、ハードリンクは完全に異なります。ソフトリンクは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を確認します。

ここに画像の説明を入力してください

あなたは、両方の、上記の見ることができるようにfooHardLinkToFooSoftLinkToFooは異なる1(16648036)を持っていながら、同じiノード(16648029)を持っています。

で名前を変更するfoomv foo barどうなりますか?

ここに画像の説明を入力してください

赤色は、ソフトリンクが壊れていることを示しており、そのターゲットはもう見つかりません。これは、ソフトリンクがそのiノードではなくファイルの名前を指しているためです。名前を変更しても、iノードは同じままであるため、ハードリンクは問題ないことに注意してください。

要約すると、ハードリンクは実際には同じファイルの2つの兆候です。これらはディスクの同じセクションへのポインタです。ソフトリンクは単なるショートカットです。現実の世界を例にとると、ハードリンクは同じ電話回線の2つの異なる電話番号のようであり、ソフトリンクは同じ家に2つの異なる電話回線があるようなものです。


6
@Kiwy逆です:絶対シンボリックリンクはさまざまな方法で失敗します(データを移動したり、別の場所にマウントしたり、バックアップしたりすると...)ため、回避するのが最善です。
ジル 'SO-悪であるのをやめる' 14年

3
また、ハードリンクを(rmまたはを介してunlink())削除すると、ファイルの内容で占有されているブロックが解放され、リンクカウントがゼロに達するまでリンクカウントが減少するだけです。「ハードリンクは実際には同じファイルの2つのインスタンスである」と言うのは、2つの名前が同じiノードを指し、したがって同じコンテンツを指すので、ファイル自体の2つのインスタンスが存在するのではなく、どんな意味でも。
エメット

7
Windowsショートカットはシェルが使用するファイルであるため、シェルが知っていることはできますが、ファイルシステムはできません。たとえば、シェルの名前空間(コントロールパネル、コンピューターなど)へのショートカットを作成したり、まだインストールされていないアプリケーション(最初の使用時にインストールされる)へのショートカットを作成したりできます。これらのものは、ファイルシステムの世界では直接同等のものはありません。
ジョーイ14年

2
私はこの答えが大好きですが、実際にはWindowsショートカットが何であるかを理解するのが非常に貧弱です。以下の@Shaakunthalaは、WindowsショートカットがシンボリックリンクというよりLinuxの.desktopファイルに似ているため、より良い応答を示します。
ミケバブコック14年

18

ソフトリンクとハードリンクが何であるかについては十分な説明がありますが、1つ明確にする必要があります。

Windowsのショートカット ソフトリンクでハードリンクでないか、同等のものです。ファイルシステムレベルでは、これらは単なるファイルです。それらの構造を理解し、それらをリンクとして解釈するのはシェルです。Windowsショートカットは、ファイルシステム(プリンター、コントロールパネルアイテム、仮想フォルダー)に関連しないシェル名前空間内のオブジェクトを指すこともできます。

Windowsショートカットには、ファイルシステムオブジェクトの名前に加えて、PIDL(シェル名前空間内の不透明なバイナリ「パス」)、説明、ホットキー、アイコン、作業ディレクトリの情報が含まれています。Windowsは、NTFSファイルシステムが使用されている場合、壊れたショートカットを修正するためにNTFSオブジェクト識別子も追加します。

Windowsショートカットの大まかな同等物は.desktopファイルです。SuperUserに関する次の質問を参照してください。Linuxに.lnkに相当するものはありますか?


6

いいえ。Linuxの場合、動作は異なります。

各ファイルは、「inode」というオブジェクトで表されます。すべてのiノードには番号(ID)が関連付けられています。

私たちが知っているように、人間は数字ではなく名前を覚えるのが苦手です。(それが電話帳の進化の仕方です)

そのため、各iノードに人間が読める名前を付けるために、filenameが写真に入ってきました。基本的に、ハードリンクはファイル名をiノードにバインドします。iノードは複数のハードリンクを持つことができます。特定のiノードにハードリンクが存在しない場合、iノードが使用するディスク容量は新しいファイル用に再割り当てされる場合があります。つまり、ファイルごとに少なくとも1つのハードリンクが存在する必要があります。ファイル名(ファイルブラウザに表示されるファイル名/アイコンとして表示される)自体はハードリンクです。

Windowsでは、ショートカットは個別のファイル(* .lnkファイル)です。元のファイルに関する情報(当然のことながらファイルパス)が含まれています。Linuxの認識では、Windowsショートカットは、「。lnk」で終わるファイル名にハードリンクされた別のiノードになります。


3
NTFSは実際、このように機能します。ファイルはMFTのエントリであり、ディレクトリエントリはファイル名をファイルIDにマップするだけです。ハードリンクをサポートし、2008/7 / Vista(?)以降、シンボリックリンクもサポートします。この時点で、最大の違いは文化です。
cHao 14年

2

Windowsでは、NTFSファイルシステムがある場合、ハードリンクも作成できます。

fsutil hardlink create target_file source_file

ファイルは同じ論理ドライブ上になければなりません。


それは正しいです-NTFSはハードリンクもサポートしています。多くの場合、ツールを作成するには管理者権限が必要です。「同じ論理ドライブ」について-もっと正確に言うと、同じファイルシステム上に存在する必要があります。論理ドライブはによって作成されたドライブ文字を含め、何でもかまいませんsubstコマンド。ただし、ツールはこれを知らないか気にしないため、ハードリンクの作成を拒否します。非常に便利なのは、エクスプローラーで作成できるリンクシェル拡張です。
トバイアス14年

1

大きな違いは、フォルダーではなくファイルに対してハードリンクを作成できないことです。

ショートカットはフォルダ用に作成できるため、同等とは言えません。

あなたの質問は、シンボリックリンクまたはソフトリンクショートカットの違いであるべきです。

これによると:

シンボリックリンクはファイルシステムレベルであり、すべてが元のファイルと見なされます。アプリケーションは、シンボリックリンクを使用するために特別なサポートを必要としません。

「ショートカット」は、宛先ファイルまたはディレクトリへの参照を持つ通常のファイルです。

したがって、ショートカットをクリックするとディレクトリが実際のファイルに変更されますが、ソフトリンクはその場所を実際のファイルのように参照します。

WindowsショートカットとLinuxランチャー(特定の場所を指す)は同一です。


2
何?ソフトリンクは単なるファイルですが、奇妙なものではありますが、たとえばiノードも使用します。それらはオリジナルとして扱われません(ハードリンクです)。ほとんどのOSのディレクトリではハードリンクが許可されていないのは事実ですが、これは単なる安全機能であり、これには例外があります(OSXタイムマシンなど)。そしてもちろん、ショートカットにcdすることもできます(Windowsショートカットを意味すると仮定します。というのは、soflinksにcdできるからです)。
テルドン

1
cmdを使用してショートカットにcdできることを確認してください。
nux 14年

1
Windows VMを起動し、デスクトップ上のフォルダーへのショートカットを作成しました。Windowsのショートカットは、シンボリックリンクと非常に似ています(同一ではない場合)。何らかの理由でcmd.exeを使用してそれらにcdすることはできませんが、ディレクトリに.lnkを作成し、エクスプローラーで使用できます。
テルドン

1
ダウン有権者はdownvotingの理由を与えるべきである
NUX

5
申し訳ありませんが、まだ正しくありません。シンボリックリンクは、ターゲットをプレーンテキストとして含むファイルです(こちらを参照)。シンボリックリンクはオリジナルとして扱われません。これがシンボリックリンクとハードリンクの完全な違いです。Linuxランチャー(.desktopファイルを意味すると思います)は、これとはまったく関係がなく、完全に異なっています。あなた自身が言うように、Windowsのショートカットはファイル(プログラムを含む)とフォルダー(macとwindowsにはフォルダーがあり、Linuxにはディレクトリーがあります)を指すことができます。どこにもリンクしていません。
テルドン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.