web-dev-qa-db-ja.com

WindowsでBash風シェルを使用する方法

私はLinuxとMacを使用しています、そして、私はすぐにいくつかのコマンドラインのものを教える予定です。

Windowsにインストールして、基本的なMac/Linux Bashシェルに最もよく似たターミナルウィンドウを作成できますか?

可能であれば、.bash_aliasesも定義できるようにしたいと思います。

52
Michael Durrant

あなたは Cygwin または MSYS/MinGW をインストールするか、または仮想マシンでの完全なLinuxディストリビューション(たとえば、 VirtualBox を使用)。

41
faffaffaff

これで、Linux用の Windowsサブシステムをインストールできます。これにより、Windows上でネイティブユーザーモードのLinuxシェルおよびツールを実行できます。。これはあなたがWindows上で直接 Bash Shellを実行することを可能にし、Ubuntuに基づいています。

これは、Anniversary Update(2016)でWindows 10に導入されたもので、デフォルトでは有効になっていません。 Windows 10 Anniversary Updateマシンで新機能を有効にするには、次の手順に従います。

  1. [設定] - > [アップデートとセキュリティ] - > [開発者向け]に移動し、[開発者モード]を選択します。
  2. 「コントロールパネル」 - >「プログラムと機能」と選択し、左上の区画で「Windowsの機能の有効化または無効化」をクリックします。
  3. ダイアログボックスで、[Linux用のWindowsサブシステム]をチェックし、[OK]をクリックします。
  4. リブート機
  5. 「bash」を検索してクリックすると、コマンドプロンプトが開き、「Ubuntu on Windows」をインストールするかどうかを尋ねるメッセージが表示されます。「y」を続行します。
  6. インストール後、UNIXのユーザー名とパスワードの作成を求めます。
  7. これでb​​ashシェルを使用する準備が整いました

2015年にさかのぼり、AstoriaがAndroidアプリケーションをWindowsに移行するために開始され、彼らはその目的のために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 (ビデオ)

48
Nemo

2019年1月5日現在で利用可能なオプションのリストと、2019年1月1日のWSLに関するいくつかの更新、およびそれぞれの詳細について説明します。

際立っているオプション

CygwinBabun

Cygwinは以下を提供します。

  1. bashシェルとMintty端末
  2. windows上で動作するようにコンパイルされた広範囲の一般的なLinuxユーティリティ
  3. linuxプログラムをWindows上で実行できるようにする包括的な互換性層。

Cygwinは、LinuxアプリケーションのWindowsへの移植を容易にすることを目指しています。 CプログラムがUnix用に設計されていて、パイプ、Unixスタイルのファイル、ディレクトリアクセスなどの機能を使用することを期待している場合。それからCygwin用にコンパイルすることができ、CygwinはコードとforeignOS(Windows)の間の互換レイヤとして機能します。これにより、LinuxとWindowsの両方で同じCプログラムをほとんど、またはまったく変更することなく動作させることができます。 Linuxプログラムの膨大なリストはこのようにして準拠されており、Cygwinをインストールするときに実行することができます。ただし、これらのプログラムのユーザーであるあなたは、おそらくUnixに精通している必要があります。たとえば、/cygdrive/c/autoexec.batの代わりにc:\autoexec.batのような引数を渡し、Windowsの行の終了(\n)の代わりにUnixの行の終了(\r\n)で出力を処理する準備ができている必要があるかもしれません。

すべてのCygwinプログラムのコレクションはリポジトリを構成します。Cygwinには伝統的なLinuxパッケージマネージャがありませんが、直感的に直観的な方法でこのリポジトリからプログラムを追加、削除、および更新できます。いつでもの後にインストールが完了しました。

BABUNはフル機能のパッケージマネージャ(pact)を持つCygwin、そのShell、git、自動更新、およびプラグインを持っています指向アーキテクチャ。デフォルトのシェルはzshですが、簡単にbashに切り替えることができます。あなたが余分な体重を気にしないのであれば、それはVanilla CygwinからのNiceアップグレードのようです。

Mingw-w64

Mingw-w64は以下を提供します。

  1. bashシェル
  2. かなりの量のLinuxユーティリティ
  3. ソフトウェア開発ツールチェーン。Linux互換性層なしで(あるいは最低限の層で)動作するアプリケーションを構築します。

MinGWは、主にWindows用のソフトウェア配布および構築プラットフォームです。特に、GCC、make、bashなどのGNUコンパイラツールをWindowsに移植したものです。かなりの量のGNUツールと最小限のUnix互換レイヤが含まれています。

Mingw-w64とCygwinの主な違いは優先順位にあります:Cygwinは全ての主要なUnixシステムコールとライブラリの完全な実装を含む完全なPOSIX互換レイヤを提供することを目指しています。パフォーマンスは互換性に次ぐものです。 MinGWはパフォーマンスを目的としているため、Windows環境では簡単におよび/または高速に実装できない特定のPOSIX APIは提供されません。 MinGWの主なターゲットはS/W開発者です。それにもかかわらず、さりげないユーザーもシェルとその一般的な目的を含むユーティリティを楽しむことができます。

MSYS2Windows用Git

MSYS2は以下を提供します。

  1. bashシェルとMintty端末
  2. かなりの量のLinuxユーティリティ
  3. oSプログラムをインストールするためのフル機能のコマンドラインパッケージマネージャ
  4. cygwinとMinGWの両方から提供され、包括的なLinux互換レイヤーの有無にかかわらずアプリケーションの構築をサポートします。
  5. ソフトウェアリポジトリと、Windows上でソフトウェアをインストール、使用、構築、および移植するのを容易にするパッケージマネージャ(pacman)。

MSYS2は、主にMinGWのようにWindows用のソフトウェア配布および構築プラットフォームでもありますが、Cygwinの方法とMinGWの方法の両方を兼ね備えています。 MSYS2を使用すると、"MinGWプログラム"または"MSYS2プログラム"のいずれかを作成できます。 MSYS2の互換性レイヤ(msys-2.dll)への後のリンクは、Cygwinの互換性レイヤの開発を 少数の追加/修正 で密接に追っています。 2つのプロジェクトのリポジトリは完全に無関係です。そのため、MSYS2とCygwinの両方がgrep.exeを提供していますが、それらは完全に異なるバージョンを持っているかもしれません。

WINDOWS用GITは、gitがインストールされているMSYS2か、少なくとも MSYS2に大きく基づいています のいずれかです。同じシェル(bash)、端末(Mintty)、およびパッケージマネージャ(pacman)を提供します。これは、Windows上で優勢なGitを稼働させるための最も一般的な方法であると思われます。それと共に、あなたは素晴らしいUnix環境を手に入れることができます。

LINUX用WINDOWSサブシステム(WSL)

WSLはまったく異なる方法で同じ問題を解決します。 WSL上のLinuxシステムで実行するのとまったく同じコードを実行します。これはカーネル呼び出しをインターセプトし、それらをWindowsカーネル呼び出しに変換します(Wineの逆です)。もちろん翻訳は完璧ではありませんが、Microsoftは beta warning を削除しました。 WSLは2018年以前にはWindows Server上では利用できなかったので、それほど詳しく調べていません。とにかくあなたはあなたが標準のUbuntuインストールで見つけることを期待しているであろうほとんどのCLIグッズを備えた素晴らしいbashシェルを手に入れます。 Microsoftは公式に "WSLはGUIデスクトップやアプリケーションのサポートを目的としていません" と言っていますが、それを行う方法については非公式の指示があります。現時点では(2018年前半)WSLの主な欠点は次のとおりです。a)画面のレンダリングと ディスクアクセス は非常に遅いb) あなたは編集することは想定されていません) WSL(Linux)ファイル(Windowsから c)64ビットWindows上でのみ動作します。これが cygwinとの古くていいニースの比較 です(Rich TurnerはWSLチームの一員であり、彼はWSLに関する有用な情報をたくさん投稿しています)。

コモングラウンド

WSLを除いて、上記のツールのほとんどは多くの共通技術(ライブラリ、実行可能ファイル、概念)を共有しています。たとえば、MinGWに付属のbashシェルは、それ自体がcygwin.dllのフォークであるmsys-2.dllに依存しています。それで、混乱の余地がたくさんあります:-)

より多くのオプション

CMDERは、Windows用のNice端末とbash風のシェルを提供します。主なコンポーネントはCONEM(端末)です。その上にClinkを追加します。これは強力なBashスタイルのコマンドライン編集、カスタムプロンプトレイアウトおよびモノカイカラースキームを提供します。それはネイティブのウィンドウズコンソールプログラムと非常に(あるいは多分完全に)互換性があります。

SCOOPは、たくさんのGNUツールを含む、よく知られているクロスプラットフォームプログラムのためのコマンドラインパッケージマネージャを提供します。コンパイル済みのパッケージをダウンロードします。シェルも端末も提供していませんではなく、Windowsのcmd.exeの下で実行されます(すべての制限はありますが、ネイティブのWindowsコンソールプログラムとの完全な互換性もあります)。また、コンパイラスイートも含まれていません(もちろん、コンパイラと開発ツールはscoopでインストールできる典型的なパッケージです)。 Scoopがインストールするプログラムの多くは、MinGW/MSYSプロジェクトから直接来たものか、それらのツールを使って構築されたものです。

さらに多くの選択肢

以下の解決策はアクティブではないようで、私はそれらをテストしたことはありませんが、それらは他の人のために仕事をするようです:

GOW(WindowsのGnu)は、シェルなしのCygwinの軽量な代替方法です。それはネイティブのwin32バイナリとしてコンパイルされ、windowsのcmd.exeを通して利用可能な約130の非常に役に立つオープンソースのLinuxアプリケーションをインストールする便利なWindowsインストーラを使います。可能な限り小さくなるように設計されています(約10 MB)。

NXUTILSGNUWIN32UnxUtilsは共通のポートの集まりですGNUネイティブWin32用のUnix風ユーティリティ。実行可能ファイルはMicrosoft Cランタイムmsvcrt.dllにのみ依存します。あなたは main part といくつかの pdates をダウンロードしなければなりません。GnuWin32にはUnxUtilsより新しいバージョンがありますが、サポートファイル(例:DLL)が必要です

MSYSMinGWは、MSYS2&MinGWによる have廃止 のようです-W64だから私はそれらを見たことがない。

CygwinとMSYS2に関するいくつかの一般的な問題

端末について

Minttyは、Cygwin、MSYS2、およびそれらの派生物で使用されている端末です。 Windowsのネイティブコンソールプログラムを実行しているのであれば、Windowsのコマンドプロンプトに代わるものではありません。単純なテキスト出力を持つプログラムは通常はうまく機能しますが、インタラクティブでフルスクリーンのものは問題を抱えていることがよくあります。 Minttyのホームページの詳細 を読んで、また{ Git for Windows FAQ のエントリ "Git Bashから起動するといくつかのネイティブコンソールプログラムが動作しない"を読んでください。そのような問題に直面したときには、そのエントリにこの推奨事項があります。

これらの問題を回避する方法はいくつかあります。

  • winpty ユーティリティを使用して問題のあるプログラムを実行します。これはあなたがより良いミントターミナルを使い続けることを可能にします、しかしあなたが多くのプログラムのための回避策を必要とするならば扱いにくくなるかもしれません。
  • [cmd.exeを使ってください]そしてそれを "Quick Edit"、適当なサイズ、スクロールバックそして適切なUnicodeフォントに設定してください。あなたはまだ[cmd.exe]の他の癖と一緒に暮らす必要があるでしょう。
  • Conem をインストールして使用してください。

その他の問題

心に留めておくべき2つの最も重要なことはこれらです:

  1. 電力とデバッグが難しい問題との間にはトレードオフがあります。解決策が強力であればあるほど、最初はあなたのLinux層とは無関係に見えるような方法でさえ、より多くのものがうまくいかない可能性があります。

  2. linuxの経験が豊富でなければ、Cygwin/MSYS2/MinGWのようなより強力なソリューションを使用しないでください。

UnxUtilsとGnuWin32は最小の電力を持ちますが、頭痛を引き起こす可能性も最小です。 Cygwinとそれに類するものは、力と頭痛の両方の面でトップに立つでしょう。 Cmderは途中のどこかにあります。だからあなたが最も強力な解決策を必要とするときはよく眠りを取り、完全に集中しなさい。新しくて不安定な可能性があるものをテストしながら、強力なソリューションを使用しないでください。 cmderのような中程度の複雑さの解決策が無駄ではないことも忘れないでください。

ウィンドウズのものを隠しているLinuxコマンドの問題はCygwin/MSYS2/MinGWのような解決策でデバッグするのが難しいトラブルの一般的な原因です。例を示します。timeoutコマンドを使用している.batファイルがあります。 Cygwinで実行すると、timeoutもLinuxのコマンドですが構文が異なるため失敗します。私が発見した問題を発見した後、windowsコマンドが優先されるようにするために.batファイルの先頭にPATH = ...を追加することができます。しかし、それから私は さらにもっと不可解な "入力リダイレクトはサポートされていません" エラーを受け取り、その理由を見つける前に回避策を取りました。

これがcmderの問題の例です。私はCmderの下でunisonのWindows版を実行していました、そして、それは絶対にエラーメッセージでぶら下がっていました。同じコマンドが常にcmd.exeの下で完全に実行されていました。面白いのは、Cygwinでも完全に動作していたということです(実際、Unicodeファイル名の場合、Cygwin端末はcmd.exeよりも優れています。cmd.exeはしばしばUnicodeテキストを不正な形式で表示するからです)。

このガイドについて

2017-05年の間に私は昔からそれらのいくつかを使っていたけれども私は上記のツールの違いを理解していないことにうんざりしました。それで、私は数時間かけて景色を見ました。このガイドは私が残したメモの結果です。私はその分野の専門家ではありませんが、関連する情報をすべて見つけ出し、それを批判的な目で読み、最も重要な部分を明確に提示するように努めました。何かが間違っているように思われる場合はコメントしてください、私はそれを修正するために最善を尽くします。

最後に、いくつかの用語の問題に対するお詫び:このテキストでは、UNIXまたはPOSIXの代わりにLinuxという用語を使用することがあります。それらが同じではないことを私は知っていますが、そのような長距離からトピックに近づくときそれらを区別することは非常に困難です。難しいことではないにしても、時間がかかりません;-)

18
ndemou

minimalMinGW のセットと、MSYSの最小セットをダウンロードしてインストールすることをお勧めします。 MinGWインストーラーはインストールしたいパッケージを選択するための簡単なGUIを提供します。必要なのがBASHだけであれば、インストールには数メガバイトを超えることはありません。

更新日:私は MSYS2 に移行しました。これははるかに進んだもので、パッケージ管理のためのArchLinux pacmanツールの移植があります。 MSYS2インストーラーはあなたが必要とするすべてを持っています、そしてそれは mintty を使います、そしてそれは絶対に完璧です。

10
DejanLekic

GitHubでClinkが利用可能 もあります 。フックライブラリを使用してWindowsコマンドプロンプトに統合されています。

プロジェクトの説明から:

ClinkはネイティブのWindows Shell cmd.exeをGNU Readlineライブラリの強力なコマンドライン編集機能と組み合わせて、豊富な補完機能、履歴機能、および行編集機能を提供します。

(つまり、bash-as-a-programming-language機能やその他のUnixの機能は提供されていません)

私は職場でLinuxを使用していますが、自分自身がcmdでタブ移動していて、Bashから期待しているようには動作しないことがあります。 Clinkを使えば、これらの欠点のいくつかを克服することができます。

最近、私はまた、 flinux と呼ばれる、有望ではあるがまだ実行できない 'all-do-all'プロジェクトを発見しました。その上にシステム(現在Arch Linuxをベースにしています)

10
Andreas

faffaffaffが言ったこと に加えて、 Windows用Git にはBashといくつかが含まれます。一般的なLinuxコマンドラインプログラム(例: Vimsed 、( gawk )。これは MSYS に基づいています。プログラムのバージョンは古いですが、例えばBashはバージョン3.1です。 Cygwin には、より新しいバージョンのユーティリティがあります。

私は ConEmu を端末エミュレータとしても使っています(主にVimでの構文の強調表示、タブページ、そしてより簡単なコピーペースト)。 console2 も私が試したことはありませんが、もう一つの人気のある端末エミュレータです。

7
doubleDown

これは、新しいWindowsマシンをセットアップするときに最初に行うことの1つです。

Windowsの機能的で洗練されたコンソール

2
u84six

私はちょうど Babun を試してみました。これはCygwinを内部的に統合していて、私には美味しいです。)

ダウンロードファイルは少し大きく、およそ250 MBです。しかし、インストールは簡単です。何も設定する必要はありません、そしてそれはただうまくいきます!

1
insidepower