WindowsでBash風のシェルを使うにはどうすればいいですか?
私はLinuxとMacを使っていて、近々コマンドラインのことを教えようと思っています。
Windowsに何をインストールすれば、基本的なMac/LinuxのBashシェルに最も似たターミナルウィンドウが得られるのでしょうか?
できれば.bash_aliasesも定義できるようにしたいのですが。
私はLinuxとMacを使っていて、近々コマンドラインのことを教えようと思っています。
Windowsに何をインストールすれば、基本的なMac/LinuxのBashシェルに最も似たターミナルウィンドウが得られるのでしょうか?
できれば.bash_aliasesも定義できるようにしたいのですが。
これで、Windows_上で_ネイティブユーザーモードのLinuxシェルとツールを実行できるWindowsサブシステムをインストールすることができます。これにより、Windows上でBashシェルを直接実行できるようになり、Ubuntuをベースにしています。
これはWindows 10でAnniversary Update(2016年)で導入されたもので、デフォルトでは有効になっていません。Windows 10 Anniversary Updateのマシンで新機能を有効にするには、以下の操作を行ってください。
1.Navigate to Settings -> Update & Security -> For Developers and select “Developer mode” 2. Control Panel -> Programs and Features and click “Turn Windows Features on or off” on the top left pane 3. ダイアログボックスで “Windows Subsystem for Linux "にチェックを入れ、"Ok "をクリックします。マシンを再起動する 5. bash "を検索してクリックすると、コマンドプロンプトが開き、"Ubuntu on Windows "をインストールするかどうかを尋ねてくるので、"y "を続けてください。インストール後、それはUNIXのユーザー名とパスワード 7を作成するように求められます。あなたは今、bashシェルを使用する準備ができています
歴史の少し、2015年に戻ってプロジェクトAstoriaは、WindowsにAndroidアプリをもたらすために開始され、彼らは目的のためにWindows Subsystem for Linux(WSL)と呼ばれるLinuxサブシステムを構築しました。最終的にプロジェクトAstoriaは彼らのUWP (Universal Windows Platform)戦略を損なうために中止されましたが、いくつかの部分は保持され、Windows用のbashの基礎を形成しています。その間、MicrosoftはCanonical (Ubuntu Linuxの作成者)と協力して、サポートされているすべてのツール/バイナリを含むネイティブイメージを提供しました。
詳細はこちら、 https://blogs.msdn.microsoft.com/commandline/2016/04/06/bash-on-ubuntu-on-windows-download-now-3/ https://blogs.windows.com/buildingapps/2016/03/30/run-bash-on-ubuntu-on-windows/ https://sec.ch9.ms/sessions/build/2016/P488.mp4 (動画)
Cygwin ](http://en.wikipedia.org/wiki/Cygwin) や MSYS/MinGW をインストールすることもできますし、完全な Linux ディストリビューションを仮想マシンにインストールすることもできます (例えば、 VirtualBox を使用して)。
ここでは、2018-05時点で利用可能なオプションのリストを、2020-01時点でのWSLに関する豊富なアップデートとともに、それぞれのオプションについて少し詳しく紹介しています。
WSLはますます成熟してきており(Microsoftはずっと前にベータ警告を落としています)、インストールも非常に簡単なので、ほとんどの場合、非常に良い(ベストではないにしても)オプションです。これは、他のほとんどのオプションとは異なる方法で問題を解決します。Linuxシステム上で実行するのと全く同じバイナリコードを実行します。2020-01までは、WSLはカーネルコールを傍受して、Windowsカーネルコールに変換しています(Wineの逆を考えてみてください)。WSLの現在のベータ版では、軽量なVMで本物のlinuxカーネルを実行しているので、これは変更されるでしょう。
とにかく、WSLを使うと、純正のUbuntuインストールで見られるCLIのほとんどすべての機能と、リポジトリから利用可能なほとんどすべてのものをapt install
にするオプションを備えた素敵なシェルを手に入れることができます。Microsoftは公式に “WSLはGUIデスクトップやアプリケーションをサポートすることを目的としていない” としていますが、その方法については非公式な指示があります。現時点(2020-01)では、WSLの主な欠点は以下のようになっているようです。
Cygwin は以下の機能を提供します。
CygwinはLinuxアプリケーションのWindowsへの移植を容易にすることを目的としています。あるCプログラムがUnix用に設計されていて、パイプやUnixスタイルのファイルやディレクトリへのアクセスなどの機能を使用することを期待している場合、Cygwin用にコンパイルすれば、Cygwinはそのコードと外国のOS(Windows)との間の互換性レイヤーとして機能します。これにより、同じC言語のプログラムがLinuxとWindowsの両方で、ほとんど、あるいは全く変更することなく動作するようになります。このようにして、Linuxプログラムの膨大なリストが作成され、Cygwinをインストールすると実行することができます。しかし、これらのプログラムのユーザーであるあなたは、おそらくUnixに精通していなければならないでしょう。例えば、/cygdrive/c/autoexec.bat
の代わりに c:\autoexec.bat
のような引数を渡して、Windows の行終端 (\n
) の代わりに Unix の行終端 (\r\n
) で出力を処理できるようにしておく必要があるかもしれません。
すべてのCygwinプログラムのコレクションはリポジトリを構成し、Cygwinには伝統的なLinuxパッケージマネージャがありませんが、非常に直感的な方法でいつでもこのリポジトリからプログラムを追加、削除、更新することができます(Cygwinのsetup.exeを_の後にいつでも実行します。
Mingw64 は以下の機能を提供します。
MinGWは主にWindows用のソフトウェアディストリビューションと構築プラットフォームです。特に、GCC、make、bashなどのGNUコンパイラツールのWindows移植版です。かなりの量のGNUツールと最低限のUnix互換性レイヤーが含まれています。
Mingw-w64とCygwinの主な違いは、優先順位にあります。Cygwinは、すべての主要なUnixシステムコールとライブラリの完全な実装からなる完全なPOSIX互換性レイヤを提供することを目指しています。MinGWは性能を目指しているので、Windowsの下では簡単に実装できない、あるいは十分に高速に実装できない特定のPOSIX APIを提供しません。また、MinGWの主なターゲットはS/W開発者です。とはいえ、カジュアルなユーザーはシェルや汎用的なユーティリティを楽しむことができます。
MSYS2 には以下のようなものがあります。
MSYS2 はまた MSYS2は主にMinGWのようなWindows用のソフトウェア配布・構築プラットフォームですが、Cygwinの方法とMinGWの方法の両方を兼ね備えています。MSYS2を使って“MinGWプログラム”か“MSYS2プログラム”を作ることができます。後者はMSYS2の互換性層(msys-2.dll)へのリンクで、それ自体はCygwinの互換性層の開発を忠実に踏襲しています。しかし、2つのプロジェクトのリポジトリは全く関連性がありません。そのため、MSYS2とCygwinの両方がgrep.exe
を提供していますが、全く異なるバージョンを持っている可能性があります。
WSL を除いて、上記のツールのほとんどは多くの共通技術(ライブラリ、実行ファイル、コンセプト)を共有しています。例えば、MinGWに付属しているbashシェルはmsys-2.dllに依存しており、これはcygwin.dllのフォークです。そのため、混乱の余地は十分にあります :-)
Cmder ** は Windows 用の素敵なターミナルと bash ライクなシェルを提供します。主なコンポーネントは * Conemu ** (ターミナル) です。その上に Clink が追加されています。これは _Powerful Bash-style コマンドライン編集、カスタムプロンプトレイアウト、Monokai カラースキームを提供します。ネイティブのWindowsコンソールプログラムとの互換性が高い(あるいは完全に互換性がある)。
Scoop ** は、多くの GNU ツールを含む、多くのよく知られたクロスプラットフォームプログラム用のコマンドラインパッケージマネージャを提供します。コンパイル済みのパッケージをダウンロードします。(https://github.com/bmatzelle/gow/wiki)**はシェルもターミナルも提供しませんが、代わりにWindowsのcmd.exeの下で動作します(制限はありますが、ネイティブのWindowsコンソールプログラムとの完全な互換性もあります)。また、コンパイラスイートも含まれていません (もちろん、コンパイラや開発ツールは scoop と一緒にインストールできる典型的なパッケージです)。Scoopがインストールするプログラムの多くは、MinGW/MSYSプロジェクトから直接入手したものか、彼らのツールを使ってビルドされたものです。
下記のソリューションは有効ではないようですし、私はテストしたことがありませんが、他の人には有効なようです。
Gow ** (Gnu On Windows)はシェルを使わないCygwinの軽量な代替ツールです。便利な Windows インストーラを使用しており、約 130 の非常に有用なオープンソース Linux アプリケーションをネイティブの win32 バイナリとしてコンパイルし、Windows の cmd.exe を通してインストールすることができます。可能な限り小さく(約10MB)設計されています。
UnxUtils & GnuWin32 **. UnxUtilsは、一般的なGNU UnixライクなユーティリティをネイティブWin32に移植したもので、実行ファイルはMicrosoftのCランタイムmsvcrt.dllに依存するもののみです。主要部分](http://unxutils.sourceforge.net/UnxUpdates.zip)といくつかの[アップデート](https://stackoverflow.com/questions/25019057/how-are-msys-msys2-and-msysgit-related-to-each-other)をダウンロードする必要があります。GnuWin32はUnxUtilsよりもバージョンが遅いですが、サポートファイル(DLLなど)が必要です。
Mintty は Cygwin, MSYS2 とその派生品で使われている端末です。Windowsネイティブのコンソールプログラムを実行している場合、Windowsコマンドプロンプトの代わりにはならないことに注意が必要です。単純なテキスト出力のプログラムは通常問題なく動作しますが、インタラクティブなものやフルスクリーンのものはしばしば問題があります。詳細は Mintty のホームページを参照してください Git for Windows FAQ のエントリ “Some native console programs don’t work when run from Git Bash” を読んでください。
この種の問題に直面したときの対処法はいくつかあります:
最も重要なことは以下の2点です。
パワーとデバッグの難しさはトレードオフの関係にあります。
パワーと問題のデバッグの難しさの間には、トレードオフの関係があります。
Linux の経験が豊富でない場合、Cygwin/MSYS2/MinGW
UnxUtils や GnuWin32 のような強力なソリューションは使わないでください。Cygwinやそれに類するものは、パワーと頭痛の原因となる可能性の両方でトップになるでしょう。Cmderはその中間に位置しています。そのため 最も強力なソリューションを必要とするときは、十分な睡眠をとり、完全に集中してください。新しいものや不安定なものをテストしているときに、強力なソリューションを使うのは避けてください。また、cmder のような中程度の複雑さのソリューションは完璧ではないことを忘れないでください。
Linux のコマンドが Windows のコマンドに影を落とすという問題は、Cygwin/MSYS2/MinGW のようなソリューションではデバッグが困難なトラブルの一般的な原因となっています。例を挙げてみましょう。私はタイムアウトコマンドを使用している.batファイルを持っていました。timeoutもLinuxのコマンドですが、構文が異なるため、Cygwinで実行すると失敗してしまいます。問題を発見した後、.batファイルの先頭にPATH=…を追加して、windowsコマンドを優先させることができることがわかりました。しかし、その後、 さらに不可解な “Input redirection is not supported” エラーが出て、原因を見つける前に回避策を考えました。
ここにcmderの問題の例があります。Windows版のunisonをCmderで実行していたのですが、ある特殊な条件下では、_絶対にエラーメッセージが出ずにハングアップしていました。同じコマンドはいつも cmd.exe で完璧に実行されていました。面白いことに、Cygwinでも完璧に動作していました(実際、Unicodeファイル名を使用している場合は、cmd.exeよりもCygwinターミナルの方が良いでしょう。)
2017-05の間、私は昔からいくつかのツールを使っていたにもかかわらず、上記のツールの違いが理解できないことにうんざりしていました(主にCygWinとcmderを使っていましたが、開発目的で使うことはありませんでした)。そこで、数時間かけて、その風景を把握してみました。このガイドは、私がメモを取っておいた結果です。私はこの分野の専門家ではありませんが、関連するすべての情報を見つけ、批判的な目で読み、最も重要な部分を明確に提示するために努力してきました。何か間違っていると思われることがあればコメントしてください。
最後に、いくつかの用語の問題についてのお詫びです。この文章の中で、私は時々UNIXやPOSIXの代わりにLinuxという用語を使っています。これらは同じものではないことはわかっていますが、このような遠距離からトピックに近づくときに、両者を区別するのは非常に困難です。難しいことではないにしても、私にはない時間がかかります。)
最小限の MinGW と最小限のMSYSのセットをダウンロードしてインストールすることをお勧めします。MinGWのインストーラは、インストールしたいパッケージを簡単なGUIで選択することができます。BASHだけであれば、インストールには数メガバイトもかかりません。
UPDATE: 私は MSYS2 に移行しました。MSYS2 のインストーラは必要なものは全て揃っていますし、 mintty を使用しているので完璧です。
また、Clinkもあります GitHub 。これはフックライブラリを使ってWindowsのコマンドプロンプトに統合します。
プロジェクトの説明から。
ClinkはネイティブのWindowsシェルcmd.exeとGNU Readlineライブラリの強力なコマンドライン編集機能を組み合わせたもので、豊富な補完、履歴、ライン編集機能を提供します。
(そのため bash-as-a-programming-language 機能やその他の Unix の利点は提供していません)
私は仕事で Linux を使用していますが、時々 Bash に期待していたように動作しない cmd でタブ操作をしていることに気がつきます。Clink を使うことで、これらの欠点のいくつかを克服することができます。
最近、私は flinux という有望な、しかしまだ「万能」ではないプロジェクトを発見しました(現在は Arch Linux をベースにしています)。
faffaffaffaffが言ったこと ](https://stackoverflow.com/a/17123343/1743811)に加えて、[ Git for Windows ](http://msysgit.github.io/)にはBashといくつかの一般的なLinuxのコマンドラインプログラム(例: Vim , sed , gawk )が含まれています。これは MSYS をベースにしています。プログラムのバージョンは古いですが、例えばBashはバージョン3.1です。Cygwin ](http://en.wikipedia.org/wiki/Cygwin) は、より新しいバージョンのユーティリティを持っています。
私はターミナルエミュレータとして ConEmu を使っています(主にVimのシンタックスハイライト、タブページ、コピーペーストを簡単にするため)。console2 ](http://sourceforge.net/projects/console/)も人気のあるターミナルエミュレータですが、試したことはありません。
Cygwinを内部的に統合したBabunで試してみました。)
ダウンロードファイルは250 MB程度と少し大きいです。しかし、インストールは簡単です。