Windowsのジャンクション、ハードリンク、シンボリックリンクの違いについて解説

今回はWindowsのジャンクション、ハードリンク、シンボリックリンクの違いについて解説します。どれもフォルダやファイルへのリンク(参照)を提供する機能ですが、微妙に違いがあります。今回は、利用する際に知っておいた方がよい事項についてまとめました。※内部的な違いについては今回は触れません(NTFS、リバースポイント、nodeなど)

特徴

それぞれの特徴について表にしました。簡単に書くと、

 ジャンクション + ハードリンク = シンボリックリンク

になります。ただ、シンボリックリンクは管理者権限が必要なので注意が必要です。

機能・説明ジャンクションハードリンクシンボリックリンク
必要なユーザ権限一般ユーザ 一般ユーザ管理者ユーザ
リンク対象フォルダファイルファイル・フォルダ
絶対パス指定
相対パス指定×
ドライブ跨ぎ×
ネットワーク共有跨ぎ××
dirコマンドでの表記(ファイル)×<SYMLINK>
dirコマンドでの表記(フォルダ)<JUNCTION>×<SYMLINKD>
コマンド(リンク作成)mklink /j XX YYmklink /h XX YYmklink XX YY
mklink /d XX YY

利用方法のサンプル

ジャンクションを利用したサンプルです。

D:\tmp\tmp>mkdir folder

D:\tmp\tmp>dir
 D:\tmp\tmp のディレクトリ

2022/01/04  22:38    <DIR>          .
2022/01/04  22:15    <DIR>          ..
2022/01/04  22:38    <DIR>          folder

D:\tmp\tmp>mklink /j j_folder folder
j_folder <<===>> folder のジャンクションが作成されました

D:\tmp\tmp>dir
 D:\tmp\tmp のディレクトリ

2022/01/04  22:38    <DIR>          .
2022/01/04  22:15    <DIR>          ..
2022/01/04  22:38    <DIR>          folder
2022/01/04  22:38    <JUNCTION>     j_folder [D:\tmp\tmp\folder]

D:\tmp\tmp>echo hoge > folder\a.txt

D:\tmp\tmp>dir folder
 D:\tmp\tmp\folder のディレクトリ

2022/01/04  22:38    <DIR>          .
2022/01/04  22:38    <DIR>          ..
2022/01/04  22:38                 7 a.txt

D:\tmp\tmp>dir j_folder
 D:\tmp\tmp\j_folder のディレクトリ

2022/01/04  22:38    <DIR>          .
2022/01/04  22:38    <DIR>          ..
2022/01/04  22:38                 7 a.txt

D:\tmp\tmp>del j_folder\a.txt

D:\tmp\tmp>rmdir folder

D:\tmp\tmp>dir
 D:\tmp\tmp のディレクトリ

2022/01/04  22:39    <DIR>          .
2022/01/04  22:15    <DIR>          ..
2022/01/04  22:38    <JUNCTION>     j_folder [D:\tmp\tmp\folder]

D:\tmp\tmp>cd j_folder
指定されたファイルが見つかりません。

D:\tmp\tmp>rmdir j_folder

D:\tmp\tmp>dir
 D:\tmp\tmp のディレクトリ

2022/01/04  22:39    <DIR>          .
2022/01/04  22:15    <DIR>          ..

ハードリンクを利用したサンプルです。

D:\tmp\tmp>echo hoge > a.txt

D:\tmp\tmp>dir
 D:\tmp\tmp のディレクトリ

2022/01/04  22:42    <DIR>          .
2022/01/04  22:15    <DIR>          ..
2022/01/04  22:42                 7 a.txt

D:\tmp\tmp>type a.txt
hoge

D:\tmp\tmp>mklink /h h_a.txt a.txt
h_a.txt <<===>> a.txt のハードリンクが作成されました

D:\tmp\tmp>dir
 D:\tmp\tmp のディレクトリ

2022/01/04  22:43    <DIR>          .
2022/01/04  22:15    <DIR>          ..
2022/01/04  22:42                 7 a.txt
2022/01/04  22:42                 7 h_a.txt

D:\tmp\tmp>type h_a.txt
hoge

D:\tmp\tmp>echo fuga >> h_a.txt

D:\tmp\tmp>type h_a.txt
hoge
fuga

D:\tmp\tmp>type a.txt
hoge
fuga

D:\tmp\tmp>del a.txt

D:\tmp\tmp>dir
 D:\tmp\tmp のディレクトリ

2022/01/04  22:43    <DIR>          .
2022/01/04  22:15    <DIR>          ..
2022/01/04  22:43                14 h_a.txt

D:\tmp\tmp>type h_a.txt
hoge
fuga

D:\tmp\tmp>del h_a.txt

D:\tmp\tmp>dir
 D:\tmp\tmp のディレクトリ

2022/01/04  22:43    <DIR>          .
2022/01/04  22:15    <DIR>          ..

シンボリックリンクを利用したサンプルです。

D:\tmp\tmp>mkdir folder

D:\tmp\tmp>mklink /d s_folder folder
s_folder <<===>> folder のシンボリック リンクが作成されました

D:\tmp\tmp>dir
 D:\tmp\tmp のディレクトリ

2022/01/04  22:45    <DIR>          .
2022/01/04  22:15    <DIR>          ..
2022/01/04  22:45    <DIR>          folder
2022/01/04  22:45    <SYMLINKD>     s_folder [folder]

D:\tmp\tmp>echo hoge > s_folder\a.txt

D:\tmp\tmp>dir folder
 D:\tmp\tmp\folder のディレクトリ

2022/01/04  22:45    <DIR>          .
2022/01/04  22:45    <DIR>          ..
2022/01/04  22:45                 7 a.txt

D:\tmp\tmp>mklink s_a.txt s_folder\a.txt
s_a.txt <<===>> s_folder\a.txt のシンボリック リンクが作成されました

D:\tmp\tmp>dir
 D:\tmp\tmp のディレクトリ

2022/01/04  22:46    <DIR>          .
2022/01/04  22:15    <DIR>          ..
2022/01/04  22:45    <DIR>          folder
2022/01/04  22:46    <SYMLINK>      s_a.txt [s_folder\a.txt]
2022/01/04  22:45    <SYMLINKD>     s_folder [folder]

D:\tmp\tmp>dir folder
 D:\tmp\tmp\folder のディレクトリ

2022/01/04  22:45    <DIR>          .
2022/01/04  22:46    <DIR>          ..
2022/01/04  22:45                 7 a.txt

D:\tmp\tmp>echo fuga >> s_a.txt

D:\tmp\tmp>type folder\a.txt
hoge
fuga

タイトルとURLをコピーしました