WindowsでBashのパワーを発見する
Microsoft Windowsはデスクトップの主要なプレーヤーかもしれませんが、急速に成長しているオープンソースソフトウェア市場(特に管理ツールと開発ツール)は明らかにLinuxを支持しています。AndroidがLinuxの亜種を使用しているモバイル市場は言うまでもありません。あなたがWindowsの開発者なら、Linuxの機能を理解するためのドラムビートはどんどん大きくなっています。
長年にわたり、Microsoftは、SSHを使用したPowerShell、Cygwin、MSYSなど、WindowsでLinux機能を使用するためのさまざまな回避策を導入してきました。仮想マシン内でLinuxを実行することも別のオプションです。ただし、VMは大量のリソースを消費し、ローカルファイルを編集したり、ローカルドライブへのフルアクセスを取得したりできないため、ファーストクラスのLinuxエクスペリエンスを提供しません。
ITの世界が多くのプロジェクトでLinuxに目を向けているため、Microsoftはこの成長する市場に参入するための新しい製品を考案しました。WindowsでのBashがその答えです。ここでは、WindowsにBashをインストールする方法を説明し、Linuxコマンドラインで何ができるのか、そしてなぜそれを行うのかを説明します。
WindowsでのBashの概要
Bash on Windowsは、Windows 10に追加された新機能です。Microsoftは、Ubuntu Linuxの作成者であるCanonicalと協力して、Windows Subsystem for Linux(WSL)と呼ばれるこの新しいインフラストラクチャをWindows内に構築しました。これにより、開発者はUbuntuCLIとユーティリティの完全なセットにアクセスできます。Linuxのネイティブエクスペリエンスにより、開発者はローカルファイルやドライブへのアクセスなど、Windows上でLinuxコマンドを実行できます。LinuxはWindowsにネイティブに統合されているため、開発者はLinuxとWindowsで同じファイルを柔軟に操作できます。簡単に言えば、Bash on Windowsは、Linuxカーネルを除いたUbuntuユーザーランドをWindowsにもたらします。
BashとPowerShell
Microsoftには、PowerShellにすでにコマンドシェルがあります。では、Windows上のBashはどのように異なりますか? PowerShellは、タスクを自動化するためのMicrosoftの構成管理フレームワークです。 API指向のアーキテクチャでWindowsを管理するために使用されます。一方、Bashは、自動化と開発のためにテキストファイルにほとんど依存しています。この2つは、焦点とデザインの両方が異なります。たとえば、ls
コマンドを使用してディレクトリ内のファイルを一覧表示すると、PowerShellは出力をファイルオブジェクトとして表示しますが、WindowsのBashは出力を文字列のセットとして表示します。ありがたいことに、Windows管理者は、両方のソリューションを並べて使用し、両方の長所を活かすことができます。
注意の一言:PowerShellは、あなたができるようにするエイリアスがあると思います実際には、あなたがPowerShellコマンドレットを実行しているとき、あなたは伝統的なバッシュコマンドを実行しているし。これは何人かの人々をつまずかせるかもしれません。たとえば、ls
はGet-ChildItem
コマンドのエイリアスです。同様にpwd
、はのエイリアスでGet-Location
ありcd
、はのエイリアスですSet-Location
。 PowerShellのすべてのエイリアスのリストについては、Get-Alias
コマンドレットを使用してください。
Windows上のBashは、オープンソース開発者に複数の利点を提供します。ネイティブのLinux機能をWindowsに導入することで、Bash on Windowsは、Linux機能にアクセスするためにUbuntuでデュアルブートを実行する必要をなくします。Mac OS Xを使用したり、仮想マシンを実行したり、Cygwinを使用して回避策を作成したりする必要はありません。シナリオとプラットフォームのコードを記述および構築するために必要なツールセットを提供します。BashからWindowsファイルシステムにアクセスすることで、WindowsまたはLinuxCLIを使用して同じファイルで作業できます。
MicrosoftはどのようにしてBashをWindowsに移植しましたか?
2016年4月のBuildConferenceで、マイクロソフトは多くの人を驚かせたWindows Subsystem for Linux(WSL)を発表しました。Canonicalとのパートナーシップから生まれたBashon Windowsは、Windows 10 AnniversaryUpdateで最初に出荷されました。コアサブシステムとパッケージの2つの部分で構成されます。コアサブシステムはすでにWindows10 Insider Buildsの一部であり、Windows上でLinux APIを提供します。つまり、Linuxライブラリと実行可能ファイルをネイティブにロードできます。Canonicalは、ソフトウェアパッケージをオプションとして提供しています。このソフトウェアパッケージは、Linux環境に必要なBashおよびCLIツールを提供します。
Bashのインストール
WindowsでBashを実行するには、システムでx64 Windows 10 Anniversary Update Build14393以降を実行する必要があります。winver
コマンドボックスに入力すると、ビルドが見つかります。

ビルドバージョンが14393未満の場合、Bashをインストールできません。
サポートされているビルドでBashを有効にするには、最初に開発者モードをオンにする必要があります。これを行うには、[設定]に移動し、[開発者向け]をクリックして、[開発者モード]ラジオボタンを選択します。これが完了すると、確認を求められます。

これが完了したら、Windows Subsystem forLinux機能を有効にする必要があります。これを行う最も簡単な方法は、PowerShellコマンドレットを使用することです。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
WindowsでBashを開くには、コマンドプロンプトを開きbash
、と入力して、使用許諾契約に同意します。Bashをインストールすると、システムにいくつかの変更が加えられます。
- Ubuntuユーザーモードイメージがダウンロードされます。
- にある隠しフォルダ
%localappdata%\lxss\
が作成されます。 - ショートカットがデスクトップに配置されます。
Bashを実行するには、コマンドプロンプトに移動するか、デスクトップショートカットアイコンを使用します。
Bashが正常にインストールされると、Unixのユーザー名とパスワードを作成するように求められます。このユーザー名とパスワードはBash用であり、Windows環境とはまったく関係ありません。
コマンド入門
Bashに入ると、WSLとUbuntuイメージを管理するためのいくつかの利用可能なコマンドがあります。
lxrun
:WSLインスタンスの管理用lxrun/install
:ダウンロードとインストールの手順を開始するにはlxrun/uninstall
:Ubuntuイメージをアンインストールするにはlxrun/update
:WSLパッケージインデックスを更新するにはlxrun/setdefaultuser
:UbuntuユーザーにデフォルトのBashを設定するには
もちろん、Windows上のBashでは、多くの「従来の」Bashコマンドを実行できます。例えば:
grep
:パターンに一致する線を見つけるsed
:文字列を置き換えるecho
:値を画面に出力しますvar=2
:の変数を作成するには$var
=!=
:テキストの小さな断片を比較するには
ナビゲーションコマンド
ナビゲーションの場合は、WindowsDOSコマンドcd
を使用してフォルダ構造をナビゲートすることもできます。
cd temp
:作業ディレクトリをtempという名前のフォルダに変更しますcd\
:ルートディレクトリに移動します。UbuntuにはWindowsのようなドライブ文字がないため、ルートディレクトリが最上位ディレクトリになります。cd..
:プロンプトを1レベル上(つまり、親ディレクトリ)に移動しますcd~
:ホームディレクトリに移動します
ただし、cd
PowerShellではUbuntuのBashとは少し異なります。WSL環境では、Windowsドライブは/mnt
フォルダーに保存され、ドライブの名前がサブフォルダーとして使用されます。cd
コマンドを使用するときは、それに応じてパスを変更する必要があります。
表示コマンド
ディレクトリのパスと内容を確認するために、以下にいくつかの例を示します。
pwd
:現在のパスまたはディレクトリを画面に出力しますls
:ディレクトリ内のファイルを表示します
ヘルプコマンド
各コマンドの機能とそれに関連するパラメーターを理解したい場合は、そのman
コマンドを使用できます。
入力するman
と、コマンドの目的と関連するパラメータの概要が表示されます。これは、PowerShellhelp
コマンドに似ています。
コマンドの編集
Bashの利点の1つは、プレーンテキストで作業していることです。これは、レジストリやプログラムの設定をいじる必要がないことを意味します。起動シーケンスまたはWebサーバー構成のどちらを変更する場合でも、対応するテキストファイルを編集するだけです。編集タスクを効率的に実行するには、優れたテキストエディタが必要です。Bashは、作業を簡単にする強力なエディターを提供します。バッシュ内で利用可能なテキストエディタのいくつかの良い例があるnano
とvi
。
Bashでのパッケージ管理
基本的にLinuxを実行しているので、パッケージ管理コマンドもapt-get
。の形式で利用できます。いくつかの例:
sudo apt-get update
:プル元のリポジトリのリストを更新しますsudo apt-get upgrade
:すべてのソフトウェアを最新バージョンにアップグレードしますapt-cache search app_name
:リポジトリで特定のアプリを検索しますsudo apt-get install apt-name
:特定のアプリをダウンロードしてインストールします
sudo
すべてのコマンドの前にが追加され、別のユーザー(デフォルトではスーパーユーザー(またはadmin))でコマンドを実行できるようになります。これは、Windowsの「管理者として実行」手法に似ています。
ネットワークコマンド
サーバーまたはURLからHTTP経由でファイルをダウンロードするには、curl
コマンドを使用できるようになりました。このコマンドは、PowerShellのInvoke-WebRequest
コマンドレットに似ています。
同様に、別のリモートLinuxコンピューターに接続して、そのコンピューターでコマンドを実行できます。Linuxを使用しているので、ようやく真のSSHクライアントを使用できるようになりました。CygwinまたはWindows用のOpenSSH実装の現在のベータ版を使用する代わりに、ssh
次のコマンドを使用してSSHをネイティブに実行できるようになりました。
sshユーザー名@ abc.com
OpenSSHのトピックに取り組んでいる間、組み込みscp
コマンドを使用してSCPを介してファイルを安全にコピーするネイティブ機能も利用できるようになりました。
scp localfile [email protected]:remotedirectory / remotefile
Windows上のBashを使用すると、他にも多くの機能をすぐに利用できます。
- Windows上で直接Git、Python、Rubyなどのツール
- emacsやviなどのコマンドラインエディタ
- Bash環境からWindowsファイルシステムにアクセスする
- Linuxユーザーサポート
- シンボリックリンクのサポート
- 経由でのストレージマウント
/mnt
WindowsでのBashの一般的な使用例は何ですか?
現在、多くの開発者はWindowsおよびLinuxツールを使用しています。つまり、CLI機能を取得するには、デュアルブートを実行するか、仮想マシン内でLinuxを実行する必要があります。これらのツールをWindows内で実行できる場合、Windowsがプライマリデスクトップになります。その場合、LinuxアプリやサービスをWindowsシステムに移植する必要はありません。 Windows内でLinuxGUIアプリを実行できる人もいますが、多くの人は、Azureから専用のLinuxマシンを購入したり、単純な目的でMacデバイスに移動したりせずに、便利なLinuxCLIを使用して簡単なタスクを実行できます。 Bashではスクリプトが簡単なので、ApacheでのWebサイトのバックアップなどの開発タスクを自動化できます。
たとえば、多くの開発者はバージョン管理タスクにGitHubを使用しています。WindowsでGitHubにアクセスするには、GitHub for Windowsをインストールしてから、commitコマンドとpushコマンドを使用して変更をコミットする必要があります。または、Gitユーティリティをダウンロードする必要があります。これは面倒なプロセスです。Windows上のBashを使用すると、作業が簡単になります。
apt-get install gitgit commit
git push
また、Bashでは、GZIPed tarball(tar.gzファイル)などの従来のLinuxファイルタイプを操作するためのサードパーティツールは必要ありません。
WindowsでBashを使用することの欠点は何ですか?
Windows上のBashはまだベータ版であり、いくつかのラフエッジが含まれています。Microsoftによると、現時点では、Windows上のBashがすべてのスクリプトを完全に実行できるとは限りません。ただし、Microsoftはパフォーマンスとフィードバックを注意深く監視しており、このソリューションに積極的に変更を加えています。
第二に、Windows上のBashは開発コミュニティのためにもたらされました。Windows環境を管理するために設計されたものではありません。WSLでサーバーデーモンを実行するようなことはできますが、完全なLinux仮想マシンの全機能を提供するわけではありません。Ubuntuの本番ワークロードでサーバープロセスを実行する場合は、完全なLinuxオペレーティングシステムを実行するための他の代替手段を検討する必要があります。
最後に、Bash on Windowsは、Linux機能をWindowsにもたらします。ただし、LinuxツールはWindowsツールおよびアプリケーションと対話できません。これは、固有のアーキテクチャの違いにより、クロスプラットフォーム機能がないことを意味します。
Windows上のBashはまだ初期段階にあります。このソリューションにはいくつかの制限がありますが、Microsoftは、これらの違いを解消し、Windowsをあらゆるタイプの開発プロジェクトのNo.1プラットフォームにするための機能の追加に熱心に取り組んでいます。マイクロソフトのこのプロジェクトに注目してください。オープンソースの世界におけるマイクロソフトの新しいスタンスにより、時間の経過とともにBashがWindowsの第一級市民になることは間違いありません。
関連記事
- PowerShell for Windows、Windows Server、およびExchangeの基本ガイド
- Windows管理者向けの10の重要なPowerShellセキュリティスクリプト
- PowerShellプロバイダーとモジュールに関するすべて
- Go Pro:PowerShellのパワーユーザーガイド