wsl2でよく使う、windowsとlinux間のファイル移動やコマンド実行。


windowsのエクスプローラからwsl2で起動中のOSのディレクトリへアクセスする。

エクスプローラを立ち上げアドレス欄に\\wsl$と入力すると、起動中のディストリビューションのファイルシステムがフォルダとして見えて、アクセスできる。

利用ケース:wsl内のファイルを直接windowsのアプリで開きたい場合など。
以下は、CentOS8を2VM、Kali Linuxを1VM、Ubuntu-18.04を1VM起動しているときにエクスプローラーで開いた時のスクリーンショット


windowsからwsl2のコマンドを実行する。

コマンドプロンプトかpowershellからwslコマンドに-eオプションで実行する。

以下、コマンドプロンプトからwslコマンドを実行、-dオプションでCentOS8ディストリビューションを選択し、/etc/os-releaseを標準出力した場合。

C:\Users\uchi>wsl -d CentOS8 -e cat /etc/os-release
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"

wslがインストールされているディレクトリへアクセスする。

microsoft storeからインストールしたりwslコマンドでインストールしたwsl用のファイル類は、
%userprofile%\AppData\Local\Packages
という隠しフォルダにインストールされます。
エクスプローラのアドレス欄に入力してアクセス可能です。

linuxからwindowsのフォルダにアクセスする

今度はwslで起動したlinuxからのコマンドになります。
linuxから見た場合、windowsのシステムドライブは/mnt/の下にマウントされて見えます。

 uchi@CP747755-01:~$ ls -l /mnt
 合計 0
 drwxrwxrwx 1 uchi uch  512  3月 23 09:05 c
 drwxrwxrwt 2 root root  40  3月 25 05:48 wsl

windowsとlinux相互にディレクトリが参照されているので、OS間のファイルの移動やコピーも簡単にできますね。

linux上で今いるディレクトリをwindowsエクスプローラーで起動する。

wslのlinuxからはwindowsのコマンドを実行できますので、linuxからexplorerを起動することで、
windowsのフォルダで今いるディレクトリを表示することも可能です。

 uchi@CP747755-01:/home$ explorer.exe .

同様にlinux上から好きなwindowsコマンドを実行できる。

通常のlinuxと同様に、環境変数PATHが通っていればそのままコマンドを実行できるし、
通ってなければフルパス指定でそのコマンドを実行できる。
例:linux上から

 /mnt/c/Windows/System32/mspaint.exe

でpaintが起動.

まとめ

やりたいこと windows から linux linux から windows
フォルダを参照したい エクスプローラに\\wsl$を入力 explorer.exe .
コマンドを実行したい wsl -e 'linux上のコマンド' 対象exeをフルパスで実行

これらを組合わせれば、cronからlinuxコマンドの実行に加えてwindowsアプリの実行を組合わせたり、
windowsのタスクスケジューラーからlinuxのコマンドを実行したりと、linux,windows両方の
アプリケーション実行を組合わせられるので、可能性が無限大に広がります。