今回はWindowsのジャンクション、ハードリンク、シンボリックリンクの違いについて解説します。どれもフォルダやファイルへのリンク(参照)を提供する機能ですが、微妙に違いがあります。今回は、利用する際に知っておいた方がよい事項についてまとめました。※内部的な違いについては今回は触れません(NTFS、リバースポイント、nodeなど)
特徴
それぞれの特徴について表にしました。簡単に書くと、
ジャンクション + ハードリンク = シンボリックリンク
になります。ただ、シンボリックリンクは管理者権限が必要なので注意が必要です。
機能・説明 | ジャンクション | ハードリンク | シンボリックリンク |
---|---|---|---|
必要なユーザ権限 | 一般ユーザ | 一般ユーザ | 管理者ユーザ |
リンク対象 | フォルダ | ファイル | ファイル・フォルダ |
絶対パス指定 | ○ | – | ○ |
相対パス指定 | × | – | ○ |
ドライブ跨ぎ | ○ | × | ○ |
ネットワーク共有跨ぎ | × | × | ○ |
dirコマンドでの表記(ファイル) | × | ○ | <SYMLINK> |
dirコマンドでの表記(フォルダ) | <JUNCTION> | × | <SYMLINKD> |
コマンド(リンク作成) | mklink /j XX YY | mklink /h XX YY | mklink 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