NTFSの文脈では:
>;
`MKLINK [[/D] | [/H] | [/J]] ]。リンクターゲット >; /D
** ディレクトリへのシンボリックリンクを作成します。 デフォルトはファイルシンボリックリンクです。 **/H
シンボリックリンクの代わりにハードリンクを作成します。
/J** ディレクトリジャンクションを作成します。 **Link
は、新しいシンボリックリンク名を指定します。
Target`** は、新しいリンクが参照するパス(相対パスまたは絶対パス)を指定します。
1.ディレクトリジャンクションはディレクトリシンボリックリンク**と全く同じものではありませんか?
mklink /D f1 f2と
mklink /J f1 f2` の違いは何ですか?
1.ディレクトリは実際には単なるファイルなので、ディレクトリ・シンボリックリンクとファイル・シンボリックリンクの違いは何ですか?
ジャンクションはディレクトリシンボリックリンクと動作は似ていますが、同じものではありません。 主な違いは、リモートサーバーを見ている場合、ジャンクションはサーバーで処理され、ディレクトリシンボリックリンクはクライアントで処理されるということです。 また、ローカルのファイルシステム上のシンボリックリンクがリモートのファイルシステムを指すことができるという事実についてのMatthew'のコメントも参照してください。
Aliceという名前のマシンにジャンクションポイントc:˶myjp
とディレクトリシンボリックリンクc:˶mysymlink
を置き、どちらもc:˶targetfolder
を指しているとします。 Aliceを使っている間は、この2つの違いはあまり気にならないでしょう。 しかし、もしあなたがBobという別のマシンを使っているのなら、 ジャンクションポイントは
Alicec$myjpは
Alicec$targetfolder`を指す。
を指すが、シンボリックリンク
は BobBobc$targetfolder
を指す。
(警告: デフォルトでは、システムはリモートボリューム上のシンボリックリンクをたどらないので、たいていの場合、2番目の例は実際には"File Not Found"または"The symbolic link cannot be followed because its type is disabled."のどちらかになります)。
ディレクトリ・シンボリック・リンクとファイル・シンボリック・リンクの違いは、一方がディレクトリを表し、一方がファイルを表すということだけです。 リンクの作成時にリンク先が存在する必要はないため、ファイルシステムはアプリケーションにそれがディレクトリであるかどうかを知らせる必要があります。
また、シンボリックリンクの作成には特別な権限(デフォルトでは昇格プロセスのみ)が必要であるのに対し、ジャンクションの作成にはファイルシステムへのアクセス権のみが必要であることにも注意すべきである。
複雑な話をすると頭が痛くなる:
任意の MyLink
がシンボリックリンクで、任意の 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 - もしローカルマシンでリモートシンボリックリンクへのアクセスをブロック解除していれば、これは動作します。
シンボリックリンクはより多くの機能を持つが、ジャンクションはその制限のため、ほとんどレガシーな機能のように思えるが、これらの制限のセキュリティへの影響は、特に、ジャンクションがシンボリックリンクよりも好まれる理由である。**リモートターゲティングはシンボリックリンクをより機能的にしますが、セキュリティプロファイルも高くなります。したがって、ローカルリンクが必要で、絶対パスでも構わないのであれば、ジャンクションの方が良いでしょう。
**速度/複雑さの違いに関する記述は、Wikipedia entry on NTFS reparse points (a good read)2の未検証の記述によるものです。
**その他のNTFSリンクの比較
このトピックに関する他の比較をいくつか紹介するが、これらは私が上に挙げた利点を挙げていないため、ジャンクションを検討する際に誤解を招く可能性がある。
ここから引用 (入門書として最適)
MKLinkのSS64ページ]5より。
**用語に関するコメント
関数はシンボリックリンク**である
前述の処理方法の違いを除けば、ジャンクションとシンボリックリンクは同じ方法で同じことを行っています。実際、技術的には、ジャンクションはシンボリックリンクであり、文書ではジャンクションをシンボリックリンクと呼ぶことがあります7。つまり、これは用語に関して知っておくべきことなのです。
NTFS
OPがこのように指定していても、"シンボリックリンク"は非常に一般的な用語であり、NTFSに固有のものではないことを指摘する価値があります。つまり、この比較はNTFSジャンクションとNTFSシンボリックリンクの比較です。