TECHNOLOGY

WSL(Windows Subsystem for Linux)インストールからファイル操作、プログラムの実行まで

WindowsとLinuxは、それぞれ異なる特長を持つOSですが、長らく互換性の問題が存在していました。特に、Windows環境でLinuxのツールやコマンドを使用することは環境構築に手間がかかりました。

しかし、そんな課題を解決する「WSL(Windows Subsystem for Linux)」が登場し、Windowsコンピュータ上で容易にLinuxを利用することが可能になりました。

本記事では、WSLのインストール方法からファイル操作、プログラムの実行方法を解説します。

目次

  1. WSLとは?
  2. WSLのインストール
    1. Microsoft Storeからのインストール方法
    2. ターミナルを用いたインストール方法
    3. Linux用Windowsサブシステムと仮想マシンプラットフォームの有効化
  3. Linuxディストリビューションのインストール
    1. Microsoft Storeからの入手方法
    2. コマンドラインからの入手
  4. WSLとWSL2
    1. バージョンの確認
    2. WSL2のインストール
  5. WSLの実行とシャットダウン
  6. WindowsとLinux間のプログラム実行とファイルアクセス
    1. Windowsのターミナル上でのLinuxコマンド実行方法
    2. Linuxのターミナル上からのWindowsプログラム実行方法
    3. Windowsのターミナル上からLinuxへのファイルアクセス方法
    4. Linuxのターミナル上からWindowsへのファイルアクセス方法
    5. エクスプローラー上でのWSLへのファイルアクセス方法
  7. WSLから外部インターネットへ接続するための設定
  8. Ubuntuでgnuplotをインストールして実行してみる
  9. まとめ

WSLとは?

以前は、Windows上でLinuxのツールを使うために、VirtualBoxなどの仮想環境を用意したり、Cygwinのようなエミュレータをインストールしたりする必要がありました。また、WindowsとLinuxを1つのパソコンにデュアルブートでインストールする方法もありました。

WSL(Windows Subsystem for Linux)は、Windows上でLinuxを利用できる機能であり、上記の方法よりもより簡単にLinuxの機能を使用することができます。

WSLのインストール

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

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

WSLは、Microsoft Storeから簡単に入手できます。

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

コマンドプロントやPowershellでは、次のコマンドを実行することでMicrosoft Storeを開けます。

start ms-windows-store:

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

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

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

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

wsl --install

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

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

WSLにはWSLとWSL2があります。WSL2の方が新しく、軽量化や高速化などの改善が行われています。また、Hyper-Vを使用することによりLinuxカーネルを完全にエミュレートしているため、Linuxと完全な互換性があり、WSLで動作しなかったDockerなども動作するようになりました。WSL2がインストールできる環境であれば、自動的にWSL2がインストールされますが、古いOSの場合にはWSLがインストールされていることもあります。

バージョンの確認

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

wsl --list --verbose

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

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

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

WSL2のインストール

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ターミナルを用いている場合には、+マークの右にある下矢印をクリックすると、インストールしたディストリビューションが表示され、直接ターミナル上でBashを開くこともできます。

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はエディタで、nanoやemacsなど使い慣れたエディタを使用してください。このファイルの編集には管理者権限が必要なため、sudoコマンドを用いています。ファイルの中のgenerateResolvConfをfalseに設定します。

[network]
generateResolvConf=false

generateResolvConfはデフォルトでtrueになっており、trueの場合には/etc/resolv.confを生成するようにWSLを設定します。/etc/resolv.confには、指定されたホスト名をその IP アドレスに解決できる DNS リストが含まれています。

この生成機能をfalseにすることでオフにし、自分で/etc/resolv.confを修正します。

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関数のグラフが表示されます。

まとめ

WSLのインストール方法から説明し、WindowsおよびLinuxのターミナルから互いのファイルにアクセスする方法を示しました。

また、Linuxのプログラムを実行する例として、Ubuntuにgnuplotをインストールして、グラフを表示しました。

Windows上でLinuxのコマンドを使用できると、できることが格段に広がります。

本記事が役に立ちましたら幸いです。

-TECHNOLOGY
-,