Windows でもハードリンクやシンボリックリンクが作れることを初めて知ったのでメモ。
#それぞれの対象
ハードリンク | ジャンクション | シンボリックリンク | |
---|---|---|---|
対象 | ファイル | フォルダ | ファイル+フォルダ |
#ハードリンク
##書式
mklink /h <リンク> <ターゲット>
##例
>dir /b
hoge.txt
>type hoge.txt
hoge
>mklink /h hard_link.txt hoge.txt
hard_link.txt <<===>> hoge.txt のハードリンクが作成されました
>dir /b
hard_link.txt
hoge.txt
>type hard_link.txt
hoge
>echo aaa >> hoge.txt
>type hard_link.txt
hoge
aaa
>mkdir dir & move hoge.txt dir
1 個のファイルを移動しました。
>tree /f
│ hard_link.txt
│
└─dir
hoge.txt
>type hard_link.txt
hoge
aaa
>rmdir /s /q dir
>dir /b
hard_link.txt
>type hard_link.txt
hoge
aaa
最初に存在したファイル(hoge.txt
)が移動されたり削除されたりしても、ハードリンクはターゲットの実体を指し続ける。
#ジャンクション
##書式
mklink /j <リンク> <ターゲット>
##例
>tree /f
└─dir
hoge.txt
>mklink /j junction_dir dir
junction_dir <<===>> dir のジャンクションが作成されました
>tree /f
├─dir
│ hoge.txt
│
└─junction_dir
hoge.txt
>echo fuga.txt > junction_dir\fuga.txt
>tree /f
├─dir
│ fuga.txt
│ hoge.txt
│
└─junction_dir
fuga.txt
hoge.txt
>rmdir /s /q dir
>tree /f
└─junction_dir
>cd junction_dir
指定されたファイルが見つかりません。
オリジナルのフォルダ(dir
)が削除されると、ジャンクションは残るがアクセスできなくなる。
#シンボリックリンク
作成には 管理者権限が必要 。
##書式
ファイルの場合
mklink <リンク> <ターゲット>
フォルダの場合
mklink /d <リンク> <ターゲット>
##例
>dir /b
hoge.txt
>type hoge.txt
hoge
>mklink symbolic_link.txt hoge.txt
symbolic_link.txt <<===>> hoge.txt のシンボリック リンクが作成されました
>type symbolic_link.txt
hoge
>echo sss >> symbolic_link.txt
>type hoge.txt
hoge
sss
>mkdir dir & move hoge.txt dir
1 個のファイルを移動しました。
>tree /f
│ symbolic_link.txt
│
└─dir
hoge.txt
>type symbolic_link.txt
指定されたファイルが見つかりません。
>echo fuga > hoge.txt & tree /f
│ hoge.txt
│ symbolic_link.txt
│
└─dir
hoge.txt
>type symbolic_link.txt
fuga
>move symbolic_link.txt dir & tree /f
1 個のファイルを移動しました。
│ hoge.txt
│
└─dir
hoge.txt
symbolic_link.txt
>type dir\symbolic_link.txt
hoge
sss
>del dir\hoge.txt & tree /f
│ hoge.txt
│
└─dir
symbolic_link.txt
>type dir\symbolic_link.txt
指定されたファイルが見つかりません。
- シンボリックリンクを作成したときに指定したパスにファイルがなくなると、参照できなくなる。
- 相対パス指定で作成した場合、シンボリックリンクの場所から相対パスで指定した場所にあるファイルが参照される(もともとあったファイルと別のファイルでも問題ない)。
- 絶対パスでも作成可能。
#参考