全般
Windows Subsystem for Linux (WSL) とは
Windows Subsystem for Linux (WSL) は Windows オペレーティング システムの機能であり、Linux ファイル システムと Linux コマンド ライン ツールと GUI アプリを Windows 上で直接、従来の Windows デスクトップやアプリと共に実行できます。
詳細については、 About ページ を参照してください。
WSL の対象は誰ですか?
これは主に開発者、特に Web 開発者、オープン ソース プロジェクトで作業している開発者、または Linux サーバー環境へのデプロイのためのツールです。 WSL は、Bash、一般的な Linux ツール (sed
、 awk
など) や Linux ファースト フレームワーク (Ruby、Python など) を使用するのが好きで、Windows 生産性ツールの使用も楽しんでいるすべてのユーザーを対象としています。
WSL でできること
WSL を使用すると、ディストリビューション (Ubuntu、Debian、OpenSUSE、Kali、Alpine など) を選択して Bash シェルで Linux を実行できます。 Bash を使用すると、コマンド ラインの Linux ツールとアプリを実行できます。 たとえば、「 lsb_release -a
」と入力して Enter キーを押します。現在実行中の Linux ディストリビューションの詳細が表示されます。
Linux Bash シェル内からローカル コンピューターのファイル システムにアクセスすることもできます。ローカル ドライブは、 /mnt
フォルダーの下にマウントされています。 たとえば、 C:
ドライブは /mnt/c
の下にマウントされます。
WSL を組み込んだ一般的な開発ワークフローについて説明してください。
WSL は、内部開発ループの一部として使用される意図を持つ開発者対象ユーザーを対象とします。 Sam が CI/CD パイプライン (継続的インテグレーションと継続的デリバリー) を作成しており、クラウドにデプロイする前にローカル コンピューター (ノート PC) で最初にテストしたいとします。 Sam は、WSL (速度とパフォーマンスを向上させるために WSL 2) を有効にし、必要な Bash コマンドとツールを使用して、本物の Linux Ubuntu インスタンスをローカル (ラップトップ上) で使用できます。 開発パイプラインがローカルで検証されると、Sam は、その CI/CD パイプラインを Docker コンテナーにして、運用環境対応の Ubuntu VM 上で実行されているクラウド インスタンスにプッシュすることで、その CI/CD パイプラインをクラウド (つまり Azure) にプッシュできます。
Bash とは
Bash は、一般的なテキストベースのシェルとコマンド言語です。 これは、Ubuntu やその他の Linux ディストリビューションに含まれる既定のシェルです。 ユーザーは、シェルにコマンドを入力してスクリプトを実行したり、コマンドやツールを実行して多くのタスクを実行したりします。
これはどのように機能しますか?
この記事は、Windows コマンド ライン ブログの「 WSL で Windows が Linux ファイルにアクセスできるようにする方法の詳細 」で確認できます。この記事では、基になるテクノロジについて詳しく説明します。
VM で Linux ではなく WSL を使用する理由
WSL は、完全な仮想マシンよりも少ないリソース (CPU、メモリ、ストレージ) を必要とします。 WSL では、Windows コマンド ライン、デスクトップ、ストア アプリと共に Linux コマンド ライン ツールとアプリを実行したり、Linux 内から Windows ファイルにアクセスしたりすることもできます。 これにより、必要に応じて、同じファイル セットで Windows アプリと Linux コマンド ライン ツールを使用できます。
Windows ではなく Ruby on Linux を使用する理由
一部のクロスプラットフォーム ツールは、実行される環境が Linux のように動作することを前提として構築されました。 たとえば、一部のツールでは、非常に長いファイル パスにアクセスできる、または特定のファイル/フォルダーが存在することを前提としています。 これは多くの場合、Linux とは異なる動作をする Windows 上の問題を引き起こします。
Ruby や Node.js などの多くの言語は、多くの場合、Windows に移植され、優れた動作をします。 ただし、Ruby Gem または node/NPM ライブラリの所有者全員が、Windows をサポートするためにライブラリを移植するわけではありません。多くのユーザーには Linux 固有の依存関係があります。 これにより、多くの場合、このようなツールやライブラリを使用してビルドされたシステムがビルドされ、Windows で実行時エラーや望ましくない動作が発生する場合があります。
これらは、多くのユーザーが Windows のコマンドライン ツールの改善を Microsoft に依頼する原因となったいくつかの問題であり、ネイティブの Bash および Linux コマンド ライン ツールを Windows で実行できるようにするために Canonical と提携するきっかけとなったものです。
PowerShell の場合、これは何を意味しますか?
OSS プロジェクトの操作中に、PowerShell プロンプトから Bash にドロップすると非常に便利なシナリオが多数あります。 Bash のサポートは補完的であり、Windows 上のコマンド ラインの価値を強化し、PowerShell と PowerShell コミュニティが他の一般的なテクノロジを活用できるようにします。
PowerShell チームブログの詳細を読む -- Bash for Windows: それが素晴らしい理由と PowerShell の意味
WSL はどのようなプロセッサをサポートしていますか?
WSL では、x64 CPU と Arm64 CPU がサポートされています。
C: ドライブにアクセスするにはどうすればよいですか?
ローカル コンピューター上のハード ドライブのマウント ポイントが自動的に作成され、Windows ファイル システムに簡単にアクセスできます。
/mnt/<ドライブ文字>/
使用例は、アクセスにcd /mnt/c
c:\
Git Credential Manager を設定する方法 (WSL で Windows Git のアクセス許可を使用するにはどうすればよいですか?
Git Credential Manager の設定と Windows 資格情報マネージャーへの認証トークンの格納に関するセクションが用意されている、 Linux 用 Windows サブシステムでの Git の使用を開始するチュートリアルを参照してください。
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 ドライブとは異なりますか?
Linux ルート (つまり、
/
) の下のファイルは、次のような Linux の動作に合わせて WSL によって制御されます。- 無効な Windows ファイル名文字を含むファイル
- 管理者以外のユーザー用に作成されたシンボリック リンク
-
chmod
を使用してファイル属性を変更するchown
- ファイル/フォルダーの大文字と小文字の区別
マウントされたドライブ内のファイルは Windows によって制御され、次の動作があります。
- サポートの大文字と小文字の区別
- すべてのアクセス許可は、Windows のアクセス許可を最もよく反映するように設定されます
WSL ディストリビューションをアンインストールする方法
WSL からディストリビューションを削除し、 その Linux ディストリビューションに関連付けられているすべてのデータを削除するには、 wsl --unregister <Distro>
を実行します。ここで、 <Distro>
は 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 でのインターネット アクセスをブロックする特定のファイアウォール アプリケーションに関する問題が報告されています。 報告されているファイアウォールは次のとおりです。
- カスペルスキー
- AVG
- アバスト
- Symantec Endpoint Protection
- F-Secure
ファイアウォールをオフにすると、アクセスできる場合があります。 場合によっては、ファイアウォールをインストールするだけでアクセスがブロックされるようです。
Windows で WSL からポートにアクセスするにはどうすればよいですか?
WSL は、Windows で実行されている Windows の IP アドレスを共有します。 そのため、localhost 上の任意のポートにアクセスできます。たとえば、ポート 1234 に Web コンテンツがある場合は、Windows ブラウザーに https://localhost:1234 できます。 詳細については、「 ネットワーク アプリケーションへのアクセス」を参照してください。
WSL ディストリビューションをバックアップするにはどうすればよいですか?
ディストリビューションをバックアップまたは移動する最善の方法は、Windows バージョン 1809 以降で使用できる エクスポート/インポート コマンドを使用することです。
wsl --export
コマンドを使用して、ディストリビューション全体を tarball にエクスポートできます。 その後、 wsl --import
コマンドを使用して、このディストリビューションを WSL にインポートできます。このコマンドでは、インポートの新しいドライブの場所に名前を付けることができ、WSL ディストリビューションの状態をバックアップして保存 (または移動) できます。 WSL ディストリビューションの移動の詳細については、「 WSL ファイルをあるコンピューターから別のコンピューターに転送する方法」を参照してください。
AppData フォルダー (Windows Backup など) 内のファイルをバックアップする従来のバックアップ サービスでは、Linux ファイルは破損しません。
運用シナリオに WSL を使用できますか?
はい。ただし、WSL は内部ループ開発ワークフローで使用するように設計および構築されています。 WSL には、この目的に適した設計機能がありますが、他の製品と比較して運用環境関連のシナリオでは困難になる可能性があります。 私たちの目標は、WSL が通常の VM 環境とどのように異なるかを明確にして、ビジネス ニーズに合うかどうかを判断することです。
WSL と従来の運用環境の主な違いは次のとおりです。
- WSL には、リソースを自動的に開始、停止、管理する軽量ユーティリティ VM があります。
- Windows プロセスに対して開いているファイル ハンドルがない場合、WSL VM は自動的にシャットダウンされます。 つまり、Web サーバーとして使用している場合は、SSH でサーバーを実行してから終了します。VM は、ユーザーが Web サーバーの使用を完了し、そのリソースをクリーンアップすることを検出するため、シャットダウンされる可能性があります。
- WSL ユーザーは、Linux インスタンスにフル アクセスできます。 VM の有効期間、登録済みの WSL ディストリビューションなどはすべて、ユーザーがアクセスでき、ユーザーが変更できます。
- WSL は、Windows ファイルへのファイル アクセス権を自動的に付与します。
- 既定では、Windows パスがパスに追加されるため、従来の Linux 環境と比較して、特定の Linux アプリケーションで予期しない動作が発生する可能性があります。
- WSL は Linux から Windows 実行可能ファイルを実行できます。これは、従来の Linux VM とは異なる環境になる可能性もあります。
- WSL によって使用される Linux カーネルは自動的に更新されます。
- WSL の GPU アクセスは、GPU 呼び出しを Windows GPU にルーティングする
/dev/dxg
デバイスを介して行われます。 このセットアップは、従来の Linux セットアップとは異なります。 - ベア メタル Linux と比較して他にも小さな違いがあり、内部ループ開発ワークフローが優先されるため、今後より多くの違いが生じることが予想されます。
WSL ファイルをあるコンピューターから別のコンピューターに転送するにはどうすればよいですか?
このタスクを実行するには、いくつかの方法があります。
- 最も簡単な方法は、
wsl --export <Distro> <FileName> --format vhd
コマンドを使用して、WSL ディストリビューションを VHD ファイルにエクスポートすることです。 その後、このファイルを別のコンピューターにコピーし、wsl --import <Distro> <InstallLocation> <FileName> --vhd
を使用してインポートできます。 詳しくは、WSL 基本コマンドのドキュメントのインポートおよびエクスポート・コマンドを参照してください。 - 上記の実装には、多くのディスク領域が必要です。 ディスク領域があまりない場合は、Linux の手法を使用してファイルを移動できます。
-
tar -czf <tarballName> <directory>
を使用して、ファイルの tarball を作成します。 その後、これらの特定のファイルを新しいマシンにコピーし、tar -xzf <tarballName>
実行して抽出できます。 - 次のようなコマンドを使用して、
apt
を使用してインストールされたパッケージの一覧をエクスポートすることもできます。dpkg --get-selections | grep -v deinstall | awk '{print $1}' > package_list.txt
し、ファイルを転送した後にsudo apt install -y $(cat package_list.txt)
などのコマンドを使用して、同じパッケージを別のマシンに再インストールします。
-
WSL ディストリビューションを別のドライブまたは場所に移動するにはどうすればよいですか?
これは、PowerShell を使用して行うことができます。 各手順に必要なコマンドと説明を次に示します。 PowerShell ウィンドウを開き、特定のユース ケースに合わせて <>
タグの間の値を調整してください。
# Export your distro to that folder as a VHD
wsl --export <Distro, e.g: Ubuntu> <FileName, e.g: D:\WSLDistros\Ubuntu\ext4.vhdx> --format vhd
# Unregister your old distro
# Please note this will erase your existing distro's file contents, please ensure the backup file you created in the 2nd step is present at the ___location and that the export operation completed successfully.
# Please exercise caution when using this command, as it is destructive and could cause data loss.
wsl --unregister <Distro, e.g: Ubuntu>
# Import your VHD backup
wsl --import-in-place <Distro, e.g: Ubuntu> <FileName, e.g: D:\WSLDistros\Ubuntu\ext4.vhdx>
既定のユーザー アカウントを設定する方法
wsl.conf
の値を設定することで、既定のユーザー アカウントを設定user.default=<name>
WSL 2
WSL 2 は Windows 10 Home と Windows 11 Home で使用できますか?
はい。 WSL 2 は、Windows 10 Home や Windows 11 Home など、WSL が利用可能なすべてのデスクトップ SKU で使用できます。
具体的には、WSL2 では、次の 2 つの機能を有効にする必要があります。
- "仮想マシン プラットフォーム" (Hyper-Vのサブセット)
- "Linux 用 Windows サブシステム"
WSL 2 は Hyper-V を使用しますか?
WSL の最新バージョンでは、Hyper-V アーキテクチャの サブセット を使用して仮想化を有効にします。 このサブセットは、すべてのデスクトップ SKU で使用可能な "仮想マシン プラットフォーム" という名前のオプション コンポーネントとして提供されます。
WSL 1 はどうなるでしょうか。 破棄されますか?
現在、WSL 1 を非推奨にする予定はありません。 WSL 1 および WSL 2 ディストリビューションを並行して実行でき、任意のディストリビューションをいつでもアップグレードおよびダウングレードできます。 WSL 2 を新しいアーキテクチャとして追加すると、WSL チームが Windows で Linux 環境を実行するための優れた方法となる機能を提供するための、より優れたプラットフォームが提供されます。
WSL 2 やその他のサード パーティ製の仮想化ツール (VMware、VirtualBox など) を実行できますか?
一部のサード パーティ製アプリケーションは、Hyper-V が使用されているときには動作しません。つまり、VMware や VirtualBox など、WSL 2 が有効になっている場合は実行できません。 ただし、最近、VirtualBox と VMware の両方で、Hyper-V と WSL2 をサポートするバージョンがリリースされました。 VirtualBox の変更点と VMware の変更点については、こちらをご覧ください。 問題のトラブルシューティングについては、 GitHub の WSL リポジトリにある VirtualBox の問題に関するディスカッションを参照してください。 StackOverflow には、 VirtualBox 6.0 と WSL を同時に動作させる方法という便利なヒントもあります。
Microsoft では、Hyper-V のサードパーティ統合をサポートするソリューションに常に取り組んでいます。 たとえば、サード パーティの仮想化プロバイダーが Hyper-V とソフトウェアの互換性を確保するために使用できる Hypervisor Platform と呼ばれる一連の API を公開しています。 これにより、アプリケーションは 、Google Android Emulator や VirtualBox 6 以降などのエミュレーションに Hyper-V アーキテクチャを使用できます。これらはどちらも Hyper-V と互換性があります。
VirtualBox 6.1 での WSL 2 の問題の背景と説明については、WSL の問題リポジトリを参照してください。
*Windows 仮想マシンをお探しの場合は、Windows デベロッパー センターで VMWare、Hyper-V、VirtualBox、Parallels VM のダウンロードを利用できます。
WSL 2 の GPU にアクセスできますか? ハードウェアサポートを強化する予定はありますか?
WSL 2 ディストリビューション内の GPU へのアクセスのサポートをリリースしました。 つまり、ビッグ データ セットが関係する場合に、機械学習、人工知能、データ サイエンスのシナリオに WSL をより簡単に使用できるようになりました。 GPU サポートの概要に関するチュートリアルをご覧ください。 現時点では、WSL 2 にはシリアル サポートや USB デバイスのサポートは含まれていません。 これらの機能を追加する最適な方法を調査しています。 ただし、USBIPD-WIN プロジェクトを通じて USB サポートを利用できるようになりました。 USB デバイスのサポートを設定する手順については、「 USB デバイスの接続」 を参照してください。
WSL 2 はネットワーク アプリケーションを使用できますか?
はい。一般的なネットワーク アプリケーションは、システム呼び出しの完全な互換性を提供するため、WSL 2 の方が適切に動作し、高速になります。 ただし、WSL 2 アーキテクチャでは仮想化されたネットワーク コンポーネントが使用されます。つまり、WSL 2 は仮想マシンと同様に動作します。WSL 2 ディストリビューションの IP アドレスはホスト マシン (Windows OS) とは異なります。 詳細については、「 WSL を使用したネットワーク アプリケーションへのアクセス」を参照してください。
仮想マシンで WSL 2 を実行できますか?
はい! 仮想マシンで入れ子になった仮想化が有効になっていることを確認する必要があります。 これは、管理者特権を使用して PowerShell ウィンドウで次のコマンドを実行することで、親 Hyper-V ホストで有効にすることができます。
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 ディスクのマウントに 関する記事を参照してください。
1: VirtualBox 6.0 2 の変更ログ: Hyper-V API3: Hyper-V Android エミュレーター サポート4: VMware Workstation Tech Preview 20H1 — Hyper-V/Host VBS サポート
フィードバックはどこで提供できますか?
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 ドキュメントのリポジトリを使用してドキュメントのイシューを報告します。 WSL ドキュメントに投稿するには、Microsoft Docs 共同作成者ガイドを参照してください。
- Windows ターミナル、Windows コンソール、またはコマンド ライン UI に問題が関連している場合は、Windows ターミナル 製品リポジトリ を使用して Windows ターミナルの問題を提出します。
最新の WSL ニュースを最新の状態に保つ場合は、次の操作を行うことができます。
- コマンド ライン チームのブログ
- X. X の@craigaloewen に従って、ニュースや更新情報などを確認してください。
"エラー: 0x800704ecこのプログラムはグループ ポリシーによってブロックされています。 詳細については、システム管理者にお問い合わせください。'?
このエラーは、WSL をブロックしているグループ ポリシーによって発生します。 解決するには、最初にコマンド wsl --update
を実行して、最新のストア バージョンに更新します。 それでも問題が解決しない場合は、管理者に問い合わせてください。 Microsoft Store の受信トレイ WSL とストア バージョン WSL: WSL の違いの詳細について説明します。
LxssManager は WSLService に置き換えられましたか?
はい。LxssManager は、WSL が受信トレイ コンポーネントから Microsoft Store のサービスに移行したときに WSLService に置き換えられました。