Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
Windows上のBashシェル入門【Windows 10 Fall Creators Update対応】(1)

Windows上のBashシェル入門【Windows 10 Fall Creators Update対応】(1)

Windows Subsystem for Linuxとは? そのインストールと使い方

2017年10月25日 改訂

Fall Creators Updateで正式版として提供されることになった「Windows 10上で動作するLinuxサブシステム」によるBashシェルの基礎を理解・マスターすることをゴールとして、Windows Subsystem for Linux(WSL、旧称:Bash on Ubuntu on Windows)の概要から、インストール方法までを解説。また、よくある疑問をQ&A形式で短くまとめる。

亀川 和史
  • このエントリーをはてなブックマークに追加

 Windows Subsystem for LinuxWSL20164WindowsBash1WSLUbuntuLinuxBashBashBash on Ubuntu on WindowsBash on Windows

 WSLWindows 10


201682 Windows 10 Anniversary Update

201745 Windows 10 Creators Update1*1

20171017 Windows 10 Fall Creators Update2*1


 Windows 10 Fall Creators Update2017101718Windows Update1017
  • *1 更新プログラムの名前に「Fall」が付くか付かないかの違いで間違えやすいので注意してほしい。
図1 Windows上でBashシェルが動く!

 BashWebPythonRubyBashBash使Windows使MacLinux使WSLWindows

 WSL 稿WSLWindowsWSLWSLQA稿WSL稿WSL




WindowsWindows Subsystem for Linux

Windows Subsystem for LinuxQA

Q PowerShell WindowsBash

Q 使

Q Windows Server 2016

Q 

Q UbuntuSUSE Linux Enterprise ServerOpenSUSE使

Q Linux

Q BashWindows.exe

Q WindowsBash

Q Windows使

Q 使

Q 使

Q Windows260使

Q 

Q 

Q Linux

Q Linux



Windows Subsystem for Linux

Windows Subsystem for Linux



Ubuntu



Git

Node.js

nginx

Ruby

PHP

Java

Gogolang

MySQL




 WSLFall Creators Updatebash.exewsl.exe稿


WindowsWindows Subsystem for Linux

WSLWindows*nix


 WindowsLinux使WSL


Hyper-VVMwareVirtualBox使Linux

Git for Windows

Cygwin

MinGW

MSYS2


 OS

 CygwinWindowsfindLinuxWindowsPATHWindowsCygwinWindowsfindCygwin

 WindowsPOSIXOS/2POSIXOS/216bitWindows XPUNIXServices for UNIXSubsystem for UNIX-based ApplicationsUNIXPOSIX使

 UNIXLinux使Windows 10WSLLinuxLinuxUbuntuSUSE Linux Enterprise ServerSLESOpenSUSEWindows使WSLWSLBash

WindowsLinuxWSL


 WindowsWindowsGUIWindowsPOSIXOS/2

 20168Windows 10 Anniversary UpdateLinuxWindows Subsystem for LinuxWSLWSLPOSIXOS/2Linuxlxss.syslxcore.sys2LXLinuxWSL2Pico

 WSLWSLWSL2lxss.syslxcore.sysLXSSLXCore
図2 WSL(Windows Subsystem for Linux)のコンポーネント構成と、Bashシェルが動く仕組み

Windows Subsystem for Linux Overview – Windows Subsystem for Linux」から「Figure 1: WSL Components」の図を引用(画像は独自に拡張して再作成)。

WSLが動作する仕組み


2017/10/30 2

 WSLLinux2

 2Ubuntuubuntu.exeWSLwsl.exeLinuxUbuntuBashBashBashLinuxWSL/bin/bash

 wsl.exe COM Win32LXLX Session manager service ioctl WindowsPico Bus WindowsLinuxUbuntuinit fork LinuxUbuntu/bin/bashPicoLinuxWindows OSfork

 WSL/bin/bash syscall LinuxWindowsAPIPicoPicoWindowsAPIWindows APIWindows APILinuxWSL

WSL


 WSL 

 2014LinuxMacWindows

 UNIX使WindowsWindowsLinux

 2011MS ResearchDrawBridgeWindowsDrawBridgeWSL

 WSLWindowsBash使QA

Windows Subsystem for LinuxQA



Q PowerShell WindowsBash


A WSLWindowsPowerShell
  2016819PowerShell.NET Core使PowerShell


Q 使


A 使
  WSLnginxMySQLWindows ServerWSLdaemonLinuxMySQLWSL使
  WSLLinux



Windows Windows Subsystem for Linux on Windows Server


Just as with WSL on Windows Client, you can run daemons and jobs like MySQL, PostgreSQL, sshd, etc., via an interactive shell, but you cannot currently use WSL to run persistent Linux services, daemons, jobs, etc. as background tasks.



Q Windows Server 2016


A Semi-Annual channel*2Windows ServerVersion 1709Windows ServerWSL20174Creators UpdateLinux



Windows Windows Subsystem for Linux on Windows Server


Why include WSL on Windows Server?
 We want Windows, including Windows Server, to be a great place for developers. We know developers, system administrators, people managing services and people building services all occasionally need tools available on Linux. Many more would like to run Linux tools as part of their workflow as a matter of convenience
  • *2 半期チャネルは現在のWindows Serverのリリースモデルで、年に2回、春と秋に新しいリリースが公開される。ちなみに、従来の「長期10年サポート」型のリリースモデルはLong Term Servicingチャネルという呼び方になっている。参考:「Windows Server の半期チャネルの概要」。


Q 


A GitHubissueUserVoiceUserVoiceVoteVoteVote
  VoteVote稿GoogleFacebook


Q UbuntuSUSE Linux Enterprise ServerOpenSUSE使


A UbuntuSLESOpenSUSEELF64WindowsUbuntuCanonicalUbuntu64bitPPAPersonal Package Archive使使


Q Linux


A WSLshutdown
  WSL


Q BashWindows.exe


A 20174Creators UpdateWindowsWSLWSLWindowsBashWindowsPATHWSLWindows.exefind.exeLinuxfindWindowsBashLinuxWSLWindowsBash on Ubuntu on WindowsCreators Update1Q


Q WindowsBash


2017/10/30 

A WindowsPowerShellwsl.exewslLinuxBashwslWSL1Windowsdir|Windowswslgrep txtBashtxt
PowerShell
dir | wsl grep txt
リスト1 wslコマンドによりBash上のコマンド「grep」を実行

 なお、Windowsのターミナル上でwslコマンドを引数なしで起動した場合は、Windowsのsystem32フォルダーがカレントになった状態で、Bashシェルのセッションが開始される(ちなみにシェルセッションを終了するにはexitコマンドを実行する)。WSLにおける既定のLinuxディストリビューションのホームディレクトリをカレントにしたい場合は、wsl ~~を引数に指定すればよい(リスト2)。

PowerShell
wsl ~
リスト2 既定のLinuxディストリビューションのホームディレクトリをカレントにしてBashシェルのセッションを開始


Q Windows使


A WindowsWSL


Q 使


A使WSL


Q 使


A WSL使LinuxUNIX使WindowsWSL


Q Windows260使


A Windows使NTFS64KBUTF-1632767Win32Unicode使稿\Windows 95260.NET Framework4.6.1Anniversary UpdateWindows 10260
  WSLNTFS使


Q 


A C:\Program Files\WindowsAppsC3使2017/10/26
  Creators UpdateWindows%LocalAppData%\lxss
  WindowsWSL使WSLUbuntu
  WSLWindowsDo not change Linux files using Windows apps and toolsC:\Program Files\WindowsApps

【注意事項】ストアアプリのインストール先を変更している場合


 3使Fall Creators UpdateWSL2017/10/26 稿WSLNew distros coming to Bash/WSL via Windows Store
図3 Windowsの[設定]アプリから[システム]-[ストレージ]-[新しいコンテンツの保存先を変更する]を表示して、他のドライブに変更する
図3 Windowsの[設定]アプリから[システム]-[ストレージ]-[新しいコンテンツの保存先を変更する]を表示して、他のドライブに変更する


Q 


A Windows Windows wf.mscWindowsWSLiptablesWSL使Windows
  WSLSSHSecure ShellWindowsWSLSSH Windows SSH Server Proxy Servicecompmgmt.mscSSH Server BrokerSSH Server ProxyPowerShell3
  2Visual Studio使ssh
PowerShell
Disable-NetFirewallRule -Name "SshProxy-Service"
Stop-Service -name SshProxy
Stop-Service -name SshBroker
リスト3 SSHに関するファイアウォールのルールを無効化し、サービスを停止する


Q Linux


2017/10/30 

A 201710Fall Creators UpdateLinux
  
  system32wsl.exe1
  UbuntuOpenSUSEUbuntuUbuntuOpenSUSEUbuntuOpenSUSE
   Ubuntuubuntu.exeSLESSLES-12.exeOpenSUSEopenSUSE-42.exe
  UWPTIPS使4Start-ProcessPowerShellUbuntuStart-ProcessappxPackageFamilyNameIDApplication.IdPowerShellGet-AppxPackage調4Ubuntu調SLESUbuntuSUSELinuxEnterpriseServerOpneSUSEUbuntuOpenSUSE
PowerShell
PS> (Get-AppxPackage -name *Ubuntu*).PackageFamilyName
CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc
 
PS> (Get-AppxPackage -name *Ubuntu* | Get-AppxPackageManifest).Package.Applications.Application.Id
ubuntu
 
PS> Start-Process shell:AppsFolder\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc!ubuntu
リスト4 Start-ProcessコマンドレットでWSLのUbuntuをコマンドラインから起動する


Q Linux


2017/10/30 

 Linuxwslconfig.exewslconfig使Manage multiple Linux Distributions in WSL4
図4 wsconfigコマンドで既定のディストリビューションを変更する

▲目次に戻る

Windows Subsystem for Linuxのインストール

 さて、WSLに関する必要十分な基礎知識が備わったところで、ここからは実践編としてWSLのインストールや使用方法の説明に入ろう。なお、すでにインストール済みで使用中の方はアップデート方法の説明までスキップしてほしい。

 WSLを使用するには、事前に64bit版のAnniversary Update以降のWindows 10をインストールしている必要がある(つまりWindows 10を最新版にアップデートすればよい)。Anniversary Update以降をインストールしていれば、WSLは64bit版のWindows 10のHome/Professional/Enterpriseの全エディションで使用できる。

【コラム】開発者モードが不要になったWSL


 20174Creators UpdateWindows使WSLFall Creators Update使WSL

WSLのインストール

 管理者モードでPowerShellウィンドウを起動し、以下のコマンドレットを実行する(コマンド実行中に再起動を要求されるので、Windows 10を再起動する)。

PowerShell
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
リスト5 WSLを有効にするためのコマンドレット

Linuxディストリビューションのインストール

 再起動後、[スタート]メニューから[ストア]を実行して、インストールしたいディストリビューションを選択し、[購入]をクリックしてインストールする(図5)。2017年10月のFall Creators Updateリリース時点では「Ubuntu」「OpenSUSE」「SUSE Linux Enterprise Server」の3種類が使用可能だ(「Ubuntu」や「SUSE」で検索するとよい)。

図5 [ストア]から「Ubuntu」を検索したところ

 [購入]ボタン(もしくは[入手]ボタン)をクリックすれば、インストールが開始される(表記は「購入」だが、無償なので、クレジットカード決済などは発生しない)。

 ストアからのインストール完了後、パッケージの展開が行われる。しばらく待った後、Linuxのユーザー名とパスワードを聞かれるので(図6)、それぞれ入力してアカウントを作成すれば、WSLが使用可能な状態になる。

図6 Ubuntuユーザーアカウントの作成
図6 Ubuntuユーザーアカウントの作成

【ヒント】日本語環境でWSLを使用したい場合


 201710Fall Creators UpdateWSL

 lsupdate-locale LANG=ja_JP.UTF8ja_JP

【ヒント】WSLが正常にインストール完了しない場合

 WSLのインストールが完了しない場合は、セキュリティソフトが影響している可能性がある(特にカスペルスキーとWSLは相性が悪いようだ)。その場合には、いったんセキュリティソフトを終了してみてほしい。これで解決する場合がある。

【ヒント】Linuxディストリビューションのアンインストールと、WSLの再構築

 インストール済みのLinuxディストリビューションをいったんアンインストールして、再度、インストールし直すことで、Linux環境をゼロから再構築したい場合もあるだろう。

 2017年10月のFall Creators Updateからストア経由でLinuxディストリビューションをインストールできるようになったため、各ディストリビューションのアンインストールは簡単だ。図7のように[スタート]メニューから対象のショートカット項目(この例では[Ubuntu])を表示し、その右クリックメニューから[アンインストール]を選択すれば削除される。

図7 [スタート]メニューに登録されている[Ubuntu]をアンインストールするところ
図7 [スタート]メニューに登録されている[Ubuntu]をアンインストールするところ

 20174Creators UpdateWindows 10PowerShellLinux


1WSL lxrun /uninstall /full

2WSL lxrun /install


 201710Fall Creators UpdateWSLlxrun8lxrun使
図8 レガシー版WSLの削除コマンド

 以上でWSLとLinuxディストリビューション環境の準備は完了だ。これでBashシェルが使用可能になっている。

▲目次に戻る

[旧バージョンをインストール済みの方のみ]Windows Subsystem for Linuxのアップデート

 Windows 10を古いバージョンから新しいバージョンに(例えばCreators UpdateからFall Creators Updateに)アップデートしても、WSLでインストール済みのUbuntuなどのLinuxディストリビューションは最新版に更新されない。しかも各ディストリビューションの標準アップグレード方法はサポートされていないため、上記の「【ヒント】Linuxディストリビューションのアンインストールと、WSLの再構築」を参考に、一度、対象のディストリビューションをアンインストールした後で、ストアから再インストールする必要がある(参考: 「WSL adds Ubuntu 16.04 Xenial support(英語)」)。

 もちろん、アンインストール用のコマンドを実行するとUbuntuのホームディレクトリに格納しているファイルも消えるため、SSHの秘密鍵などのUbuntuにしかないファイルは事前にバックアップしておく必要がある。ただし前述したとおり、エクスプローラーをはじめとするWindowsのツールでUbuntuのフォルダーの操作を行ってはならないため、UbuntuのターミナルからWindowsのフォルダーに対象ファイルをコピーして、Windowsのツールを使用してバックアップの採取を行う必要がある。

Linuxディストリビューションの起動

 次回以降各ディストリビューションを起動する場合は、すでに説明したように、[スタート]メニューに登録されている各ディストリビューションのショートカット(図9では[Ubuntu]、他には[SUSE Linux Enterprise Server 12]/[OpenSUSE Leap 42]など)をクリックして実行する。

[Ubuntu]をクリック

[Ubuntu]をクリック

図9 [スタート]メニューに登録されている[Ubuntu]からWSLでUbuntuのBashシェルが起動したところ

Ubuntuパッケージの導入




 WSLUbuntu

 Ubuntuapt-getapt-get使AptGet/Howto稿apt-getapt使使Ubuntu 16.04apt

 WSL

 Insider Preview20174Creators UpdateNode.jsHaskell

 PythonUbuntu 16.04Python 3


Git


 GitPPA

 Ubuntu2.7.4
Bash
sudo apt install -y git
リスト6 GitをUbuntu公式サイトからインストールするためのコマンド

 もしくはPPAを使用して、最新版パッケージをインストールするには、以下のコマンドを実行すればよい(記事執筆時点で2.14.2-1)。

Bash
sudo add-apt-repository ppa:git-core/ppa
sudo apt update
sudo apt upgrade
sudo apt install -y git
リスト7 PPAを使用してGitの最新版をインストールするためのコマンド

▲目次に戻る

Node.js

 Node.jsも公式パッケージもしくはプライベートリポジトリからインストール可能だ。

 Ubuntuの公式パッケージからインストールする方法は以下の通り(記事執筆時点で4.7.2)。

Bash
sudo apt install -y nodejs
リスト8 Node.jsをUbuntu公式サイトからインストールするためのコマンド

 NodeSourceの配布サイトから、最新版パッケージをインストールするには以下のコマンドを実行する(記事執筆時点で8.7)。

Bash
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt install -y nodejs
リスト9 nodesourceからNode.jsの最新版をインストールするためのコマンド


nginx


 Apache httpdWebnginxnginxUbuntu10aptnginx

 nginxApache httpd80/tcp使WindowsIISSkype80/tcp使使
Bash
sudo apt update
sudo apt install -y nginx
リスト10 nginxをインストールするためのコマンド

▲目次に戻る

Ruby

 スクリプト言語として人気の高い、RubyをUbuntuパッケージからインストールする方法を紹介する。以下のコマンドでRuby 2.3.1(執筆時点)がインストールされる。

Bash
sudo apt update
sudo apt install -y ruby
リスト11 Rubyをインストールするためのコマンド

▲目次に戻る

PHP

 WordPressをはじめ、世界の多くのブログエンジンおよびCMSの開発言語であるPHPをUbuntuパッケージからインストールする方法を紹介する。以下のコマンドでPHP 7.0.22(執筆時点)がインストールされる。

Bash
sudo apt update
sudo apt install -y php
リスト12 PHPをインストールするためのコマンド

▲目次に戻る

Java

 オラクル(Oracle)から配布されているJDKもPPAからインストールが可能だ。執筆時点の最新版であるJDK 8をインストールする方法を紹介する。最後のapt installコマンドを実行すると、ライセンス同意画面が表示される。コンソールに表示されるOracle Binary Code licenseに同意すると、インストールが開始される。

Bash
sudo add-repository ppa:webupd8team/java
sudo apt update
sudo apt install -y oracle-java8-installer
リスト13 Javaをインストールするためのコマンド

▲目次に戻る

Go(golang)

 グーグル(Google)が作ったプログラミング言語Gogolangとも呼ばれる)をインストールする方法を紹介する。GoはDockerを作った言語としても知られている。

Bash
sudo apt update
sudo apt install -y golang
リスト14 golangをインストールするためのコマンド

▲目次に戻る

MySQL

 多くのサービスで使われているRDBMSであるMySQLもインストールできる。

Bash
sudo apt update
sudo apt install -y mysql-server
リスト15 MySQLをインストールするためのコマンド

▲目次に戻る

まとめ

 いかがだっただろうか? WSLを使用できるようになったことで、従来のようにWindows上でLinux仮想化環境を構築したり、別途Linuxマシンを用意したりすることに比べれば、非常に低コストでLinux環境をWindowsだけで完結させられるようになった。

 もちろん、まだまだ足りない機能もたくさんあるとは思うが(例えばdaemonを動かす機能、特にDockerコンテナーが動かせること、topコマンドによる稼働状況の確認などが考えられる)、現状でもLinuxでしか動かなかった数多くのツールをWindows上でそのまま動かせるようになっており、例えば「Linux用のバイナリを生成するためのビルドエージェントを実行する」といった用途においては非常に便利に活用できるだろう。

 次回は、より実践的な内容として、WSLとWindowsでファイルシステムを上手に相互運用するためのヒントや、WSLを活用してクロスプラットフォームなASP.NET Core開発やLinuxアプリケーションの開発&デバッグを行う方法を説明する。

【改訂・更新履歴】

2016/08/23

 初版: Windows 10 Anniversary Update対応版

2017/04/06

 第2版: Windows 10 Creators Update対応版

2017/05/09

 更新: プレビュー版から正式版へのマイナーアップデート

2017/10/25

 第3版: Windows 10 Fall Creators Update対応版

Windows上のBashシェル入門【Windows 10 Fall Creators Update対応】(1)
1. 【現在、表示中】≫ Windows Subsystem for Linuxとは? そのインストールと使い方

Fall Creators Updateで正式版として提供されることになった「Windows 10上で動作するLinuxサブシステム」によるBashシェルの基礎を理解・マスターすることをゴールとして、Windows Subsystem for Linux(WSL、旧称:Bash on Ubuntu on Windows)の概要から、インストール方法までを解説。また、よくある疑問をQ&A形式で短くまとめる。

Windows上のBashシェル入門【Windows 10 Fall Creators Update対応】(1)
2. Windows Subsystem for Linuxを使って「開発」をしてみよう

WindowsとWSL(Windows Subsystem for Linux)の間でファイルシステムを上手に相互運用するためのヒントや、WSLを活用してクロスプラットフォームな開発を行う方法を説明する。

Windows上のBashシェル入門【Windows 10 Fall Creators Update対応】(1)
3. Bash on Ubuntu on Windowsの、Creators Updateでの強化点&新機能

正式リリースされたWindows 10 Creators Updateで、Bash on Windowsはどう進化するのか? その強化点と新機能を紹介する。

サイトからのお知らせ

Twitterでつぶやこう!