Technology

WSLのインストールと基本操作方法

Windows上でLinuxを使用する方法として、WSL(Windows Subsystem for Linux)があります。仮想マシンよりも軽量で高速に動作し、開発などで必要なLinuxツールを、Windows上で使えるのが大きな特徴です。 本記事では、WSLのインストール方法からファイル操作、プログラムの実行方法などの基本操作を解説します。

目次

WSLのインストール

Microsoft Storeからインストールする方法とPowerShellなどのターミナルからインストールする方法があります。

Microsoft Storeからのインストール方法

Windowsのスタートメニューのアプリ一覧から「Microsoft Store」を開くか、スタートボタンの横にある検索ボックスに「Microsoft Store」と入力すると、Microsoft Storeが表示されます。

Microsoft Storeで「WSL」と検索すると、Windows Subsystem for Linuxが見つかりますので、入手ボタンを押すことで簡単にインストールできます。

ターミナルを用いたインストール方法

PowerShellまたはコマンドプロンプトを管理者権限で開きます(Win+Rで「ファイル名を指定して実行」を開き、Powershellまたはcmdと打ち込んだ後に、Ctrl+Shift+Enterを押す)。

開いたら、次のコマンドを実行します。

wsl --install

これで、インストールは完了です。

上手くいかない場合は、下記の「Linux用Windowsサブシステムと仮想マシンプラットフォームの有効化」を先に実行してみてください。

Linux用Windowsサブシステムと仮想マシンプラットフォームの有効化

WSLを使用するには、Linux用Windowsサブシステムと仮想マシンプラットフォームを有効化する必要があります。「コントロールパネル」を開き、「プログラム」ー>「Windowsの機能の有効化または無効化」をクリックします。

「Windowsの機能」というウィンドウが開きますので、その中の「Linux用Windowsサブシステム」と「仮想マシンプラットフォーム」にチェックを入れて、機能を有効にします。

変更した後にはパソコンの再起動が必要です。

WSLを実行したときに「Linux用Windowsサブシステム」が無効になっている場合には、次のエラーが発生します。

このアプリケーションには、Linux用Windowsサブシステムオプション コンポーネントが必要です。
変更を有効にするには、システムの再起動が必要な場合があります。
Error code: Wsl/WSL_E_WSL_OPTIONAL_COMPONENT_REQUIRED

この場合には上記の手順で、「Linux用Windowsサブシステム」を有効にしてください。

また、「仮想マシン プラットフォーム」が無効になっている場合には、次のエラーが発生します。

Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x80370114
Error: 0x80370114 ???????????????????????????????????

この場合には上記の手順で、「仮想マシンプラットフォーム」を有効にしてください。

Linuxディストリビューションのインストール

Linuxディストリビューションは、OSのコアとなるLinuxカーネルをベースにして、ユーザーが使用するために必要な機能を追加した配布パッケージになります。有名なのはUbuntuやDebian、CentOSなどがなります。

Microsoft Storeからの入手方法

LinuxディストリビューションはMicrosoft Storeから簡単に入手できます。Windowsのスタートメニューのアプリ一覧からMicrosoft Storeを開くか、スタートボタンの横にある検索ボックスに「Microsoft Store」と入力すると、Microsoft Storeが表示されます。

Microsoft Storeの検索ボックスで、ディストリビューションの名前を打ち込むと、WSLのディストリビューションが見つかります。

配布されているディストリビューションには、UbuntuやDebianなどがありますが、ここではUbuntuを例に検索した結果を表示します。

入手ボタンをクリックすることで、Ubuntuがインストールされます。

コマンドラインからの入手

次のコマンドにより、オンラインストアから利用できるLinuxディストリビューションの一覧が確認できます。

wsl --list --online

記事執筆時点(2023/7/30)の段階での結果は以下の通りです。

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

この中からインストールしたいディストリビューションを選択して、インストールします。ここでは、Ubuntuを例にしてインストールを行うコマンドを記述します。

wsl --install Ubuntu

以上により、インストールすることができます。インストールされているディストリビューションを確認するには次のコマンドを使用できます。

wsl --list

ディストリビューションが複数インストールされている場合、既定のディストリビューションは次のコマンドで変更できます。以下は、既定のディストリビューションをUbuntuに変更しています。

wsl --set-default Ubuntu

WSLのバージョン確認

WSL2がインストールできる環境であれば、自動的にWSL2がインストールされます(現在は殆どこちらです)。しかし、古いOSの場合にはWSL1がインストールされていることもあります。

バージョンの確認

どちらのバージョンが使用されているかは次のコマンドで確認します。

wsl --list --verbose

次のように、Versionの部分が2になっていれば、WSL2が有効化されています。

  NAME                   STATE           VERSION
* Ubuntu                 Stopped         2
  docker-desktop         Stopped         2
  docker-desktop-data    Stopped         2

WSL2が有効化されている場合は、以降のWSL2のインストールは行う必要はありません。

▼古いOSでのWSL2のインストール(クリックで開く)

WSL2のインストール(古いOSの場合)

WSLがインストールされていた場合、WSL2に更新したい場合があります。WSL2に更新するには、Windows 10で、

  • x64 システムの場合: バージョン 1903 以降 (ビルド 18362.1049 以降)。
  • ARM64 システムの場合: バージョン 2004 以降 (ビルド 19041 以降)。

を満たすか、Windows 11以降である必要があります。

まず、「コントロールパネル」を開き、「プログラム」ー>「Windowsの機能の有効化または無効化」を開きます。「Linux用Windowsサブシステム」と「仮想マシン プラットフォーム」を有効にします。

これらは、管理者権限で開いたPowerShellから、以下のコマンドで有効にすることもできます。

Dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
Dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

次に、Linuxカーネル更新プログラムのパッケージをMicrosoftのホームページ(手順4)からダウンロードし、実行します。

https://learn.microsoft.com/ja-jp/windows/wsl/install-manual

Linux カーネル更新プログラム パッケージをインストールしたら、WSL2を規定のバージョンとして設定します。

wsl --set-default-version 2

ここまでの作業が終わった後に、Linuxのディストリビューションをインストールすると、WSL2に対応した状態でディストリビューションがインストールされます。

既に、インストールしていたディストリビューションに対しては、次のコマンドで変更できます。まず、

wsl --list --verbose

の結果として表示されるNAMEとVERSIONを確認します。NAMEはディストリビューションの名前です。VERSIONが1の場合にはWSLが使用されていますので、WSL2に変更します。このために、次のコマンドを使用します。

wsl --set-version Ubuntu 2

例として、UbuntuをWSL2に変更する場合について記述しました。以上により、WSLからWSL2の更新が完了です。

逆に、次のコマンドにより、WSL2からWSLに戻すことも可能です。

wsl --set-version Ubuntu 1

WSLの実行とシャットダウン

PowerShellまたはコマンドプロンプトにおいて次のコマンドを実行すると、現在のコマンド ライン内で既定のディストリビューションが立ち上がります。

wsl

また、Windowsターミナルを用いている場合には、+マークの右にある下矢印をクリックすると、インストールしたディストリビューションが表示されるので、そこから開くこともできます。

Windowsターミナルは、Windows11にデフォルトでインストールされており、PowerShellやコマンドプロンプトを開くとWindowsターミナルが自動的に立ち上がります。Windows10の場合には、Microsoft Storeから無料でインストールできます。Microsoft Storeで「Windows Terminal」と検索すると表示されますので、入手ボタンをクリックしてください。

インストールした後に、Windows Terminalを最初に起動すると「規定のアプリにするか」を訪ねてきますので、変更しておけばPowerShellなどを使用した際にWindows Terminalが起動するようになります。

wslをシャットダウンする場合には、次のコマンドを実行します。

wsl --shutdown

WindowsとLinux間のプログラム実行とファイルアクセス

Windowsのターミナル上でのLinuxコマンド実行方法

前述のようにwslを実行してLinuxのBashを開き、Bash上でLinuxのコマンドを使用することもできますが、PowershellなどのWindows上のターミナルにおいて、直接linuxのコマンドを実行することもできます。

ここでは、Linuxでよく使用されるファイル一覧を表示するコマンドlsをWindowsのターミナル上で実行します。

wsl ls

このように、wslコマンドの後にLinuxのコマンドを打ち込みます。ここでは、lsコマンドが実行されてファイル一覧が出力されます。

C:\Users\User> wsl ls
'3D Objects'
 AppData
'Application Data'
 Contacts
 Cookies
...

また、Windowsのコマンドと併用することも可能です。次のコマンドはWindows上でファイル一覧を表示するコマンドdirの結果に対して、Linux上で文字列検索を行うgrepコマンドを適用し、大文字のDが含まれている行を抽出しています。

dir | wsl grep D

PowerShell上で実行したときの結果の例を示します。

C:\Users\User> dir | wsl grep D
d-r---        2021/06/02     20:08                3D Objects
d----l        2021/06/02     23:55                Desktop
d----l        2021/06/02     23:52                Documents
d----l        2021/06/02     23:51                Downloads
dar--l        2022/01/15      1:57                OneDrive

次のようなエラーが発生した場合には、既定のディストリビューションがUbuntuになっているかを確認してください。

Processing fstab with mount -a failed.

<3>WSL (8) ERROR: CreateProcessEntryCommon:370: getpwuid(0) failed 2
<3>WSL (8) ERROR: CreateProcessEntryCommon:374: getpwuid(0) failed 2
<3>WSL (8) ERROR: CreateProcessEntryCommon:577: execvpe /bin/sh failed 2
<3>WSL (8) ERROR: CreateProcessEntryCommon:586: Create process not expected to return

既定のディストリビューションは、次のコマンドで確認できます。

wsl --list

上記のエラーが発生したとき際に表示された結果を示します。ここでは、docer-desctop-dataが既定となっています。

Linux 用 Windows サブシステム ディストリビューション:
docker-desktop-data (既定)
docker-desktop
Ubuntu

対処方法としては、Linux上のコマンドを使用するために、既定のディストリビューションをUbuntuに変更します。

wsl --set-default Ubuntu

これにより、既定のディストリビューションが変更され、UbuntuでサポートされているLinuxのコマンドが動くようになります。

Linuxのターミナル上からのWindowsプログラム実行方法

WindowsのPATHが通っている場合には、PowerShell上でプログラムを実行するときと同様に、プログラム名を記述することで実行できます。

例えば、メモ帳を開くときには、WSLのターミナルで次のコマンドを実行します。

notepad.exe

ここで、.exeまで記述しなければならない点に注意が必要です。PATHが通っていない場合には、次のように絶対パスを用いてアクセスします。

"/mnt/c/Windows/System32/notepad.exe"

ここで、/mnt/c/はWindows上のCドライブにアクセスすることを意味します。""はスペースを含む場合は必須ですが、そうでない場合は省略できます。

Windowsのターミナル上からLinuxへのファイルアクセス方法

WindowsのターミナルからLinux上のファイルにアクセスする場合には、「\\wsl$\Ubuntu」のように「\\wsl$\ディストリビューション名」を使用します。

cd \\wsl$\Ubuntu

ここでは、カレントディレクトリをUbuntuのルートディレクトリに移動しています。

Linuxのターミナル上からWindowsへのファイルアクセス方法

LinuxのターミナルからWindowsのCドライブのファイルにアクセスする場合には、「/mnt/c/」をつけます。例えば、

cd /mnt/c/

とすれば、カレントディレクトリをWindows上のCドライブに移動できます。この方法は、前述のWSL上でWindowsのメモ帳を開く方法の紹介で使用しました。

エクスプローラー上でのWSLへのファイルアクセス方法

Windowsのエクスプローラのアドレスを入力する部分に「\\wsl$」と記述することでアクセスできます。

WSLから外部インターネットへ接続するための設定

WSLターミナルを開いて、/etc/wsl.confを編集します。

sudo vim /etc/wsl.conf

vimはエディタの名前です。使い慣れたエディタを使用してください。このファイルの編集には管理者権限が必要なため、sudoコマンドを用いています。ファイルの中でgenerateResolvConffalseに設定します。次の内容をファイルに追加してください。

[network]
generateResolvConf=false

次に、/etc/resolv.confを編集します。このファイルには、指定されたホスト名を IP アドレスに解決するための DNS リストが含まれています。

sudo vim /etc/resolv.conf

このファイルの中のnameserverの行を削除して、次の1行を追加します。

nameserver 8.8.8.8

8.8.8.8は、Googleが運営するパブリックDNSサービス(Google Public DNS)です。これらの設定をすることで、DNSサービスによりホスト名が解決され、外部インターネットにアクセスできるようになります。

Ubuntuでgnuplotをインストールして実行してみる

Linux上のプログラムを実行する例として、gnuplotをインストールして実行してみます。gnuplotは科学計算でLinux上でグラフを書くためによく使用されるアプリです。

Ubuntuのターミナル上で次のコマンドを実行します。

sudo apt update
sudo apt install gnuplot

これにより、gnuplotがインストールされます。続いて次のコマンドを実行して、gnuplotを開きます。

gnuplot

すると、インタラクティブモードが起動しますので、次のコマンドを実行します。


        G N U P L O T
        Version 5.4 patchlevel 2    last modified 2021-06-01

        Copyright (C) 1986-1993, 1998, 2004, 2007-2021
        Thomas Williams, Colin Kelley and many others

        gnuplot home:     http://www.gnuplot.info
        faq, bugs, etc:   type "help FAQ"
        immediate help:   type "help"  (plot window: hit 'h')

Terminal type is now 'qt'
gnuplot> plot sin(x)

その結果、sin関数のグラフが表示されます。

インターネットよりgnuplotをインストールして実行することができました。

まとめ

本記事では、WSLのインストール方法から説明し、WindowsおよびLinuxのターミナルから互いのファイルにアクセスする方法を示しました。また、WSLからネットワーク接続するための設定方法を解説し、Linuxのプログラムを実行する例として、Ubuntuにgnuplotを外部ネットワークからインストールして、グラフを表示してみました。Windows上でLinuxのコマンドを使用できると、できることが格段に広がります。本記事が役に立ちましたら幸いです。

-Technology
-,