Windows Subsystem for Linux でシンボリックリンク
前回WindowsマシンにインストールしたWindows Subsystem for Linux(以下、WSL)ですが、シンボリックリンクについて弄ってみたのでメモ。
Windows側の状況
とりあえずWindows側のApacheのhtdocsフォルダで試してみました。
現在は以下のような状態です。
Apacheのドキュメントルートは C:\Apache24\htdocsでして、C:ドライブはできるだけ増やしたくないので、リソースの実体はD:ドライブにフォルダを作ってリンクを張ってます。
C:\Apache24\htdocs
├─bootstraptest [d:\hoge\dev\bootstraptest]
├─phpmyadmin [d:\hoge\dev\phpMyAdmin-4.9.0.1-all-languages]
└─wp [d:\hoge\dev\wp\]
同じようにD:\hoge\dev\link_target ディレクトリを作り、WSL側でシンボリックリンクを作ってどのようになるのかを試してみました。
WSL側でシンボリックリンクを作る
まずは、WSLのホームディレクトリにhtdocsのリンクを作ります。
$ cd
$ ln -s /mnt/c/Apache24/htdocs htdocs_win
$ ls -al
htdocs_win -> /mnt/c/Apache24/htdocs
作ったhtdocs_winの下はどうなっているでしょうか。
$ cd htdocs_win
$ ls -al
bootstraptest -> /mnt/d/hoge/dev/bootstraptest
phpmyadmin -> /mnt/d/hoge/dev/phpMyAdmin-4.9.0.1-all-languages
wp -> /mnt/d/hoge/dev/wp/
Windowsで作ったリンクはそのまま使えるようになっていました。
では、WSLからリンクを作ってみましょう。
$ ln -s /mnt/d/hoge/dev/link_target link_target
$ ls -al link_target
link_target -> /mnt/d/hoge/dev/link_target
きちんと出来ていますね。この後このフォルダにテキストファイルを作って見ましたが、問題無くファイルは作られていました。
それではWindows側から見たらどうなっているでしょう。
エクスプローラでC:\Apache24\htdocsを見てみます。
おっと、ファイルで認識しています。
当たり前の話ですが、開こうとすると使うアプリケーションを聞かれます。
WSL側としては問題無いのですが、これではややこしくなるので、シンボリックリンクはWindowsで作るようにしようと思います。
当然、WSLの中のリソースでしたら、WSLでリンクを作っても何の問題も無いと思います。
リンクを作成する場所によって使い分ける必要がありますね。
mklinkについて
一応Windows側のシンボリックリンクについてもメモ。
コマンドプロンプトを管理者として開く。
mklinkコマンドのヘルプです。
>mklink /?
シンボリック リンクを作成します。
MKLINK [[/D] | [/H] | [/J]] リンク ターゲット
/D ディレクトリのシンボリック リンクを作成します。既定では、
ファイルのシンボリック リンクが作成されます。
/H シンボリック リンクではなく、ハード リンクを作成します。
/J ディレクトリ ジャンクションを作成します。
リンク 新しいシンボリック リンク名を指定します。
ターゲット 新しいリンクが参照するパス (相対または絶対)
を指定します。
追記:Windows 10のアップデートでこのシンボリックリンク問題が解決されそうです。
@ITさん:【次期Windows 10】WSL 2がついにNTFSのジャンクション/シンボリックリンクに対応

