WSL1 で導入される Linux は Windows の非常に深いディレクトリに置かれるので、Windows ネイティブ側とのやりとりが面倒です。また、【こちらの別記事】で解説した様に、WSL 支配下のファイルには特別なプロパティが設定されています。
本記事では、Windows の C: ドライブ直下に、WSL1 で導入した Ubuntu-20.04 とのファイルのやりとりの場所 (Sandbox) を作る方法を紹介します。
尚、WSL1 上の Ubuntu-20.04 のファイルシステムの場所は、Windows 見えには次の通りとなります。
%USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs\
目次:
- WSL の「~」の下にディレクトリを作る:
- Windows 側からリンク (ジャンクション) を張る:
- 正しくリンクが作成されたことの確認:
- 問題点:
- WSL 側で「ダウンロード」へシンボリックリンクを張る:
WSL の「~」の下にディレクトリを作る:
WSL 配下のディレクトリに場所を作ります。フォルダに付与されるプロパティの関係で、実体は必ず WSL 配下に置く必要が有ります。ここでは、ユーザーのホームディレクトリ「~」の下に、「Sandbox_Ubuntu」というディレクトリを作る事にします。また、ディレクトリ内に確認用のファイル ABC.txt を作る事にします。
WSL 用のターミナルを開いて次のコマンドを打ちます。
mkdir Sandbox_Ubuntu cd Sandbox_Ubuntu cat <<! > ABC.txt I am here. !
Windows 側からリンク (ジャンクション) を張る:
以下の例は、Ubuntu-20.04 の場合です。Windows 側から Ubuntu-20.04 側へ Windows のジャンクションを張ります。
Windows のコマンドプロンプトを開いて、次の通りコマンドを打ちます。
cd c:\
mklink /j Sandbox_Ubuntu %USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\%USERNAME%\Sandbox_Ubuntu
mklink コマンドが正しく認識されれば、次の様にメッセージが出ます。
「Sandbox_Ubuntu <<===>> C:\Users\XXXXXX\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\XXXXXX\Sandbox_Ubuntu のジャンクションが作成されました」
正しくリンクが作成されたことの確認:
Windows のエクスプローラを開いて 「C:\Sandbox_Ubuntu」に移動します。
ABC.txt というファイルが有る事を確認し、クリックして開いてみます。
「I am here.」という文字列を確認できれば完了です。
問題点:
尚、私の環境だけなのか、全ての人で発生するのか分かりませんが、Windows 側からエクスプローラこのフォルダにファイルを入れると、rwx 属性が 0 (----------) になってしまいます。移動したファイルは「chmod +r ファイル名」で r 属性を付けないと WSL 側で読めません。
WSL 側で「ダウンロード」へシンボリックリンクを張る:
ついでに、WSL の Ubuntu 上に、頻繁に使うであろう Windows の「ダウンロード」フォルダへシンボリックリンクを張っておきます。WSL の ubuntu のターミナルを開いて、次のコマンドを実行します。
cd ~ ln -s /mnt/c/Users/$LOGNAME/Downloads downloads ls -l downloads ls downloads/*
最後の行で Windows 側のファイルが見えれば正しくリンクが作成出来て居ます。