web-dev-qa-db-ja.com

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

NTFSのコンテキストでは:

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

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

  1. ディレクトリジャンクションディレクトリシンボリックリンクとまったく同じではない)?

    mklink /D f1 f2mklink /J f1 f2の違いは何ですか?

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

380
Pacerier

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

Aliceという名前のマシン上に、接合点c:\myjpとディレクトリシンボリックリンクc:\mysymlinkを配置し、両方ともc:\targetfolderを指すとします。あなたがアリスを使っている間、あなたはそれらの間に大きな違いに気付かないでしょう。しかし、Bobという名前の別のマシンを使用しているのであれば、接続点は

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

シンボリックリンク

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

(警告:デフォルトでは、システムはリモートボリューム上のシンボリックリンクをたどりません。そのため、ほとんどの場合、2番目の例では実際に "File Not Found"またはのいずれかになります。 「シンボリックリンクは無効になっているため、追跡できません。」

ディレクトリシンボリックリンクとファイルシンボリックリンクの違いは、一方がディレクトリを表し、もう一方がファイルを表すということです。リンクが作成されるときにリンクのターゲットが存在する必要はないので、ファイルシステムはそれがディレクトリであることをアプリケーションに伝えるべきかどうかを知る必要があります。

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

354
Harry Johnston

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

MyLinkはシンボリックリンクで、MyJuncTarget 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 - あなたがあなたのローカルマシン上のリモートシンボリックリンクへのアクセスのブロックを解除した場合、これはうまくいくでしょう。

52
Still.Tony

シンボリックリンクにはより多くの機能がありますが、ジャンクションはその制限のためにほとんどレガシーな機能と思われますが、これらの制限のセキュリティ上の意味合いは特にジャンクションがシンボリックリンクよりも好まれる理由です。 リモートターゲティングはシンボリックリンクをより機能的にしますが、セキュリティプロファイルも上げますが、ジャンクションはローカルパスに制限されているので安全であると考えられるかもしれません。それで、もしあなたがローカルリンクを望み、絶対パスで生きることができるならば、あなたはおそらくジャンクションを使ったほうが良いでしょう。それ以外の場合は、追加された機能に対するシンボリックリンクを検討してください。

enter image description here

**速度/複雑さの違いに関する記述は、 ウィキペディアのNTFS再解析ポイント に関する未確認の記述(良い読み)から来ています。*


その他のNTFSリンク比較

このトピックに関する他の比較がここにいくつかありますが、これらは私が上に挙げた利点をリストしていないのでジャンクションを考慮するときこれらは誤解を招く可能性があります。

ここからとられた (よい入門書)

enter image description here

MKLinkの SS64ページから

enter image description here


用語についてのコメント

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

ジャンクションとシンボリックリンクは、処理方法の前述の違いを除けば、実際には同じことを同じ方法で行っています(ポイントの再解析)。実際には、技術的には、Junctionはシンボリックリンクであり、ここでのように 、マニュアルではJunctionをシンボリックリンクと呼ぶこともあります 。したがって、これは用語に関する注意点です。

NTFS

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

40
u8it