WindowsとLinuxは、それぞれ異なる特長を持つOSですが、長らく互換性の問題が存在していました。特に、Windows環境でLinuxのツールやコマンドを使用することは環境構築に手間がかかりました。
しかし、そんな課題を解決する「WSL(Windows Subsystem for Linux)」が登場し、Windowsコンピュータ上で容易にLinuxを利用することが可能になりました。
本記事では、WSLのインストール方法からファイル操作、プログラムの実行方法を解説します。
目次
- WSLとは?
- WSLのインストール
- Linuxディストリビューションのインストール
- WSLとWSL2
- WSLの実行とシャットダウン
- WindowsとLinux間のプログラム実行とファイルアクセス
- WSLから外部インターネットへ接続するための設定
- Ubuntuでgnuplotをインストールして実行してみる
- まとめ
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のコマンドを使用できると、できることが格段に広がります。
本記事が役に立ちましたら幸いです。