/Linuxコマンド

WSL

WSLとWindowsの連携

WSLからWindowsのアプリやファイル、クリップボードを使う方法と、Windows側からWSLを操作する wsl.exe のコマンド。

ファイルの場所

見たいものパス
WSLから Windows の C ドライブ/mnt/c/
WSLから Windows のユーザーフォルダ/mnt/c/Users/<Windowsのユーザー名>/
Windowsから WSL のホーム\\wsl$\Ubuntu\home\<ユーザー名>(エクスプローラーのアドレス欄に入力)

explorer.exe今のフォルダをエクスプローラーで開く

Windows の .exe は WSL からそのまま実行できます。

bash
$ explorer.exe .                 # 今のディレクトリをエクスプローラーで開く
$ notepad.exe memo.txt
$ cmd.exe /c ver                 # Windows のコマンドを実行
$ powershell.exe -c 'Get-Date'

wslviewWindows の既定のアプリで開く

Windows の既定のアプリやブラウザで、ファイルや URL を開きます。

bash
$ wslview https://example.com     # Windows の既定のブラウザで開く
$ wslview report.pdf             # PDFを既定のアプリで開く

xdg-open の代わりに使えます(BROWSER=wslview を設定すると、多くのツールがブラウザを開くときに使います)。

wslpathLinux と Windows のパスを変換する

Linux のパスと Windows のパスを相互に変換します。

bash
$ wslpath -w ~/project           # → \\wsl.localhost\Ubuntu\home\alice\project
$ wslpath 'C:\Users\alice\Desktop'   # → /mnt/c/Users/alice/Desktop
$ explorer.exe "$(wslpath -w ~/Downloads)"

clip.exe / xclipクリップボード

Ubuntu には最初から入っていません。 で入れられます。

コマンドの出力を Windows のクリップボードにコピーします。

bash
$ cat ~/.ssh/id_ed25519.pub | clip.exe          # Windows のクリップボードへコピー
$ powershell.exe -c Get-Clipboard | tr -d '\r'  # Windows のクリップボードから貼り付け
$ echo hello | xclip -selection clipboard       # WSLg(X11)のクリップボード

wsl.exeWindows 側から WSL を操作する

PowerShell やコマンドプロンプトで実行します。

コマンド意味
wsl既定のディストリビューションに入る
wsl -l -v入っているディストリビューションと状態・バージョン
wsl --shutdownWSL をすべて止める(設定を反映するときに使う)
wsl -t Ubuntuそのディストリビューションだけ止める
wsl -u rootroot として入る(パスワードを忘れたとき)
wsl --updateWSL 本体を更新
wsl --set-default Ubuntu既定のディストリビューションを変える
wsl --export Ubuntu D:\ubuntu.tarバックアップ
wsl --import Ubuntu2 D:\wsl\ubuntu2 D:\ubuntu.tarバックアップから復元
wsl ~ -e ls -laWSL のコマンドを1回だけ実行

設定ファイル

/etc/wsl.conf — ディストリビューションごとの設定(WSLの中)

/etc/wsl.conf
[boot]
systemd=true

[user]
default=alice

[interop]
# Windows の PATH を足さない(コマンド補完が速くなる)
appendWindowsPath=false

[automount]
# /mnt/c でも chmod を保存できるようにする
options="metadata"

.wslconfig — WSL 全体の設定(Windows側)

C:\Users\<ユーザー名>\.wslconfig に置きます。

.wslconfig
[wsl2]
# WSL が使うメモリの上限
memory=8GB
processors=4
# Windows と同じネットワークに見せる(LANの他の端末からもつながる)
networkingMode=mirrored
# 使っていないメモリを Windows に返す
autoMemoryReclaim=gradual

どちらも、変更したら wsl --shutdown してから開き直すと反映されます。

GUI アプリ(WSLg)

WSLg により、Linux の GUI アプリ(firefox・thunar・xeyes など)はそのまま Windows のウィンドウとして開きます。

bash
$ xeyes &           # 動作確認(x11-apps)
$ thunar . &        # ファイルマネージャ

困ったとき

症状対処
時刻がずれている(スリープ復帰後など)Windows 側で wsl --shutdown してから開き直す
DNSが引けない/etc/resolv.conf を確認。.wslconfig で dnsTunneling=true
ディスクが肥大化したWSL を止めてから、PowerShell で Optimize-VHD(Hyper-V)や diskpart の compact vdisk
グループ追加が反映されないwsl --shutdown してから開き直す

wslvar / wslsysWindows の情報を取り出す

Windows の環境変数やシステム情報を取り出します。

bash
$ wslvar USERPROFILE              # Windows の環境変数(C:\Users\alice)
$ cd "$(wslpath "$(wslvar USERPROFILE)")/Desktop"   # Windows のデスクトップへ移動
$ wslsys                          # Windows と WSL のバージョンなど

wsluscWindows のデスクトップにショートカットを作る

Linux のアプリの、Windows のデスクトップ用ショートカットを作ります。

bash
$ wslusc --name "Thunar" --gui thunar     # Linux の GUI アプリのショートカット

wsl.exe のインストール関連

PowerShell で実行します。

コマンド意味
wsl --installWSL と Ubuntu を入れる
wsl --list --online入れられるディストリビューション
wsl --install -d Debian別のディストリビューションを入れる
wsl --unregister Ubuntu削除(中身もすべて消える)
wsl --status既定のバージョンなど
wsl --versionWSL 本体のバージョン
wsl --manage Ubuntu --move D:\WSL保存場所を別のドライブへ移す
wsl --manage Ubuntu --set-sparse true仮想ディスクを自動で縮める

Windows のコマンドを Linux 側から使う例

bash
$ ipconfig.exe | iconv -f cp932 -t utf-8 | grep IPv4   # Windows の IP(文字化け対策付き)
$ tasklist.exe | grep -i chrome
$ cmd.exe /c start https://example.com                  # 既定のブラウザで開く
$ powershell.exe -c "Get-Process | Sort-Object CPU -Descending | Select -First 5"
$ code .                                                # VS Code で開く(Remote - WSL)