Windows Subsystem for Linux 利用ノート¶
WSL に関する利用ノートをつづる。次の課題を解決したい:
インストールおよびアップグレードの方法を会得する。
WSL を管理する方法を会得する。
Linux ディストリビューション (Ubuntu) に関する操作を会得する。
WSL に関する構成方法を理解する。
Windows と WSL/Linux との連携の仕組みを模索する。
Linux 用 Windows Subsytem for Linux (WSL) を使用すると、従来の仮想マシンなどのオーバーヘッドなしで、コマンドラインツール、ユーティリティー、アプリケーションなどを含む GNU/Linux 環境のほとんどを、変更せずに Windows 上で直接実行できる。
Note
本ノートを記すのに用いている Windows 本体、WSL および Ubuntu のバージョン情報はそれぞれ次のとおりだ。
- OS:
Windows 10 Home version 22H2 ビルド 19045.2006
- WSL 2:
5.10.102.1
- Ubuntu:
20.04 LTS
インストール¶
公式文書によると最初から wsl が利用可能であるようだ。次のコマンドを実行しろとある:
> wsl --install
これが上手くいくと WSL が利用可能になる。上のコマンドではインストールオプションを指定していないため、Linux のディストリビューションとして Ubuntu が暗黙的に選択される。
既定の Linux ディストリビューションが Ubuntu であることと、私がそれしか利用しないことから、本稿ではこれ以降、この二つの単語を区別なしに記述するかもしれない。
アップグレードする¶
WSL 自体のアップグレード方法は次のコマンド実行による。これで WSL Linux カーネルが(存在すれば)最新版に更新される。
> wsl --update
更新をチェック中...
利用できる更新はありません。
カーネル バージョン: 5.10.102.1
Linux ディストリビューションのアップグレード方法を Ubuntu を例にとって記す。おそらく次の方法すべてが等価で有効だ:
コンソールから winget upgrade -e --id Canonical.Ubuntu を実行
Microsoft Store から Ubuntu on Windows を更新
Use Cases¶
プログラム wsl が利用者に用意している機能は次の二つに分類される:
Linux プログラムを実行する
WSL を管理する
Linux プログラムを実行する¶
Linux コマンドを指定しないで実行すると、Linux シェルを起動する。
> wsl
> wsl --distribution Ubuntu
Linux コマンド COMMAND_LINE
を実行するには次のどちらかの形式を入力する。前者はコマンドラインがシェルに渡る。後者はシェルを起動せずに実行するので、コマンドライン文字列が解析されない。
> wsl COMMAND_LINE
> wsl --execute COMMAND_LINE
オプションを付与することもできる。--distribution DISTRO_NAME
で Linux ディストリビューションを指定したり、--cd WD
や --user USER
を使うことがあるかもしれない。
> wsl --cd /tmp -e pwd
/tmp
Bash のような引数リストマーカー --
も使える。
WSL を管理する¶
WSL 管理ツールとしての用途としては、次のものがある:
wsl のコマンドライン仕様を確認する
WSL に関する情報を確認する
Linux ディストリビューションを一覧する
Linux ディストリビューションをインストールする
WSL カーネルを更新して最新にする
WSL の各種既定バージョン (1 or 2) を指定する
Linux ディストリビューションイメージを操作する
実行中の仮想マシンすべてを即終了する
Linux ディストリビューションを終了する
Linux ディストリビューションを削除する
インストールと更新については記したので、以下ではその他の用途を見ていく。
WSL に関する情報を確認する¶
サブコマンド --status
で既定の Linux ディストリビューションの種類、カーネルバージョンなど、WSL に関する一般的な情報を出力する。簡単なコマンドなので実行例を記す:
> wsl --status
既定の配布: Ubuntu
既定のバージョン: 2
Linux 用 Windows サブシステムの最終更新日: 2022/09/12
WSL の自動更新が有効になっています。
カーネル バージョン: 5.10.102.1
Linux ディストリビューションを一覧する¶
サブコマンド --list
は Linux ディストリビューションを確認する。次の使用状況があり得る:
管理下にあるディストリビューションを一覧する
現在実行中のディストリビューションを表示する
インストール可能なディストリビューションを一覧する
コマンド入出力例を記す:
wsl > --list
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu (既定)
wsl > --list --all
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu (既定)
wsl > --list --quiet
Ubuntu
wsl > --list --verbose
NAME STATE VERSION
* Ubuntu Running 2
wsl > --list --running
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu (既定)
wsl > --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl --install -d <Distro>' を使用してインストールします。
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
openSUSE-42 openSUSE Leap 42
SLES-12 SUSE Linux Enterprise Server v12
Ubuntu-16.04 Ubuntu 16.04 LTS
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
各種の既定バージョンを指定する¶
利用者ノート
本稿執筆時点では WSL 2 で Ubuntu を利用する状況しかないので、これらの機能を深追いしない。
サブコマンド --set-default-version
は WSL の既定バージョンを指定するものだ。
> wsl --set-default-version 2
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
この操作を正しく終了しました。
サブコマンド --set-default
は既定の Linux ディストリビューションを指定する。先のコマンドが対象とするバージョンとは、このディストリビューションを利用する WSL
のバージョンものだ。
> wsl --set-default Ubuntu
サブコマンド --set-version
は指定ディストリビューションを実行する WSL のバージョンを指定するものだ。Ubuntu を WSL 2 で動作させたい場合には次のようにする:
> wsl --set-version Ubuntu 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
ディストリビューションは既に、要求されているバージョンです。
Linux ディストリビューションをインポート・エクスポートする¶
サブコマンド --import
および --export
は、Linux ディストリビューションのファイルシステムおよびデータ全体をTAR ファイル形式に符号化、復号化する。当然、利用する用途はバックアップとその回復だ。
バックアップコマンドは --export
を指定する。次のようになる:
> wsl --export Ubuntu ubuntu-bkp.tar
このアーカイブファイルを Linux システムに復元するには --import
する:
> wsl --import DISTRO_NAME DISTRO_LOCATION ubuntu-bkp.tar
ここで引数 DISTRO_NAME
と DISTRO_LOCATION
は復元後の Linux システムの名前と、それを配置する Windows 視点でのパスを表す。
利用者ノート
記憶領域媒体によって上記サブコマンドの性能に大きな差が生じるようだ。HDD では遅く SSD では速いのは想像に難くない。ファイルシステムの断片化がシリアライズ処理に影響するとか。現に、私の環境では --export
が何分経っても TAR ファイルのサイズが変わらないままだった。
注意点が二つある:
作業前に WSL を完全に停止すること。コマンド
wsl --terminate
が良い。wsl --export
するまでは登録解除系のコマンドを決して実行するな。WSL イメージが消滅する。wsl --import
すると、おそらく Ubuntu コンソールを起動したときにユーザーを「忘れている」状態でプロンプトが示される。その場合にはファイル/etc/wsl.conf
を root 編集して、既定ユーザーを示すこと:[user] default={{ YOUR_USER_NAME }}
実行中の仮想マシンすべてを即終了する¶
サブコマンド --shutdown
は実行中のディストリビューション全部と、WSL 2 仮想マシンを直ちに終了する。
> wsl --shutdown
仮想マシンを再起動をするには、Linux プログラムを実行するようなコマンド呼び出しを wsl を介して実行すればよい。
利用者ノート
このコマンドは構成変更時など、仮想マシン環境の再起動が必要な場合に実行するのが通常の運用だが、PCのメモリー容量が乏しい環境では、メモリーが逼迫してきたときに WSL を終了して、それをやりくりするのに援用することもある。
Linux ディストリビューションを終了する¶
サブコマンド --terminate
は指定したディストリビューションを終了する。もっとも、この機能が本当に必要になる機会は私の場合にはないだろう。
> wsl --list --running
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu (既定)
> wsl --terminate Ubuntu
> wsl --list --running
実行中のディストリビューションはありません。
Linux ディストリビューションを抹消する¶
サブコマンド --unregister
は、指定した Linux ディストリビューションのファイルシステムすべてとその中に含まれるデータすべてを完全に破壊する。
> wsl --unregister Ubuntu
実行後、wsl --list --all の出力を確認すると、この Ubuntu は存在しないだろう。
このコマンドは Linux ディストリビューションのメージャーアップグレード作業発生時に利用する可能性があるので、ここに記す。
構成¶
Warning
本節では WSL 2 に限定して記述する。
WSL は二段構えの構成手段を採用している。WSL 全体に対するものと、Linux ディストリビューション個別に対応するものだ。どちらもテキストベースのファイルで構成内容を指示する仕組みだ。WSL が起動するたびにこれらの構成ファイルが(記法が妥当な場合に限り)読み込まれ、適用される。
ファイル %USERPROFILE%\.wslconfig
¶
ファイル .wslconfig
は WSL 全体を統括する構成を指示する。フォルダー
%USERPROFILE%
に置かれる。自分でファイルを設置してかまわない。
構成項目すべてを理解する必要はまだないので、私の環境の設定内容を記す。RAM が 8GB しかないので、メモリー周りの設定を余儀なくされる(普通は上手くいかない)。
[wsl2]
memory=2G
swap=0
セクションラベルを wsl2
とする。
キー memory
は WSL 仮想マシンに割り当てるメモリー容量だ。
キー swap
は WSL 仮想マシンに追加するスワップ領域の容量だ。スワップファイルがない場合は 0 とする(註*スワップ領域とは、メモリー需要がハードウェア器機の制限を超過する状況で使用される「ディスク上のメモリー」だ)。
ファイルサイズを指定するエントリーでは、値を GB 単位で記す必要がある。
ファイル /etc/wsl.conf
¶
ファイル /etc/wsl.conf
は Linux ディストリビューションごとに用意できる。このファイルが指示する構成内容は、当然ながらこのファイルを特定の Linux ディストリビューションにしか適用されない。
マニュアルによると次の構成を指示できるようだ。今のところ間に合っているので手を付けなくていいだろう。
自動マウントを設定する
ネットワークを設定する
Windows と WSL の間の相互運用を設定する
WSL のユーザーを設定する
ブートを設定する
[automount]
enable = true
root = /mnt/
options = "metadata,uid=1000,gid=1000,umask=22"
利用者ノート
Windows と WSL の結合度を下げるために構成項目を追加的に指定することはあり得る。
Windows のソフトウェア各種との連携¶
今すぐ思いつくものを列挙しておく。他にもコツがあるだろう。
Windows 側の Explorer に Linux ディストリビューションのファイルシステムに ネットワークドライブの割り当て をしておくといいかもしれない。私は U ドライブに
\\wsl$
を指定している。Windows Terminal を利用しているならば、一度は設定画面を確認しておくべきだ。 WSLで Linux ディストリビューションを追加すると、便利なことに Windows Terminal にプロファイルが自動的に定義される。
Visual Studio Code を利用しているならば、WSL 関連の追加設定をするべきだ。これについては VS Code 利用ノート執筆時にそちらに記す。
資料¶
How to completely remove a Linux distro from WSL | Windows Central
wslu | wslu Wiki: 本稿では言及できなかったが、是非ともインストールすべきパッケージだ。私は wslview を常用している。