Windows Subsystem for Linux に関してよく寄せられる質問

全般

Windows Subsystem for Linux (WSL) とは何ですか。

Linux 用 Windows サブシステム (WSL) は Windows オペレーティング システムの機能の 1 つであり、Linux ファイル システムを Linux のコマンド ライン ツールや GUI アプリと一緒に Windows 上で従来の Windows デスクトップやアプリと共に直接実行することを可能にします。

詳しくは、詳細ページをご覧ください。

WSL の対象ユーザーは誰ですか。

これは、主に開発者向けのツールで、特にオープン ソース プロジェクトを扱う、または Linux サーバー環境へのデプロイを行う Web 開発者向けです。 WSL は、Bash、一般的な Linux ツール (、awkなど) と Linux ファースト フレームワーク (sedRuby、Python など) の使用が好きですが、Windows 生産性ツールの使用も楽しみます

WSL で何ができますか。

WSL を使用すると、任意のディストリビューション (Ubuntu、Debian、OpenSUSE、Kali、Alpine など) を使用して、Bash シェルで Linux を実行できます。 Bash を使用すると、コマンド ライン Linux ツールおよびアプリを実行できます。 たとえば、「lsb_release -a」と入力して Enter キーを押すと、現在実行中の Linux ディストリビューションの詳細が表示されます。

ディストリビューションの詳細のスクリーンショット

Linux Bash シェル内からローカル コンピューターのファイル システムにアクセスすることもできます。ローカル ドライブは /mnt フォルダーの下にマウントされます。 たとえば、 C: ドライブは /mnt/c の下にマウントされます。

マウントされた C ドライブのスクリーンショット

WSL が組み込まれた一般的な開発ワークフローについて説明してください。

WSL は開発者を対象としており、内部開発ループの一部としての使用を目的としています。 たとえば、Sam が CI/CD パイプライン (継続的インテグレーションおよび継続的デリバリー) を作成しており、クラウドにデプロイする前に、まずローカル コンピューター (ノート PC) でそれをテストしたいと思っているとします。 Sam は WSL (速度とパフォーマンスを向上させるには WSL 2) を有効にして、ローカル (ノート PC) で本物の Linux Ubuntu インスタンスと、任意の Bash コマンドとツールを使用することができます。 開発パイプラインをローカルで検証したら、Sam はその CI/CD パイプラインをクラウド (Azure) にプッシュできます。そうするには、これを Docker コンテナーに格納し、そのコンテナーをクラウド インスタンスにプッシュします。こうして、運用に対応した Ubuntu VM 上でこれを実行できます。

Bash とは

Bash は、広く使われているテキスト ベースのシェルおよびコマンド言語です。 これは、Ubuntu やその他の Linux ディストリビューションに含まれる既定のシェルです。 ユーザーは、シェルにコマンドを入力して、スクリプトを実行したり、コマンドやツールを実行したりして多くのタスクを行います。

この処理のしくみ

Windows コマンド ラインのブログの次の記事を参照します: WSL が Windows に Linux ファイルへのアクセスを許可する方法の詳細に関する記事。ここでは、基礎となるテクノロジについて詳しく説明しています。

VM で Linux ではなく WSL を使用するのはなぜですか。

WSL は、必要なリソース (CPU、メモリ、およびストレージ) が完全な仮想マシンよりも少なくて済みます。 また、WSL を使用すると、Linux コマンド ライン ツールおよびアプリを Windows コマンド ライン、デスクトップおよびストア アプリと共に実行したり、Linux 内から Windows ファイルにアクセスしたりすることもできます。 これにより、必要に応じて、同じファイル セットに対して Windows アプリと Linux コマンド ライン ツールを使用できます。

たとえば、Windows ではなく Linux 上で Ruby を使用するのはなぜですか。

一部のクロスプラットフォーム ツールは、それらが実行される環境が Linux のように動作することを前提として構築されました。 たとえば、一部のツールでは、非常に長いファイル パスにアクセスできることや、特定のファイルまたはフォルダーが存在することを前提としています。 これにより、Linux とは動作が異なる事が多い Windows で問題が発生することがよくあります。

Ruby や Node.js のような多くの言語は、たいていの場合、Windows に移植され、非常にうまく動作します。 ただし、すべての Ruby Gem または node/NPM ライブラリ所有者が、Windows をサポートするためにライブラリを移植するわけではなく、多くのものに Linux 固有の依存関係があります。 これにより、このようなツールやライブラリを使用して構築されたシステムはビルドから悪影響を受ける場合が多く、Windows で実行時エラーや望ましくない動作が発生することがあります。

これらは、多くのユーザーが Windows のコマンド ライン ツールの向上を Microsoft に依頼する原因となった問題の一部に過ぎません。また、こうした要因から、Microsoft が Canonical と提携して、ネイティブ Bash と Linux コマンド ライン ツールを Windows で実行できるようにすることになりました。

PowerShell においてこれは何を意味しますか。

OSS プロジェクトでの作業中、PowerShell プロンプトから Bash を実行すると非常に役立つシナリオが多数あります。 Bash のサポートは補完的なものであり、Windows でのそのコマンド ラインの価値を高め、PowerShell と PowerShell コミュニティでその他の一般的なテクノロジを利用できるようにします。

詳細については、PowerShell チームのブログ「Windows の Bash:それがすばらしい理由と PowerShell における意味」をお読みください

WSL はどのようなプロセッサをサポートしていますか。

WSL では、x64 と Arm の CPU がサポートされています。

C: ドライブにアクセスするにはどうすればよいですか。

ローカル コンピューター上のハード ドライブのマウント ポイントが自動的に作成され、Windows ファイル システムに簡単にアクセスできるようになります。

/mnt/<ドライブ文字>/

使用例は、c:\ にアクセスする cd /mnt/c です。

Git Credential Manager をセットアップするにはどうすればよいですか。 (WSL で Windows Git アクセス許可を使用するにはどうすればよいですか。)

チュートリアル「Linux 用 Windows サブシステムで Git の使用を開始する」を参照します。ここには、Git Credential Manager を設定し、Windows Credential Manager に認証トークンを保存する方法について説明するセクションが含まれています。

Linux アプリで Windows ファイルをどのように使用しますか。

WSL の利点の 1 つは、Windows と Linux の両方のアプリまたはツールを経由してファイルにアクセスできることです。

WSL では、コンピューターの固定ドライブを Linux ディストリビューションの /mnt/<drive> フォルダーの下にマウントします。 たとえば、 C: ドライブは /mnt/c/ の下にマウントされます。

マウントされたドライブを使用すると、Visual Studio またはVS Codeを使用して、たとえば C:\dev\myproj\ 内のコードを編集したり、/mnt/c/dev/myproj を介して同じファイルにアクセスして Linux でそのコードをビルド/テストしたりできます。

詳細については、「Windows および Linux ファイル システム間での作業」の記事を参照します。

Linux ドライブのファイルはマウントされた Windows ドライブのものとは異なりますか。

  1. Linux ルート (つまり /) の下にあるファイルは、Linux の動作と整合する WSL によって制御されます。次のようなものが含まれますが、これらに限定されません。

    • 無効な Windows ファイル名の文字を含むファイル
    • 管理者以外のユーザー用に作成されたシンボリック リンク
    • chmod および chown を使用したファイル属性の変更
    • ファイル/フォルダーの大文字と小文字の区別
  2. マウントされたドライブのファイルは Windows によって制御され、次のように動作します。

    • 大文字と小文字の区別をサポート
    • すべてのアクセス許可は、Windows アクセス許可を最適に反映するように設定

WSL ディストリビューションをアンインストールするにはどうすればよいですか。

WSL からディストリビューションを削除し、その Linux ディストリビューションに関連付けられているすべてのデータを削除するにはwsl --unregister <distroName> を実行します。ここで、<distroName> には Linux ディストリビューションの名前を指定します。これは、wsl -l コマンドの一覧から確認できます。

さらに、他のストア アプリケーションと同じように、コンピューター上で Linux ディストリビューション アプリをアンインストールできます。

WSL コマンドの詳細については、WSL の基本的なコマンドに関する記事を参照します。

OpenSSH サーバーを実行するにはどうすればよいですか。

OpenSSH には、オプション機能として Windows が付属しています。 「OpenSSH をインストールする」を参照します。WSL で OpenSSH を実行するには、Windows の管理者特権が必要です。 OpenSSH サーバーを実行するには、WSL ディストリビューション (つまり Ubuntu) を実行するか、管理者として Windows ターミナルを実行します。 WSL を使用した SSH シナリオをカバーするリソースがいくつかあります。 Scott Hanselman のブログ記事から、Linux または Windows またはその他の場所から Windows 10 コンピューターに SSH 接続する方法外部コンピューターから Windows 10 上の WSL2 に SSH 接続する方法外部コンピューターから Windows 10 上の Bash および WSL2 に SSH 接続する簡単な方法Windows 10 の組み込み OpenSSH を使用してリモート Linux コンピューターに自動的に SSH 接続する方法に関する情報を確認します。

WSL の表示言語を変更するにはどうすればよいですか。

WSL インストールでは、Windows インストールのロケールに合わせて Ubuntu ロケールを自動的に変更しようとします。 この動作が不要な場合は、次のコマンドを実行して、インストールの完了後に Ubuntu ロケールを変更できます。 この変更を有効にするには、WSL ディストリビューションを再起動する必要があります。

次の例は、ロケールを en-US に変更します。

sudo update-locale LANG=en_US.UTF8

WSL からインターネットにアクセスできないのはなぜですか。

一部のユーザーにより、WSL でのインターネット アクセスをブロックする特定のファイアウォール アプリケーションに関する問題が報告されています。 報告されているファイアウォールは次のとおりです。

  1. Kaspersky
  2. AVG
  3. Avast
  4. Symantec Endpoint Protection
  5. F-Secure

ファイアウォールをオフにすると、アクセスできる場合があります。 場合によっては、ファイアウォールをインストールするだけでアクセスがブロックされるようです。

Windows の WSL からポートにアクセスするにはどうすればよいですか。

WSL は Windows で実行されているため、Windows の IP アドレスを共有します。 そのため、localhost 上の任意のポートにアクセスできます。たとえば、ポート 1234 に Web コンテンツがあるとすると、 https://localhost:1234 を Windows ブラウザーに入力できます。 詳細については、ネットワーク アプリケーションへのアクセスに関する記事を参照します。

WSL ディストリビューションをバックアップする、または別のドライブに移動するにはどうすればよいですか。

ディストリビューションをバックアップまたは移動する最適な方法は、Windows バージョン 1809 以降で使用できるエクスポート/インポート コマンドを使用することです。 wsl --export コマンドを使用して、ディストリビューション全体を tarball にエクスポートできます。 その後、wsl --import コマンドを使用してこのディストリビューションを WSL にインポートし直すことができます。これにより、インポート用の新しいドライブの場所に名前を付けて、WSL ディストリビューションをバックアップして状態を保存 (または移動) できます。

AppData フォルダーのファイルをバックアップする従来のバックアップ サービス (Windows バックアップなど) によって Linux ファイルが破損することはありません。

運用シナリオに WSL を使用できますか?

WSL は、内部ループ開発ワークフローで使用するように設計および構築されています。 WSL には、この目的に適した設計機能がありますが、他の製品と比較して運用環境関連のシナリオでは困難になる可能性があります。 私たちの目標は、WSL が通常の VM 環境とどのように異なるかを明確にし、ビジネス ニーズに合うかどうかを判断できるようにすることです。

WSL と従来の運用環境のメインの違いは次のとおりです。

  • WSL には、リソースを自動的に起動、停止、管理する軽量ユーティリティ VM があります。
  • Windows プロセスに対して開いているファイル ハンドルがない場合、WSL VM は自動的にシャットダウンされます。 つまり、Web サーバーとして使用している場合、SSH でサーバーを実行してから終了すると、VM がシャットダウンする可能性があります。これは、ユーザーがそのサーバーの使用を完了し、そのリソースをクリーンすることを検出するためです。
  • WSL ユーザーは、Linux インスタンスへのフル アクセス権を持っています。 VM の有効期間、登録済みの WSL ディストリビューションなどはすべて、ユーザーがアクセスでき、ユーザーが変更できます。
  • WSL は、Windows ファイルへのファイル アクセスを自動的に提供します。
  • 既定では、Windows パスがパスに追加されるため、従来の Linux 環境と比較して特定の Linux アプリケーションで予期しない動作が発生する可能性があります。
  • WSL は Linux から Windows 実行可能ファイルを実行できます。これにより、従来の Linux VM とは異なる環境になる可能性もあります。
  • WSL で使用される Linux カーネルは自動的に更新されます。
  • WSL の GPU アクセスは、GPU 呼び出しを /dev/dxg Windows GPU にルーティングするデバイスを介して行われます。 このセットアップは、従来の Linux セットアップとは異なります。
  • ベア メタル Linux と比較して他にも小さな違いがあり、内部ループ開発ワークフローが優先されるため、今後より多くの違いが生じることが予想されます。

WSL ファイルをあるコンピューターから別のコンピューターに転送するにはどうすればよいですか?

このタスクを実行するには、いくつかの方法があります。

  • 最も簡単な方法は、 コマンドを wsl --export --vhd 使用して、WSL ディストリビューションを VHD ファイルにエクスポートすることです。 その後、このファイルを別のコンピューターにコピーし、 を使用して wsl --import --vhdインポートできます。 詳細については、 コマンドのドキュメント を参照してください。
  • 上記の実装では、多くのディスク領域が必要です。 ディスク領域があまりない場合は、Linux の手法を使用してファイルを移動できます。
    • を使用して tar -czf <tarballName> <directory> 、ファイルの tarball を作成します。 その後、これらの特定のファイルを新しいマシンにコピーし、 を実行 tar -xzf <tarballName> して抽出できます。
    • 次のようなdpkg --get-selections | grep -v deinstall | awk '{print $1}' > package_list.txtコマンドを使用してapt、インストールされているパッケージの一覧をエクスポートし、ファイルを転送した後のようなsudo apt install -y $(cat package_list.txt)コマンドを使用して、別のマシンに同じパッケージを再インストールすることもできます。

WSL 2

WSL 2 に Hyper-V は使用されていますか? Windows 10 HomeとWindows 11 Homeで利用できますか?

WSL 2 は、Windows 10 HomeやWindows 11 Homeなど、WSL が使用可能なすべてのデスクトップ SKU で使用できます。

最新バージョンの WSL では、仮想化を有効にするために、Hyper-V アーキテクチャが使用されます。 このアーキテクチャは、"仮想マシン プラットフォーム" のオプション コンポーネントで使用できます。 このオプションのコンポーネントは、すべての SKU 上で使用できます。 WSL 2 は間もなくリリースされるため、このエクスペリエンスの詳細をすぐにご確認いただけます。

WSL 1 はどうなりますか? 廃止されますか?

現在、WSL 1 を廃止する予定はありません。 WSL 1 と WSL 2 のディストリビューションを並行して実行し、任意のディストリビューションをいつでもアップグレードおよびダウングレードできます。 WSL 2 を新しいアーキテクチャとして追加すると、WSL チームにとって、WSL を利用して Windows で Linux 環境を実行する機能を提供するための優れたプラットフォームになります。

WSL 2 と、VMware や VirtualBox などの他のサード パーティの仮想化ツールを実行できますか?

一部のサード パーティ アプリケーションは、Hyper-V が使用されている場合は機能しません。つまり、VMware や VirtualBox など、WSL 2 が有効な場合は実行できません。 しかし、VirtualBox と VMware の両方から、Hyper-v と WSL2 をサポートするバージョンが最近リリースされました。 VirtualBox の変更点についてはこちらから、VMware の変更点についてはこちらから、詳細を参照してください。 トラブルシューティングの問題については、GitHub の WSL リポジトリにある VirtualBox の問題に関するディスカッションをご覧ください。

Microsoft は、Hyper-V のサードパーティ統合をサポートするソリューションに一貫して取り組んでいます。 たとえば、Hypervisor Platform という一連の API を公開しています。サードパーティの仮想化プロバイダーはこれを使用してソフトウェアに Hyper-V との互換性を持たせることができます。 これにより、アプリケーションでは、Google Android Emulator や、Hyper-V と互換性のある VirtualBox 6 以降など、のエミュレーションに Hyper-V アーキテクチャを使用できます。

VirtualBox 6.1 に関する WSL 2 の問題の背景とディスカッションについては、WSL の問題のリポジトリを参照します。

*Windows 仮想マシンをお探しの場合は、VMWare、Hyper-V、VirtualBox、Parallels VM のダウンロードを Windows デベロッパー センターで入手できます

WSL 2 の GPU にはアクセスできますか? ハードウェア サポートを強化する予定はありますか?

WSL 2 ディストリビューション内の GPU にアクセスするためのサポートがリリースされました。 これは、ビッグ データ セットが関係している場合に、機械学習、人工知能、データ サイエンスのシナリオで WSL をより簡単に使用できるようになったことを意味します。 GPU サポートの概要に関するチュートリアルをご確認ください。 現時点では、WSL 2 にはシリアル サポートや USB デバイス サポートは含まれていません。 Microsoft では、これらの機能を追加するための最適な方法を調査しています。 ただし、USBIPD-WIN プロジェクトを通じて USB サポートを利用できるようになりました。 USB デバイスのサポートを設定する手順については、「USB デバイスを接続する」を参照してください。

WSL 2 はネットワーク アプリケーションを使用できますか?

はい。一般的なネットワーク アプリケーションは、システム呼び出しの完全な互換性を提供するため、WSL 2 の方が適切に動作し、高速になります。 ただし、WSL 2 アーキテクチャでは仮想化されたネットワーク コンポーネントが使用されます。つまり、WSL 2 は仮想マシンと同様に動作します。WSL 2 ディストリビューションの IP アドレスはホスト マシン (Windows OS) とは異なります。 詳細については、「 WSL を使用したネットワーク アプリケーションへのアクセス」を参照してください。

仮想マシンで WSL 2 を実行できますか?

はい。 仮想マシンで入れ子になった仮想化が有効なことを確認する必要があります。 これを親 Hyper-V ホストで有効にするには、管理者特権を使用して PowerShell ウィンドウで次のコマンドを実行します。

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true

"<VMName>" は、実際の仮想マシンの名前に置き換えてください。

WSL 2 で wsl.conf を使用できますか?

WSL 2 では、WSL 1 に使用されているものと同じ wsl.conf ファイルがサポートされています。 つまり、Windows ドライブの自動マウント、相互運用の有効化または無効化、Windows ドライブのマウント先ディレクトリの変更など、WSL 1 ディストリビューションで設定した構成オプションは、すべて WSL 2 内で機能します。 WSL の構成オプションの詳細については、ディストリビューションの管理に関するページを参照します。 ドライブ、ディスク、デバイス、または仮想ハード ディスク (VHD) のマウントに関するサポートの詳細については、WSL 2 での Linux ディスクのマウントに関する記事を参照します。

フィードバックはどこで提供できますか。

WSL 製品リポジトリのイシューを使用すると、次のことが行えます。

  • 既存のイシューを検索して、自分の問題に関連するものがあるかどうかを確認します。 検索バーで "is:open" を削除すると、既に解決されているイシューを検索に含めることができることに注意してください。 優先して進めて欲しいと思う未解決のイシューには、コメントを付けたり賛成したりすることをご検討ください。
  • 新しいイシューを報告します。 WSL で問題が見つかり、既存のイシューが存在していないようである場合は、緑色の [New issue](新しいイシュー) ボタンを選択した後、 [WSL - Bug Report](WSL - バグ レポート) を選択します。 イシューのタイトル、お使いの Windows のビルド番号 (現在のビルド # を確認するには cmd.exe /c ver を実行します)、WSL 1 と 2 のどちらを実行しているか、現在の Linux カーネル バージョン # (wsl.exe --status または cat /proc/version を実行)、ディストリビューションのバージョン # (lsb_release -r を実行)、関連するその他のソフトウェアのバージョン、再現手順、想定される動作、実際の動作、および診断ログを含める必要があります (使用可能かつ適切な場合)。 詳細については、WSL への投稿に関するページを参照してください。
  • 機能要求を報告します。それには、緑色の [New issue](新しいイシュー) ボタンを選択してから、 [Feature request](機能要求) を選択します。 いくつかの問題に対処して、要求を説明する必要があります。

次のこともできます。

WSL の最新ニュースを入手するには、以下をご利用ください。