好きこそものの上手なれ

他人から見れば、下手の横好きですが、そっと見守ってください。

WSL (Windows Subsystem for Linux) はコマンドライン派にとって便利なサブシステム

Windows Subsystem for Linux(WSL)は、Microsoftが開発したWindows 10の新機能で、Linuxのバイナリ実行ファイルをWindows 10上でネイティブに実行することができる互換レイヤーです。この機能により、WindowsユーザーはLinux環境を手軽に利用できるようになりました。


WSLは最近知りました。サーバーや開発に向いています。
wslはWindowsとのデータやり取りがエクスプローラー経由でできるのと、他のLinuxマシンから普通のscpでデータのやり取りができるので、サーバーや開発に適しています。
以前の仮想化環境を使用するとマシンリソースの消費が大きくなり、あまりメリットを感じないことが多かったですが、WSL2はそのストレスがありません。


Windows的な使い方をしたい場合は、ネイティブにUbuntuをインストールするか、VirtualBoxかVMwareを使うことになると思います。


私は昔(約20年ほど前)に某大学でvmwareを使ってシステムをまとめる仕事を1から構築しました。その当時としては野心的だった思います。その後、コンピュータの仕事から離れて、その間の経験はなくなりましたが、最近またコンピュータ熱が湧いてきました。





●インストール
WSLのディストリビューションのインストール中の不具合やパスの変更を行う手順。


Windows PowerShellを起動(管理者権限で開く。win+x+a-)
wsl --installを入力します。(通常はこれでUbuntuのディストリビューションもインストールされます。)
既にWSLをインストールしていると、ヘルプ画面が流れるだけになります。
wsl --list --onlineとして、インストールできるディストリビューションを表示します。
wsl --install -d Ubuntuとすると、ディストリビューションがセットアップされます。


最初から指定パス(別ドライブ等)にインストールすることはできないようです。
インストール後、 exportとして、削除、importで対処します。
=========================================


Copyright (C) Microsoft Corporation. All rights reserved.
新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6
PS C:\WINDOWS\system32> wsl --install
Copyright (c) Microsoft Corporation. All rights reserved.


使用法: wsl.exe [Argument] [Options...] [CommandLine]


Linux バイナリを実行するための引数:


コマンドラインを指定しない場合、既定のシェルが起動され wsl.exe ます。


--exec、-e
既定の Linux シェルを使用せずに、指定したコマンドを実行します。


--
残りのコマンドラインをそのまま渡します。


オプション:
--cd
指定したディレクトリを現在の作業ディレクトリとして設定します。
~ が使用されている場合は、Linux ユーザーのホームパスが使用されます。パスが始まる場合
文字が含まれている場合は、Linux の絶対パスと解釈されます。
それ以外の場合、この値は Windows の絶対パスである必要があります。


--分布、-d
指定したディストリビューションを実行します。


--ユーザー、-u
指定されたユーザーとして実行します。


Windows Subsystem for Linux を管理するための引数:


--ヘルプ
使用方法に関する情報を表示します。


--install [Options]
追加の Windows Subsystem for Linux ディストリビューションをインストールします。
有効なディストリビューションの一覧を表示するには、'wsl--list--online' を使用してください。


オプション:
--distribution, -d [Argument]
名前を指定して配布をダウンロードしてインストールします。


引数:
有効なディストリビューション名 (大文字と小文字は区別されません)。


例:
wsl --install -d Ubuntu
wsl --install --distribution Debian


--set-default-version
新しい配布の既定のインストールバージョンを変更します。


--shutdown
直ちに、すべての実行中の配布および WSL 2
ライトウェイト ユーティリティの仮想マシンを終了します。


--status
Linux 用の Windows サブシステムの状態を示します。


--update [Options]
オプションが指定されていない場合、WSL 2 カーネルが
最新バージョンに更新されます。


オプション:
--rollback
以前のバージョンの WSL 2 カーネルに戻します。


--inbox
受信トレイのWSL 2 カーネルのみを更新します。Microsoft Store からWSL をインストールしないでください。


--web-download
Microsoft Store からではなく、インターネットから WSL の最新バージョンをダウンロードします。


Linux 用 Windows サブシステムで配布を管理するための引数:


--export
tar ファイルに配布をエクスポートします。
ファイル名は - 標準出力用となります。


--import [Options]
新しい配布として指定された tar ファイルをインポートします。
ファイル名は - 標準入力用となります。


オプション:
--version
新しい配布に使用するバージョンを指定します。


--list, -l [Options]
配布をリスト表示します。


オプション:
--all
現在インストールまたはアンインストールされている配布を含む、
すべての配布を表示します。


--running
現在実行中の配布のみを表示します。


--quiet, -q
配布名のみを表示します。


--verbose, -v
すべての配布に関する詳細な情報を表示します。


--online, -o
'wsl --install' を使用してインストールするために使用できるディストリビューションの一覧を表示します。


--set-default, -s
ディストリビューションを既定として設定します。


--set-version
指定されたディストリビューションのバージョンを変更します。


--terminate, -t
指定されたディストリビューションを終了します。


--unregister
ディストリビューションの登録を解除し、ルートファイルシステムを削除します。
PS C:\WINDOWS\system32> wsl --install
Copyright (c) Microsoft Corporation. All rights reserved.


使用法: wsl.exe [Argument] [Options...] [CommandLine]


Linux バイナリを実行するための引数:


コマンドラインを指定しない場合、既定のシェルが起動され wsl.exe ます。


--exec、-e
既定の Linux シェルを使用せずに、指定したコマンドを実行します。


--
残りのコマンドラインをそのまま渡します。


オプション:
--cd
指定したディレクトリを現在の作業ディレクトリとして設定します。
~ が使用されている場合は、Linux ユーザーのホームパスが使用されます。パスが始まる場合
文字が含まれている場合は、Linux の絶対パスと解釈されます。
それ以外の場合、この値は Windows の絶対パスである必要があります。


--分布、-d
指定したディストリビューションを実行します。


--ユーザー、-u
指定されたユーザーとして実行します。


Windows Subsystem for Linux を管理するための引数:


--ヘルプ
使用方法に関する情報を表示します。


--install [Options]
追加の Windows Subsystem for Linux ディストリビューションをインストールします。
有効なディストリビューションの一覧を表示するには、'wsl--list--online' を使用してください。


オプション:
--distribution, -d [Argument]
名前を指定して配布をダウンロードしてインストールします。


引数:
有効なディストリビューション名 (大文字と小文字は区別されません)。


例:
wsl --install -d Ubuntu
wsl --install --distribution Debian


--set-default-version
新しい配布の既定のインストールバージョンを変更します。


--shutdown
直ちに、すべての実行中の配布および WSL 2
ライトウェイト ユーティリティの仮想マシンを終了します。


--status
Linux 用の Windows サブシステムの状態を示します。


--update [Options]
オプションが指定されていない場合、WSL 2 カーネルが
最新バージョンに更新されます。


オプション:
--rollback
以前のバージョンの WSL 2 カーネルに戻します。


--inbox
受信トレイのWSL 2 カーネルのみを更新します。Microsoft Store からWSL をインストールしないでください。


--web-download
Microsoft Store からではなく、インターネットから WSL の最新バージョンをダウンロードします。


Linux 用 Windows サブシステムで配布を管理するための引数:


--export
tar ファイルに配布をエクスポートします。
ファイル名は - 標準出力用となります。


--import [Options]
新しい配布として指定された tar ファイルをインポートします。
ファイル名は - 標準入力用となります。


オプション:
--version
新しい配布に使用するバージョンを指定します。


--list, -l [Options]
配布をリスト表示します。


オプション:
--all
現在インストールまたはアンインストールされている配布を含む、
すべての配布を表示します。


--running
現在実行中の配布のみを表示します。


--quiet, -q
配布名のみを表示します。


--verbose, -v
すべての配布に関する詳細な情報を表示します。


--online, -o
'wsl --install' を使用してインストールするために使用できるディストリビューションの一覧を表示します。


--set-default, -s
ディストリビューションを既定として設定します。


--set-version
指定されたディストリビューションのバージョンを変更します。


--terminate, -t
指定されたディストリビューションを終了します。


--unregister
ディストリビューションの登録を解除し、ルートファイルシステムを削除します。
PS C:\WINDOWS\system32> wsl -l -v
Linux 用 Windows サブシステムには、ディストリビューションがインストールされていません。
ディストリビューションは Microsoft Store にアクセスしてインストールすることができます:
https://aka.ms/wslstore




PS C:\WINDOWS\system32> wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl --install -d ' を使用してインストールします。


NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_7 Oracle Linux 8.7
OracleLinux_9_1 Oracle Linux 9.1
openSUSE-Leap-15.5 openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed openSUSE Tumbleweed




PS C:\WINDOWS\system32> wsl --install -d Ubuntu
インストール中: Ubuntu
Ubuntu はインストールされました。
Ubuntu を起動しています...


PS C:\WINDOWS\system32> wsl -l -v
Linux 用 Windows サブシステムには、ディストリビューションがインストールされていません。
ディストリビューションは Microsoft Store にアクセスしてインストールすることができます:
https://aka.ms/wslstore


あれ、と焦りますよね。
実は、最初だけですが、アカウントとパスワードを作成する画面が別で開いています。
しかも時間が掛かりますので、不便で仕方ないです。
誤って閉じてしまったのだと思います。


再度
PS C:\WINDOWS\system32> wsl --install -d Ubuntu
とすると、以前間違えて閉じた画面が開きます。


Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2 ???????????? ??????????????????????? https://aka.ms/wsl2kernel ?????????


Press any key to continue...


何やらエラーメッセージWslRegisterDistribution failed with error: 0x800701bcが出ています。これは、通常、Linuxカーネル更新プログラムパッケージが適用されていない場合に発生します。wsl --updateコマンドでWSLを更新し、再インストールします。
その後、ターミナルを閉じ、コンピュータを再起動します。


PS C:\WINDOWS\system32> wsl --update
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム はインストールされました。


ターミナルを閉じ、コンピュータを再起動します。(私はパワーシェルを閉じ再起動せずに)再インストールしました。


PS C:\WINDOWS\system32> wsl --install -d Ubuntu
Ubuntu は既にインストールされています。
Ubuntu を起動しています...
Installing, this may take a few minutes...


しばらく待ちます。


Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: ubuntuのユーザ名入力
New password:ubuntuのパスワード入力
Retype new password:ubuntuのパスワード再度入力
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details.


Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.133.1-microsoft-standard-WSL2 x86_64)


* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage


This message is shown once a day. To disable it please create the
/home/ユーザ名/.hushlogin file.


ユーザ名@PC名:~$
でWindowsからUbuntuが使えるようになりました。




WSLのディストリビューションのパスを変更する。


最初から指定パス(別ドライブ等)にインストールすることはできないようです。
インストール後、 exportとして、削除、importで対処します。


■エクスポート
wsl --export Ubuntu d:/wsl/Ubuntu_20240103/Ubuntu_20240103.tar


PS C:\WINDOWS\system32> wsl --export Ubuntu d:/wsl/Ubuntu_20240103/Ubuntu_20240103.tar
エクスポートが進行中です。これには数分かかる場合があります。
この操作を正しく終了しました。
PS C:\WINDOWS\system32> wsl
To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details


■削除
wsl --unregister Ubuntu


PS C:\WINDOWS\system32> wsl --unregister Ubuntu
登録解除。
この操作を正しく終了しました。


■インポート
PS C:\WINDOWS\system32> wsl --import Ubuntu_20240103 D:\wsl\Ubuntu_20240103\ D:\wsl\Ubuntu_20240103\Ubuntu_20240103.tar
インポート中です。この処理には数分かかることがあります。
この操作を正しく終了しました。


よく間違えるのが
wsl --import Ubuntu_20240103 D:\wsl\Ubuntu_20240103\Ubuntu_20240103.tar
とパスとファイル名を一緒にしてしまう点


wsl.exe --import
はインポートするディストリビューションに割り当てる名前
はこのWSLディストリビューションを保存するフォルダーへのフルパス
はtarファイルへのフルパス




インポート後の自動ユーザログインにならない不具合対策


パワーシェルの管理者権限で


Function WSL-SetDefaultUser ($distro, $user) {
Get-ItemProperty Registry::HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Lxss\\*\\ DistributionName |
Where-Object -Property DistributionName -eq $distro |
Set-ItemProperty -Name DefaultUid -Value ( (wsl -d $distro -u $user -e id -u) | Out-String);
};
WSL-SetDefaultUser ディストリビューション名 ユーザ名


具体的にはUbuntuでhogeユーザなら
WSL-SetDefaultUser Ubuntu hoge
とします。


PS C:\WINDOWS\system32> wsl --shutdown
PS C:\WINDOWS\system32> wsl


うまくいかない場合は、wsl後、su ユーザ名の次善策もあります。


以上です。