「ディレクトリジャンクション」対「ディレクトリシンボリックリンク」?


393

NTFSのコンテキスト:

MKLINK [[/D] | [/H] | [/J]] Link Target

/D ディレクトリシンボリックリンクを作成します。デフォルトはファイルシンボリックリンクです。
/H シンボリックリンクの代わりにハードリンクを作成します。
/J ディレクトリジャンクションを作成します。
Link 新しいシンボリックリンク名を指定します。
Target 新しいリンクが参照するパス(相対または絶対)を指定します。

  1. ディレクトリジャンクションは、ディレクトリシンボリックリンクとまったく同じものではありませんか?

    違いは何だmklink /D f1 f2とはmklink /J f1 f2

  2. 「ディレクトリ」は実際には単なるファイルなので、ディレクトリシンボリックリンクとファイルシンボリックリンクの違いは何ですか?


回答:


364

ジャンクションは、ディレクトリシンボリックリンクと同じものではありませんが、動作は同じです。主な違いは、リモートサーバーで探している場合、ということである接合がサーバーで処理されている、クライアントで処理されているディレクトリのシンボリックリンク。また、ローカルファイルシステム上のシンボリックリンクがリモートファイルシステムを指すことができるという事実に関するマシューのコメントも参照してください。

Aliceという名前のマシンに、両方を指すジャンクションポイントc:\myjpとディレクトリシンボリックリンクを配置するとc:\mysymlinkc:\targetfolderます。アリスを使用している間は、それらの間の大きな違いに気付かないでしょう。しかし、Bobという名前の別のマシンを使用している場合、接合点

\\Alice\c$\myjp を指します \\Alice\c$\targetfolder

しかし、シンボリックリンク

\\Alice\c$\mysymlink を指します \\Bob\c$\targetfolder

(注意:デフォルトでは、システムはリモートボリューム上のシンボリックリンクをたどらないため、ほとんどの場合、2番目の例では「ファイルが見つかりません」または「そのタイプが無効になっているためシンボリックリンクをたどることができません。」

ディレクトリシンボリックリンクとファイルシンボリックリンクの違いは、単純に1つがディレクトリを表し、もう1つがファイルを表すことです。リンクの作成時にリンクのターゲットが存在する必要はないため、ファイルシステムは、アプリケーションにそれがディレクトリであることを通知するかどうかを知る必要があります。

また、シンボリックリンクの作成には特別な権限(デフォルトでは、昇格したプロセスでのみ使用可能)が必要ですが、ジャンクションの作成にはファイルシステムへのアクセスのみが必要です。


13
明確にするために、ディレクトリジャンクションとディレクトリシンボリックリンクの間には、他の微妙な機能の違いがあるかもしれません。リモートとローカルの違いは、ユーザー(開発者ではなく)の観点から最も明白です。
ハリージョンストン

12
@MatthewSteeplesは、シンボリックリンクC:\testlinkC:\test私のコンピューター上を指す)を作成し、誰かが私のコンピューターにリモートアクセスしてクリックするとC:\testlink、それはC:\testHISコンピューター上で解決しますが、ディレクトリジャンクションC:\testlinkC:\test私のコンピューター上で)、そして誰かが私のコンピューターにリモートアクセスしてC:\testlink)をクリックすると、それは彼をC:\test私のコンピューター上に導くでしょうか?または、間違った方法で取得しましたか?
Pacerier

9
このコンテキストでは@Pacerierはい。ただし、シンボリックリンクを使用すると、コンピューター上にネットワーク共有を指すフォルダーを作成できます(クライアント側で解決されるため)。たとえば、C:\ MyNetworkShareは実際に\\ Alice \ Shareを指すことがあります
マシュースティープルズ

6
@MatthewSteeplesが、同様にC:\MyNetworkShare指すディレクトリジャンクションを作成できませんでした\\Alice\Shareか?
-Pacerier

8
@Pacerier、いいえ、ジャンクションポイントはローカルである必要があります。
ハリージョンストン

55

複雑な話は脳を傷つけます-私はチャートが好きです:

any MyLinkはシンボリックリンクであり、any MyJuncはを指すジャンクションであると仮定しTarget as createdます。

例えば

mklink /D MyLink C:\T_Dir ターゲットディレクトリへのシンボリックリンクを作成するための

mklink /J MyJunc C:\T_Dir ターゲットディレクトリへのディレクトリジャンクションを作成するための

mklink [/J,/D] [link path] [target path]ローカルマシンで入力された構文


 link path    |   target path   |         When accessed ..
              |                 |  (locally)    |    (remotely)
              |                 |               |
C:\MyLink     |   C:\T_Dir      |  C:\T_Dir     |  [leads back to local]
C:\MyJunc     |   C:\T_Dir      |  C:\T_Dir     |  [leads to remote]
              |                 |
\\Svr\MyLink  |   C:\T_Dir      |   C:\T_Dir    |  [leads back to local]
\\Svr\MyJunc  |   C:\T_Dir      |  *** Must create and point local ***
              |                 |
C:\MyLink     |  \\Sv2\T_Dir    |  \\Sv2\T_Dir  |   Error*1
C:\MyJunc     |  \\Sv2\T_Dir    |  *** Error - Must point local ***
              |                 |
\\Svr\MyLink  |  \\Sv2\T_Dir    |  Error*1
\\Svr\MyJunc  |  \\Sv2\T_Dir    |  *** Must create link using target device ***

エラー* 1-ローカルマシン上のリモートシンボリックリンクへのアクセスをブロック解除した場合、これは機能しますが、ブロックされていないローカルマシンでのみ機能します。


3
それはとても奇妙です。相対シンボリックリンクでさえ、リモートでは機能しません。たとえば、ディレクトリを作成しますd:\_tmp\data。次のようなリンクを作成しますd:\_tmp>mklink /d data-link data。リモートユーザーはd:\_tmp、すべてのサブフォルダーに完全にアクセスできますが、そのサブフォルダーを開くことはできませんd:\_tmp\data-link
-Nux

4
これは、シンボリックリンクがクライアント側で評価されると、サーバーではなくクライアント上のd:\ _ tmp \ dataを指すためです。
16

奇妙な理由は明らかだと思います。しかし、少なくとも相対シンボリックリンクの場合は、@ Nuxがおかしいことには同意します。
ジョン・クームス

Complex talk hurts brain -- I like charts私はこの文とチャートも大好きです。
ルーク

46

シンボリックリンクにはより多くの機能がありますが、ジャンクションはその制限のためにほとんどレガシー機能と思われますが、これらの制限のセキュリティへの影響は、シンボリックリンクよりもジャンクションが優先される理由です。リモートターゲティングにより、シンボリックリンクはより機能的になりますが、セキュリティプロファイルも向上しますが、ジャンクションはローカルパスに制限されているため、より安全と見なされる場合があります。したがって、ローカルリンクが必要で、絶対パスを使用できる場合は、ジャンクションを使用することをお勧めします。それ以外の場合は、追加機能のシンボリックリンクを検討してください。

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

**速度/複雑さの違いに関する声明は、NTFS再解析ポイントに関するWikipediaエントリの未確認の声明に基づいています(良い読み物)。*


他のNTFSリンクの比較

トピックに関する他の比較をいくつか示しますが、これらは上記のメリットをリストしていないため、ジャンクションを検討するときに誤解を招く可能性があります。

ここから取られます(良い入門書)

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

MKLinkのSS64ページから

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


用語に関するコメント

ジャンクションはシンボリックリンクです

ジャンクションとシンボリックリンクは、前述の処理方法の違いは別として、実際には同じ方法(リパースポイント)で同じことをしています。実際、技術的には、ジャンクションはシンボリックリンクであり、ここにあるように、ドキュメントではジャンクションをシンボリックリンクと呼ぶ場合があります。ですから、それは用語に関して知っておくべきことです。

NTFS

OPはこれを指定していますが、「シンボリックリンク」はNTFSに固有ではない非常に一般的な用語であることを指摘する価値があります。したがって、具体的には、この比較はNTFSジャンクションとNTFSシンボリックリンクに関するものです。


3
ジャンクション対シンボリックリンクの処理速度をテストした人はいますか?
1000Gbps

長所/短所チャートは非常に役に立ちました、ありがとう!
GordonM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.