2020-08-18更新 記載が間違っていたので修正しました。
概要
Windowsにはショートカットと似た機能のジャンクション(junction)とシンボリックリンク(symblic link)が存在します。
他にもハードリンクという機能がありますが、ほとんど使わないので無視します。
ジャンクションとシンボリックリンクはショートカットのようなものです。
ディレクトリとはフォルダのことです。
特に使うのはシンボリックリンクでプログラム等からフォルダを扱うときに便利だったりします。
ジャンクションはほぼ使わないですが、C:\Users\All Users
はC:\ProgramData
へのジャンクションだったりします。
細かい違いはここに書いてあります。
ジャンクションとシンボリックリンクの違い
大まかな違いを簡単にまとめます
機能 | ジャンクション | シンボリックリンク |
---|---|---|
ファイルシステム | NTFS | NTFS |
作成に必要な権限 | 一般ユーザー権限 | 管理者権限が必要 |
ファイルへのリンク | × | ○ |
ディレクトリへのリンク | ○ | ○ |
dirコマンド出力での表記 | JUNCTION | SYMLINK SYMLINKD |
ネットワーク先へのリンク(*1) | ×(ローカルのみ) | ○ |
他マシンから参照(*2) | ○ | × |
作成コマンド | mklink /j |
mklink / mklink /d |
エクスプローラの表示 | アイコンに矢印 | アイコンに矢印 |
ネットワーク先へのリンクについて
(*1)ネットワーク先へのリンクについては〇の場合UNCもZとかに割り当てたネットワークドライブも使えます。
マシンAがあったとして
マシンA C:\Data> dir /a <DIR> MyDataX
C:\Data\MyDataX
は共有をしています。
このときマシンBでmklink /d [リンク] [ターゲット]で、
マシンB C:\> mklink /d SharedLink \\マシンA\Data\MyDataX C:\> dir /a <SYMLINKD> SharedLink [\\マシンA\Data\MyDataX]
とすればマシンBから、C:\SharedLink
でマシンAのC:\Data\MyDataX
にアクセスできます。
他マシンから参照について
(*2)他マシンから参照についてはどういうことかというと、リンクの解釈は実際の使用時に(クライアント側が)行うということです。
マシンAのフォルダ(ディレクトリ)構成
マシンA C:\Data> dir /a <SYMLINKD> MyDataA [C:\Data2\MyDataX] <SYMLINKD> MyDataB [C:\Data2\MyDataY] <JUNCTION> MyDataC [C:\Data2\MyDataZ] C:\Data2> dir /a <DIR> MyDataX (共有) <DIR> MyDataY (非共有) <DIR> MyDataZ (非共有)
C:\Data
は共有設定があるものとします。
C:\Data2\MyDataX
は共有設定があるものとします。
C:\Data2\MyDataY
は共有設定がないとします。
C:\Data2\MyDataZ
は共有設定がないとします。
こうなっていた時に、
マシンBから\\マシンA\Data\MyDataA
を見たときにはマシンAのC:\Data2\MyDataX
は見れます。
マシンBから\\マシンA\Data\MyDataB
を見たときにはマシンAのC:\Data2\MyDataY
を見に行こうとして
「ファイルが存在しません」となります。
マシンBから\\マシンA\Data\MyDataC
を見たときにはマシンAのC:\Data2\MyDataZ
を見れるということです(共有していないにもかかわらず)。
どちらを使えばよいか
基本的にはシンボリックリンクを使っておけばよいです。
結論
特段事情がない限り、
ショートカット > シンボリックリンク > ジャンクション > ハードリンク
で使うのが良いかと思います。
参考