如何在Windows上使用类似Bash的外壳?


53

我使用Linux和Mac,很快将教一些命令行知识。

我可以在Windows上安装什么以提供最类似于基本Mac / Linux Bash Shell的终端窗口?

如果可能,我也希望能够定义.bash_aliases。


3
我们曾经putty连接到真正的linux服务器。在Windows上cygwin,由于我笨拙的安装经验,我总是既不愿意也不愿意使用它。但就我个人而言,我发现它比msys更方便使用,比vm更快。一旦安装,cygwin就会以某种方式可移植,只需复制它的目录就足够了,但是它将基于Windows用户名(至少默认情况下)在每台机器/用户上创建一个新用户名。但是请记住,由于cygwin / msys可被视为自定义“发行版”,因此可能会缺少某些[可选]命令开关。测试他们。
n611x007 2013年

5
微软刚刚宣布Windows 10的下一个更新将包括Bash。
Dmitri Nesteruk '16

Answers:


42

您可以安装CygwinMSYS / MinGW,也可以在虚拟机中安装完整的Linux发行版(例如,使用VirtualBox)。


我使用的是cygwin,它是135 mb(压缩后的25 mb),是从另一台计算机(便携式)复制的。它根据新计算机的当前用户创建了一个新的用户名,否则可以很好地工作。我目前的cygwin是800 mb,带有构建环境,200-300 mb源代码和一些东西。
n611x007 2013年

2
注意:您现在可以安装“ Linux的Windows子系统”,它使您可以在Windows上运行本机用户模式Linux Shell和工具。请参阅下面的答案...
MrHinsh-Martin Hinshelwood

48

现在,您可以安装适用于LinuxWindows子系统,子系统可让您在Windows运行本机用户模式Linux shell和工具。这使您可以在基于Ubuntu的Windows上直接运行Bash shell。

Windows 10周年更新(2016)中引入了此功能,默认情况下未启用。要在Windows 10周年更新计算机上启用新功能,请执行以下操作:

  1. 导航到设置->更新和安全->对于开发人员,然后选择“开发人员模式”
  2. 控制面板->程序和功能,然后单击左上方窗格中的“打开或关闭Windows功能”
  3. 在对话框中,选中“ Windows Linux子系统”,然后单击“确定”。
  4. 重新启动机器
  5. 搜索“ bash”并单击它,它应该打开命令提示符,并询问您是否要在Windows上安装“ Ubuntu”,并继续“ y”
  6. 安装后,它将要求创建UNIX用户名和密码
  7. 您现在可以使用bash shell

回顾一下历史,早在2015年,Astoria项目就开始将Android应用程序引入Windows,并且他们为此目的构建了一个名为Windows Linux子系统(WSL)的Linux子系统。最终,由于破坏了他们的UWP(通用Windows平台)策略而放弃了Astoria项目,但是保留了某些部分,并成为Windows的基础。在整个过程中,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(视频)



我更喜欢这个答案!
彼得

1
@Peter谢谢您,昨天进行了简短尝试,能够运行gcc / g ++,能够使Firefox通过xserver运行(相当慢,也许它们限制了CPU使用率?),Chrome和默认浏览器崩溃了,并且某些命令诸如“屏幕”不起作用,bash的下一个更新中的所有内容都应消除,因为它仍处于beta中。话虽如此,仅在Windows上本地提供bash真是太棒了!它打开了很多可能性。微软!
Nemo

您也可以在Powershell中运行此程序(以管理员身份运行):Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Windows-Subsystem-Linux"并从Windows商店安装以下任何程序:Ubuntu,Debian,OpenSUSE,Kali Linux
Zhenhir

18

这是截至2018-05年度可用选项的列表,其中包含有关2019-01年度WSL的一些更新以及每个选项的一些详细信息。

突出的选项

CygwinBabun

Cygwin提供以下内容:

  1. bash外壳和Mintty终端,
  2. 编译为可在Windows上运行的各种常见Linux实用程序
  3. 一个全面的兼容性层,使Linux程序可以在Windows上运行。

Cygwin旨在简化在Windows上移植Linux应用程序的工作。如果某些C程序是为Unix设计的,并且希望使用管道,Unix风格的文件和目录访问等功能,则可以将其编译为Cygwin,而Cygwin将充当代码与外部 OS(Windows)之间的兼容层。。这使得相同的C程序几乎不需要修改就可以在Linux和Windows上运行。因此,已经编译了许多Linux程序,可以在安装Cygwin时运行它们。但是,作为这些程序的用户,您可能必须熟悉Unix。例如,您可能需要传递诸如/cygdrive/c/autoexec.bat代替的参数,c:\autoexec.bat并准备使用Unix行终止(\n)而不是Windows行终止(\r\n)处理输出。

所有Cygwin程序的集合都包含一个存储库,尽管Cygwin没有传统的Linux软件包管理器,但是您可以随时以非常直观的方式从该存储库中添加,删除和更新程序(您可以在以下位置运行Cygwin的setup.exe:安装完成的任何时间)

Babun是Cygwin,具有功能齐全的软件包管理器(pact),oh-my-zsh的shell,git,自动更新和面向插件的体系结构。尽管默认的shell是zsh,但是您可以轻松切换到bash。如果您不介意额外的重量,这似乎是对香草Cygwin的不错升级。

明w-w64

Mingw-w64提供以下功能:

  1. 一个bash壳,
  2. 大量的Linux实用程序,
  3. SW开发工具链,用于构建无需Linux兼容层(或最低兼容层)即可运行的应用。

MinGW主要是Windows的软件发行版和构建平台。特别是GNU编译器工具(例如GCC,make,bash等)的Windows端口。它包括大量的GNU工具和最小的Unix兼容性层。

Mingw-w64与Cygwin之间的主要区别在于优先级:Cygwin旨在提供完整的POSIX兼容性层,其中包括所有主要Unix系统调用和库的完整实现;性能次于兼容性。MinGW的目标是性能,因此它不会提供某些POSIX API,这些POSIX API在Windows下无法轻松和/或足够快地实现。MinGW的主要目标也是软件开发人员。不过,临时用户也可能会喜欢它的外壳,而通用目的包括实用程序。

Windows的MSYS2Git

MSYS2提供以下内容:

  1. bash外壳和Mintty终端,
  2. 大量的Linux实用程序,
  3. 功能齐全的命令行软件包管理器,用于安装OS程序
  4. Cygwin和MinGW的两个部分可支持构建具有或不具有全面Linux兼容性层的应用程序。
  5. 一个软件存储库和一个程序包管理器(pacman),可轻松在Windows上安装,使用,构建和移植软件。

MSYS2还是主要的软件发行版和Windows的MinGW之类的构建平台,但它结合了Cygwin的方法和MinGW的方法。您可以使用MSYS2创建“ MinGW程序”“ MSYS2程序”。到MSYS2兼容性层(msys-2.dll)的更高版本链接本身紧跟Cygwin的兼容性层开发,并作了一些附加/修改。但是,这两个项目的存储库是完全无关的。因此,尽管MSYS2和Cygwin都提供了grep.exe它们可能具有完全不同的版本。

Windows的Git仅仅是安装了git的MSYS2,或者至少在很大程度上基于MSYS2。它提供了相同的外壳程序(bash),终端程序(Mintty)和程序包管理器(pacman)。它似乎是使主导的Git在Windows上运行的最流行的方法,并且它伴随着一个不错的Unix环境。

Windows Linux子系统(WSL)

WSL使用完全不同的方法解决了相同的问题。您运行与在WSL的Linux系统上运行的代码完全相同的代码,该代码将拦截内核调用并将其转换为Windows内核调用(与Wine相反)。当然翻译不能完美,但是微软放弃了beta版警告。由于WSL在2018年之前在Windows Server上不可用,因此我没有对此进行过多研究。无论如何,您确实会得到一个不错的bash shell,其中包含您希望在库存的Ubuntu安装中找到的大多数CLI好东西。Microsoft正式声明“ WSL并非旨在支持GUI桌面或应用程序”但是,有关如何执行此操作的非正式说明。目前看来(2018年初),WSL的主要缺点如下:a)渲染屏幕和磁盘访问速度非常慢b)您不应该从Windows编辑WSL(Linux)文件 c)它仅在64位Windows上运行。这是与cygwin的古老但很好的比较(请注意Rich Turner是WSL团队的成员,他已经发布了许多有关WSL的有用信息)

共同点

除WSL以外,上述大多数工具都共享许多通用技术(库,可执行文件,概念)。例如,MinGW附带的bash外壳依赖于msys-2.dll,而后者本身是cygwin.dll的分支。所以是的,还有很多混淆的余地:-)

更多选择

Cmder为Windows提供了一个不错的终端和一个类似bash的外壳。它的主要成分是 Conemu(终端)。最重要的是,它添加了 Clink,它提供了强大的Bash风格的命令行编辑,自定义提示布局和Monokai配色方案。它与本机Windows控制台程序高度(或完全)兼容。

Scoop为许多知名的跨平台程序(包括许多GNU工具)提供了命令行软件包管理器。它下载预编译的软件包。它既不提供外壳也不提供终端,而是在Windows的cmd.exe下运行(具有所有局限性,而且还与本机Windows控制台程序完全兼容)。它还不包含编译器套件(但是当然,编译器和开发工具是可以与scoop一起安装的典型软件包)。Scoop安装的许多程序要么直接来自MinGW / MSYS项目,要么是使用其工具构建的。

更多选择

下面的解决方案似乎并不活跃,我从未测试过它们,但是它们似乎可以为其他人完成工作:

Gow(在Windows上为Gnu)是Cygwin的轻巧替代品,没有外壳。它使用方便的Windows安装程序来安装大约130个非常有用的开源Linux应用程序,这些应用程序被编译为本地win32二进制文件,可通过Windows的cmd.exe获得。它被设计为尽可能小(约10 MB)。

UnxUtilsGnuWin32 UnxUtils是通向本地Win32的类似GNU Unix的通用实用程序端口的集合,其可执行文件仅取决于Microsoft C运行时msvcrt.dll。您必须下载主要部分和一些更新GnuWin32的版本高于UnxUtils,但需要支持文件(例如DLL)

MSYSMinGW似乎被MSYS2和MinGW-W64 淘汰,所以我从没看过它们。

Cygwin和MSYS2的一些常见问题

关于终端

Mintty是Cygwin,MSYS2及其衍生产品中使用的终端。应该注意的是,如果您正在运行Windows本机控制台程序,它并不是Windows命令提示符的轻松替代。虽然带有简单文本输出的程序通常可以正常工作,但交互式和全屏程序经常会出现问题。在Mintty的主页上阅读更多内容,并阅读Git for Windows FAQ上的条目“从Git Bash运行时某些本机控制台程序不起作用” 。当您遇到此类问题时,该条目将提供以下建议:

有几种方法可以解决这些问题:

  • 使用winpty实用程序运行有问题的程序。这使您可以继续使用更好的薄荷终端,但是如果您需要许多程序的解决方法,可能会变得笨拙。
  • [使用cmd.exe]并将其配置为“快速编辑”,合理的大小和向后滚动以及合适的Unicode字体。您仍然必须忍受[cmd.exe]的其他怪癖。
  • 安装并使用Conemu

其他事宜

要记住的两个最重要的事情是:

  1. 在功能和难以调试的问题之间需要权衡取舍。该解决方案功能越强大,即使最初看起来与您的Linux层无关的方式,也可能出现更多问题。

  2. 如果您没有足够的Linux经验,请不要使用Cygwin / MSYS2 / MinGW等功能更强大的解决方案

UnxUtils和GnuWin32具有最小的功能,但也具有最小的潜在麻烦。Cygwin和类似产品将在功能和头痛方面都居于首位。Cmder在中间。因此,当您需要最强大的解决方案时,请睡个好觉并全神贯注。在测试新的可能不稳定的东西时,避免使用功能强大的解决方案。同样不要忘记,像cmder这样的中等复杂性解决方案并非一尘不染。

在诸如Cygwin / MSYS2 / MinGW之类的解决方案中,Linux命令问题掩盖了Windows命令是导致难以调试问题的常见原因。这是一个示例:我有一个使用超时命令的.bat文件。在Cygwin下运行时,它会失败,因为超时也是Linux命令,但语法不同。发现问题后,我发现可以在.bat文件的顶部添加PATH = ...以确保Windows命令具有优先级。但是随后我得到了一个更加神秘的“不支持输入重定向”错误,并在找到原因之前解决了一个问题。

这是cmder问题的示例。我在Cmder下运行Windows版本的统一,在某些特殊情况下,它挂起时没有任何错误消息。同一命令始终在cmd.exe下完美运行。有趣的是,它在Cygwin下也可以完美运行(实际上,如果您具有Unicode文件名,则Cygwin终端比cmd.exe更好,因为cmd.exe经常显示格式错误的Unicode文本)。

关于本指南

在2017-05期间,尽管我很早以前就使用了其中的一些工具(主要是CygWin和cmder,但从未用于开发目的),但我还是不理解上述工具的差异。所以我花了几个小时来浏览风景。本指南是我保留的笔记的结果。我不是该领域的专家,但我一直努力寻找所有相关信息,用敏锐的眼光阅读并清楚地介绍了最重要的部分。如果出现问题,请发表评论,我会尽力予以纠正。

最后,为一些术语问题道歉:在本文中,我有时使用术语Linux代替UNIX或POSIX。我知道它们并不相同,但是在如此遥远的话题中很难区分它们。即使不难,我也没有时间;-)


2
这是一个很棒的答案,谢谢您分享您的发现和经验。
Daniel Sokolowski

全面的答案,但pacman不是,packman
亚德里安·贡特

这怎么可能不是公认的答案。感谢您详细介绍所有这些内容。
42.

10

我建议您下载并安装最少MinGW和MSYS。MinGW安装程序为您提供了一个简单的GUI,可以选择要安装的软件包。如果您只需要BASH,则安装所需的空间不会超过几兆字节。

更新:我转而使用了更高级的MSYS2,它具有用于软件包管理的ArchLinux pacman工具端口。MSYS2安装程序具有您所需的一切,而且它使用的薄荷味绝对是完美的。


10

还有碰杯可以在GitHub上。它使用挂钩库将自身集成到Windows命令提示符中。

从项目描述:

Clink将本机Windows Shell cmd.exe与GNU Readline库的强大命令行编辑功能结合在一起,该功能提供了丰富的完成,历史记录和行编辑功能。

(因此它不提供bash-as-a-programming-language语言功能或任何其他Unix好东西)

我在工作中使用Linux,有时发现自己有时会在cmd中四处乱跳,这与Bash所期望的不一样。使用Clink,我可以克服其中的一些缺点。

最近,我还发现了一个有前途但尚未完成的名为flinux的 “可以做所有事情”的项目,该项目模仿Linux系统功能并在其之上提供某种系统(当前基于Arch Linux)。


Clink是否实际上会更改语言,还是只能改善cmd.exe?根据答案,这还不是很清楚。
萨尔赫·博尔希

它使您可以使用一些常规的* nix外壳的功能,如用Ctrl + R,一个路径搜索命令完成等反向搜索
安德烈亚斯

所以它不是bash实现,对吗?
Sarge Borsch 2015年

恩,不。的扩展cmd.exe,如网站上所述;)
Andreas 2015年

7

除了faffaffaff所说的以外Windows的Git还包括Bash和一些常见的Linux命令行程序(例如Vimsedgawk)。它基于MSYS。程序的版本较旧,例如Bash是3.1版。Cygwin将具有该实用程序的最新版本。

我还将ConEmu用作终端仿真器(主要用于Vim中的语法高亮显示,标签页和更轻松的复制粘贴)。console2也是另一个流行的终端仿真器,尽管我还没有尝试过。


顺便说一句:ConEmu还可以识别MSYS2的安装,并允许某些Clink集成。
安德里亚斯(Andreas)


1

我刚刚尝试了Babun,后者在内部集成了Cygwin,对我来说很好吃:)

下载文件略大,大约250 MB。但是安装很简单;无需配置任何东西,它就可以工作!


Babun包括整个Cygwin,它确实非常庞大。安装过程有点麻烦(当前zip存档已被chrome阻止为危险文件)。但是到目前为止,我发现了最好的终端更换。
Tombart

Babun对我来说真的很慢。我改用圆锥木和git shell
分别是
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.