Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

Windowsのジャンクション(junction)とシンボリックリンク(symblic link)違い

スポンサードリンク



2020-08-18更新 記載が間違っていたので修正しました。

概要

Windowsにはショートカットと似た機能のジャンクション(junction)とシンボリックリンク(symblic link)が存在します。
他にもハードリンクという機能がありますが、ほとんど使わないので無視します。

ジャンクションとシンボリックリンクはショートカットのようなものです。
ディレクトリとはフォルダのことです。
特に使うのはシンボリックリンクでプログラム等からフォルダを扱うときに便利だったりします。
ジャンクションはほぼ使わないですが、C:\Users\All UsersC:\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を見れるということです(共有していないにもかかわらず)。

どちらを使えばよいか

基本的にはシンボリックリンクを使っておけばよいです。

結論

特段事情がない限り、
ショートカット > シンボリックリンク > ジャンクション > ハードリンク
で使うのが良いかと思います。

参考