Windows 10のWindows Subsystem for Linux(WSL):究極のガイド

Windows Subsystem for LinuxまたはWindows WSLは、開発者がWindows 10デスクトップでLinux内で直接作業するための優れたソリューションです。

Windowsと一緒に複数のLinuxシステムをインストールするためにハードドライブのパーティションを作成するのに時間をかけすぎた場合、この記事はあなたにとって幸運です。

マイクロソフトの妖精のコードマザーは、別のオプションを提供することに決めました:Windows Subsystem for Linux(WSL)。WSLを使用すると、LinuxシステムをWindowsと並行して実行することがはるかに簡単で柔軟になります。

このチュートリアルでは、WSLの使用を開始する方法を学びます。独自のbashまたはPowerShellを使用するよりも、より多機能な便利なツールの使用方法を学ぶことができます。

セルフサービスのパスワードリセットソリューションでリモートユーザーのサービスデスク通話を削減し、VPNオフでもキャッシュ資格情報を更新します。Specops uResetのデモを入手!

WSLとは何ですか?

WSLまたはC:\Windows\System32\wsl.exeは、Windowsツールであり、LinuxディストリビューションをWindowsストアからアプリとしてインストールすることができます。

WSLは単純なWindows実行可能ファイルなので、コマンドプロンプトまたはPowerShellターミナルから呼び出すことができます。このトピックについては後ほど詳しく説明します。今のところ、WSLが内部で何をしているかを少し理解することが重要です。

wsl.exe

WSLを有効にする方法

WSLを設定して有効にするには、Windows 10と並行してLinuxディストリビューションをインストールする必要があります。ただし、これにより、2つの異なるオペレーティングシステムが互いと連携できるようになります。

前提条件

Active Directoryでパスワードリセットの要求が多すぎる場合は、セキュアなSSPRソリューションであるSpecops uResetをチェックしてください。

WindowsにWSLをインストールするには、次の要件を満たす必要があります。Windows 10 64ビットのコンピューターで、ビルド18917以降を使用している必要があります。

Windows 10のビルドは、winverユーティリティを実行して確認できます。

Windows build 1809

WSL Windows機能の有効化

WSLを有効にするのは簡単です。ダウンロードは必要ありません。単なるWindowsの機能です。

WSLを有効にするには、管理者としてPowerShellを開き、次のコマンドを実行します:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux 

関連記事: 管理者としてPowerShellを実行する方法

完了したら、コンピューターを再起動して完了です!

WSL用のLinuxディストリビューションのダウンロード

WSL自体はLinuxディストリビューションをインストールしません。自分でLinuxディストリビューションをインストールする必要があります。Windows 10が再起動したら、選んだLinuxディストリビューションの設定を開始してください。

まず、Microsoft Storeを開き、「WSL」と検索します。すぐにLinuxディストリビューションのリストが表示されます。

次に、選択したディストリビューションをインストールします。このチュートリアルではUbuntu 18.04を使用します。この記事を書いた時点では、他にも利用可能なディストリビューションがいくつかあります。

  • Ubuntu 16.04 LTS
  • Ubuntu 18.04 LTS
  • OpenSUSE Leap 15
  • OpenSUSE Leap 42
  • SUSE Linux Enterprise Server 12
  • SUSE Linux Enterprise Server 15
  • Kali Linux
  • Debian GNU/Linux
  • Fedora Remix for WSL
  • Pengwin
  • Alpine WSL

WSLバージョンの設定

LinuxをWSLバージョン2で使用できるようにする必要がある場合は、以下の手順に従って行うことができます。

PowerShellコンソールで:

  1. wsl -lまたはwsl --listを実行して、インストールされているLinuxのバージョンを確認します。
  2. リストが表示されたら、WSL2で実行するディストリビューションの名前をコピーし、wsl --set-version <Distro> 2と実行します。<Distro>は先ほどコピーした名前に置き換えてください。
  3. wsl -l -vまたはwsl --list --verboseを実行して、コマンドが正常に実行されたことを確認します。このコマンドは、すべてのWSLディストリビューションと各ディストリビューションの使用しているバージョンの完全なリストを返します。
Setting WSL Linux distro

将来インストールするすべてのディストロに対して、デフォルトのWSLバージョンをWSL2に設定することもできます。以下のコマンドを実行してください:wsl --set-default-version 2

WSLの起動

WSLを使用するには、PowerShellターミナルを開き、wslと入力してください。正しくWSLを設定していれば、選択したWSLディストロで実行されるbashターミナルに入ることができます。ここからは、任意のLinuxコマンドを実行することができます。

以下に、wsl.exeの起動時に提供されるすべてのオプションの参照があります。

Command Explanation Example
exec, -e Will run command using without using default shell wsl -e curl google.com
Passes anything after this parameter to default shell. Leaving the operator out will also work. wsl — curl google.com, wsl curl google.com
distribution, -d Opens a terminal in the specified distribution’s shell wsl -d Ubuntu-18.04
user, -u Runs WSL command as the specified user as long as user exists on that distro wsl -d Ubuntu-18.04 -u tux_user
export Exports the specified distribution to a tar file on your local system. wsl –export Ubuntu ./Test-Ubuntu.tar
import [–version] Imports a tar file as a new WSL distribution. Can specify WSL version with the –version option wsl –import Test-Ubuntu C:\data\Test-Ubuntu .\Test-Ubuntu.tar
list, -l [Options] wsl –list
all List all installed WSL distributions wsl -l –all
running List only WSL distributions that are currently running wsl -l –running
quiet, -q Only show WSL distribution names wsl -l -q
verbose, -v Show detailed information about all WSL distributions wsl -l -v
set-default, -s Sets the specified WSL distribution as the default distribution for WSL commands. wsl -s Test-Ubuntu
set-default-version Changes the default WSL version for all new distributions installed to that system wsl –set-default-version 2
set-version Changes the WSL version of the specified distribution wsl –set-version Test-Ubuntu 2
shutdown Immediately terminates all running WSL distributions wsl –shutdown
terminate, -t Terminates the specified WSL distribution wsl -t Test-Ubuntu
unregister Unregisters the specified WSL distribution wsl –unregister Test-Ubuntu
help Display information about using WSL wsl –help

これらのスイッチを使い慣れると、WSLを介してアプリケーションを実行・管理することが、独自にLinux仮想マシンを管理するよりも簡単になることに気づくでしょう。

クイックヒント:すべてのフラグと引数を確認するには、wsl --helpを実行してください。

終了する場合は、exitと入力してPowerShellターミナルに戻ってください。

WSLを介してWindows/Linuxリソースを共有する

WSLの最大の利点の一つは、WindowsとLinuxのリソースをシームレスに共有できることです。現時点では、ファイルシステム、環境変数、ネットワークリソース、cmdやPowerShellなどのコマンドラインツールを共有することができます。

このセクションで示されるすべての例は、WSL Ubuntu Linuxディストロを使用したものです。異なるディストロをダウンロードした場合は、異なる結果になる可能性があります。

ファイルシステムの共有

ファイルシステムは、WSLと共有するのに非常に便利なものの一つです。WSLでは、両方のファイルシステムを1つのように操作することができます。

Windows 10のファイルシステムはLinuxではディレクトリとしてマウントされますが、LinuxのファイルシステムはWindowsではフォルダとしてマウントされます。

WindowsでLinuxのファイルシステムを環境変数から見つける方法

WSLでLinuxディストリビューションをインストールすると、Windowsの環境変数が追加されることがあります。WSL Ubuntu Linuxディストリビューションの場合、UBUNTU_HOMEという環境変数が作成されます。この環境変数は、WindowsとWSL Ubuntuの両方からLinuxの/home/ubuntuディレクトリを指すものです。

UBUNTU_HOMEに定義されたパスは、両者間でリソースを使用するスクリプトを実行したり、Windowsターミナルのデフォルトの場所を設定するために使用することができます(後述します)。

Inspecting the WSL UBUNTU_HOME environment variable

他のディストリビューションでも同様の環境変数が定義される場合があります。新しいLinuxディストリビューションをインストールした後、PowerShellコマンドGet-ChildItem -Path $Env:\を使用してWindowsの環境変数を調べて、追加されたかどうかを確認してください。

この環境変数のショートカットは、すべてを/home/ubuntuディレクトリに配置したい場合に便利です。しかし、それがどのようにしてそこに到達したのか、そして他の方法で到達する方法についてもう少し詳しく見てみましょう。

Microsoftストアのパッケージフォルダを介してWindowsからLinuxのファイルシステムを見つける方法

すべてのWSLディストリビューションが簡単な参照方法で提供されるわけではありません。別の方法でLinuxのファイルシステムを見つける方法を学ぶことが重要です。

ほとんどのWSL LinuxディストリビューションはMicrosoftストアからインストールされるため、Linuxファイルシステムは他のWindowsストアアプリと同じ場所にあります。Windowsストアアプリが保存されるディレクトリを見つけるには、%USERPROFILE%\AppData\Local\Packages\に移動します。通常、これはデフォルトで保護されていますので、フォルダを制御する必要があります。

パッケージフォルダには多くのサブフォルダがあり、Linuxディストリビューションのファイルシステムが表示されるかもしれません。例えば、WSL Ubuntuディストリビューションは、CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgscフォルダの中にありました。

パッケージフォルダに移動すると、Linuxファイルシステムが見つかります。WSL Ubuntuの場合、それはLocalState\rootfsフォルダにあります。 これはLinuxディストリビューションのルートディレクトリです。

Linux filesystem under %USERPROFILE%/AppData/Local/Packages/

LinuxからWindowsファイルシステムを見つける方法

LinuxからWindows 10のファイルシステムを見つけるには、WindowsでWSLを起動します。WSLはbashターミナルを開きます。このbashターミナルはデフォルトでUBUNTU_HOMEディレクトリで起動します。

Windowsストレージボリュームのルートも見つけることができます。各Windowsのドライブレター(C、D、Eなど)は、WSL Linuxファイルシステムからマウントされたドライブとして扱われます。管理者権限(root特権)がある限り、/mnt/c/mnt/dなどの各ボリュームがマウントされているはずです。

Bash equivalent of running Get-ChildItem C:\Windows\System32 | Select-Object -First 5 running on WSL

WSL2ファイルシステム

WSLファイルシステムのナビゲーションはかなり簡単です。Linuxファイルシステム構造に慣れていない人は、Windows Explorerでそれをナビゲートできることを評価するでしょう。しかし、WSL2に切り替えたい場合は、少し複雑になります。

WSL2では、ファイルシステムの共有方法がすべての仕組みを変更します。まず、ファイルシステムはディレクトリではなく、vhdx形式の仮想ハードディスクとなります。

WSL Ubuntuディストリビューションの場合、vhdxファイルは%USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalStateの下にあります。

仮想ディスクはディスクマネージャツールでWindowsにマウントできますが、WSLディストリビューションが登録されている間は仮想ディスクをマウントできません。

環境変数の共有

環境変数は、どんなオペレーティングシステムにおいても重要な要素であり、アプリケーション内のどこでもバイナリや実行可能ファイルを参照しやすくします。

Windows 10ビルド17063以前では、Windows 10とWSL Linux間で共有される環境変数はPATH変数だけでした。その後、WSLENV環境変数を使用して環境変数を共有することが可能になりました。

他の環境変数を共有するためにWSLENV環境変数を使用することは、少しメタな感じがするかもしれません。異なるプラットフォーム間で環境変数を共有するためには、実際には別の環境変数内に環境変数を設定する必要があります。

概要

環境変数を共有するには、以下の3つのステップが必要です。Windows/Linux間で共有する場合の主な違いは、使用するスイッチ引数です(下記の完全な参照を参照してください)。

  1. Windowsで環境変数を定義またはLinuxで定義します。
  2. WSLENV環境変数を、以前に定義した環境変数に続いてスイッチ引数(パスの変換に使用)として設定します。
  3. WindowsまたはLinuxで環境変数を読み取ります。

共有オプション

環境変数を表示するプラットフォームによって、4つの異なる方法で変数を利用できるようにすることができます(以下の表に示すスイッチを使用)。

  • Windowsファイルシステムは自体からのみ利用可能
  • WSLファイルシステムはWSLからのみ利用可能
  • WSLファイルシステムはWSL LinuxとWindowsの両方で利用可能
  • WindowsファイルシステムはWSL LinuxとWindowsの両方で利用可能
Flag Explanation
/p Single path. A variable set with this will be translated between the Windows and WSL Linux and made available to both.
/l List of paths. Similar to /p, except it can accept more than one path. On Windows, this list will be delimited by semicolons while on WSL Linux it will be delimited by colons.
/u Unix path. A path set with this flag can only be accessed when invoking WSL Linux from Windows. Can be used with either the /p or /l flags
/w Windows path. A path set with this flag can only be accessed when invoking Windows from WSL Linux. Can be used with either the /p or /l flags

パスの変換

環境変数を共有する主な理由は、パスの変換です。おそらく既にご存じのように、Windowsにはユーザープロファイルフォルダがあり、Linuxにはユーザープロファイルディレクトリがあります。各ユーザーには予め定義された「ホームフォルダ」があり、WindowsではC:\Users\<username>、Linuxでは/home/<username>のようなものです。

WSLは、/pおよび/lスイッチを使用して、これらのフォルダパスをプラットフォーム間で変換します。

WindowsパスをLinuxで共有および変換する

単一のパスまたは複数のパスを一度に共有するには、/pおよび/lスイッチを使用します。

Windowsのコマンドプロンプトで、DESKTOPというWindows環境変数が定義されている場合、WSLENV変数にDESKTOP/pの値を割り当てます。これにより、WSL Linuxからアクセスできるようになります。以下に例を示します。

Setting variables in Windows and accessing in Linux

同じ手順を/lスイッチを使用して複数のパスに対しても実行できます。

LinuxパスをWindowsで共有および変換する

LinuxパスをWindowsで共有および変換する手順は、Windowsと同じですが、Linux固有のコマンドを使用して環境変数を設定します。

環境変数の共有についての詳細は、このMicrosoftの記事を参照してください。

ネットワークリソースの共有

ネットワーキングコンポーネントは、WindowsとWSL Linuxの間で共有するための便利なリソースです。

物理ネットワークインターフェースと仮想化ネットワークインターフェース

WSL2では、ネットワークインターフェースは仮想化されています。仮想化されたネットワークインターフェースとは、WSL2のネットワークインスタンスがWindows 10のインスタンスとは異なるIP構成を保持できることを意味します。

この記事を書いている時点では、WSL2 LinuxのIPアドレスはネットワークアドレス変換(NAT)を使用してWindows上のネットワークリソースにアクセスしますが、マイクロソフトはNATの削除を優先的に解決すべき問題のリストに掲載しています。

Same comparison from earlier, but against a WSL2 distro

クライアントのDNS解決

WSLは引き続き/etc/resolv.conf/etc/hostsファイルを生成してDNS解決を可能にします。もし/etc/wsl.confで明示的にその動作を上書きしない限り、クライアントのDNS解決は予想どおりに動作し続けます。

詳細については、後の記事でwsl.confファイルについて説明します。

PowerShellとBashの共存

WSLの最も素晴らしい機能の一つは、PowerShellとBashの間で情報をシームレスにやり取りできることです。

PowerShell –> Bash

WSLの実行可能ファイルはパイプラインからの入力を受け取るため、PowerShell内でwsl.exeコマンドを呼び出してstdinを受け取ることができます。これにより、PowerShellからWSLに整数オブジェクトを渡し、それをBashターミナルで処理することができます。以下に例を示します。

Passing PowerShell to grep

Bash –> PowerShell/Cmd

同様に、WSL内のBashからPowerShellやcmdに情報を渡すことも簡単です。以下に、Linuxのlsコマンドを実行し、出力をパイプラインを介してPowerShellのSelect-Objectコマンドレットに渡す例があります。

Passing Bash output to PowerShell

両方のコマンドがシステムパスにある限り、WSLからWindowsのcmdユーティリティを呼び出し、出力をLinuxに戻すこともできます。

WSLは、デフォルトでWindowsのPATH変数にアクセスできるため、両方のシステムパスを認識しています。

以下では、WSL内でWindowsのコマンドであるipconfigを実行し、その出力をLinuxのgrepコマンドに渡すことができることがわかります。また、逆にLinuxのコマンドwhichを呼び出し、出力をWindowsのipconfigコマンドに渡すこともできます。

Executing a Windows command in Linux

翻訳上の問題

bashとPowerShellの間でコマンドの出力をやり取りする際にはいくつかの注意点があります。

大きな問題の1つは、PowerShellとbashが情報を返す方法です。PowerShellはオブジェクト指向プログラミング言語であり、一方bashは文字列操作ツールです。PowerShellオブジェクトをbashにパイプすると、それは文字列としてフラット化されます。逆に、bashの出力をPowerShellにパイプすると、文字列オブジェクトに変換されます。

以下の例のように、PowerShellでオブジェクトの型を明示的に変換することで、この動作をある程度回避することができます。しかし、追加の作業なしでPowerShellとWSLの間でオブジェクトをやり取りすることを期待している場合、失望することになるでしょう。

Problems passing objects

bashの日付をPowerShellの[datetime]クラスとしてキャストすることで、スクリプト内で使用できる有効なPowerShellオブジェクトが得られます。WindowsからWSLに戻る必要があるスクリプトを作成する場合、少しコードを修正することで可能です。

Xfce4を使用したWindows Subsystem for Linux GUIのインストール

コマンドラインツールだけでは足りない場合は、GUIを使用する時が来ました。WSLでグラフィカルユーティリティを実行する必要がある場合、カスタムディストロを探索する必要がある場合、またはまだbashに慣れていない場合は、Linux GUIをインストールできます。

Xfce

Linuxには多くのデスクトップ環境があります。WSLで設定する最も一般的なものの1つは、Xfceと呼ばれます。この記事の執筆時点では、Xfceのバージョンは4です。他のデスクトップ環境も利用可能ですが、この記事ではXfce4のセットアップ方法について学びます。

xRDP

Linuxデスクトップ環境が設定されている場合、RDPプロトコルを理解するサービスが必要です。この記事では、xRDPサーバーに焦点を当てます。xRDPはLinux用のオープンソースのRDPサーバーであり、WindowsホストのようにRDPクライアントを使用してLinuxに接続することができます。

設定

WindowsからXfce4とxRDPを使用してLinux GUIにアクセスするには、以下の手順に従ってください。WSLのターミナルで:

  1. Xfce4をダウンロードしてインストール-コマンドsudo apt-get -y install xfce4 && sudo apt-get -y install xubuntu-desktopを使用してXfce4をダウンロードしてインストールします。これには時間がかかります。お待ちください。
  2. xRDPサーバーをインストール-コマンドsudo apt-get -y install xrdpを実行してxRDPをダウンロードしてインストールします。
  3. xfce4のためにxRDPを構成-echo xfce4-session > ~/.xsession
  4. xRDPを再起動-sudo service xrdp restart
  5. WSLディストリビューションのIPアドレスを見つけるifconfig | grep inet

この時点で、Windows 10からRDPセッションを開くことができるはずです。 mstscを使用してリモートデスクトップ接続ウィンドウを開き、ステップ#5で見つかったLinuxのIPアドレスを入力してください。

すべてがうまくいけば、以下に示すようにWindowsオペレーティングシステム上で実行されているLinuxディストリビューションにRDP接続できます。

Windows Subsystem for Linux GUI with Xfce4 and xRDP

ヒントとトリック

WSLの基礎とその使用方法を理解したら、次は何ですか? 幸いなことに、WSL向けに作成されたツールまたはWSLとの互換性のあるツールが多数あります。

wsl.confを使用してブート時にWSLの設定項目を設定する

A configuration file exists in the WSL at /etc/wsl.conf. This file contains configuration settings that run every time the WSL distro is started. When the wsl.conf file exists, WSL will ingest any setting in this file every time the Linux distro is started.

wsl.confファイル内には、いくつかの異なるセクションを設定できます。

  • Automount – Windowsからのドライブのマウント
  • Networkresolv.confまたはhostsファイルの生成
  • Interop – Windowsとの相互運用の有効化または無効化

wsl.confファイルの詳細については、MicrosoftのWSL起動設定の設定ページを参照してください。

Visual Studio Code(VS Code)でWSLで開発する

VS Codeはすべてと統合されており、WSLも例外ではありません。 VS Code内から、WSLディストリビューション上にワークスペースを設定し、Windows上のVS Codeで完全に操作できます。 ターミナルを実行する必要すらありません!

WindowsでWSLと一緒にVS Codeを設定するには、まず当然ですがWindows用のVS Codeをインストールする必要があります。また、Remote – WSL VS Code拡張機能もインストールしてください。

拡張機能をインストールしたら、WSLターミナルを開いてcode <workspace>と入力して接続できます。ここで<Workspace>は、VS Codeを実行したいディレクトリです。VS CodeはWSLディストリビューション内にいることを検出し、ウィンドウを開き、ワークスペースに接続します。

接続が成功したかどうかは、VS Codeの左下隅にあるWSL接続アイコンで確認できます。WSLディストリビューションの名前が表示されているはずです。

Working with WSL and Visual Studio Code

さらに、組み込みのターミナルを使用してWSLワークスペースと直接やり取りすることもできます。 git bashコマンドを実行するために別のウィンドウを開く必要はありません。

WindowsターミナルにWindows Subsystem for Linuxを追加する

WSLのもう1つの便利な使用方法は、WSLコンソールをWindows Terminalに追加することです。

Windows Terminal内から、各WSLディストリビューションを独自のタブに追加できます。また、各タブの外観をカスタマイズして迷子にならないようにすることもできます。

WSLディストロを使用している場合、UBUNTU_HOMEのようなユーザーディレクトリの環境変数を設定することもできます。ターミナルの開始ディレクトリとしてそれを設定することもできます。

Checking the date in PowerShell and Bash

WSLをWindowsターミナルで使用するための完全なビデオ解説をご希望の場合は、以下のTechSnipsのハウツー動画をご覧ください。

終わりに

Active Directoryでのパスワードリセットの電話やアカウントロックアウトに苦労するのをやめましょう。Specops uResetの無料トライアルを入手してください。

Microsoftは、Linux開発者がWindows上で開発できるようにするためにWSLをリリースしました。これまで、WSLは正しい方向に進んでいます。

WSLは、Microsoftの新しいオープンソースフレンドリーな戦略の重要な要素となるようです。開発者がコードを書くデバイスとしてAppleに立ち向かうためにMicrosoftが取り組んでいるならば、それは険しい戦いになるでしょう。しかし、WSLは強力なカードです。

WSLは、次のような多くの開発者にとって望ましい利点をもたらします:

  • ローカルのLinux仮想マシンよりもはるかに軽量
  • ハイパーバイザのインストールと管理のオーバーヘッドの除去
  • 複数のパーティションが必要なくなる
  • 複雑なGrubブートローダーが不要になる

WSLは単にオンになり、実行されるため、みんなが幸せにコードを書き続けることができます。

Source:
https://adamtheautomator.com/windows-subsystem-for-linux/