我使用Linux和Mac,很快将教一些命令行知识。
我可以在Windows上安装什么以提供最类似于基本Mac / Linux Bash Shell的终端窗口?
如果可能,我也希望能够定义.bash_aliases。
我使用Linux和Mac,很快将教一些命令行知识。
我可以在Windows上安装什么以提供最类似于基本Mac / Linux Bash Shell的终端窗口?
如果可能,我也希望能够定义.bash_aliases。
Answers:
您可以安装Cygwin或MSYS / MinGW,也可以在虚拟机中安装完整的Linux发行版(例如,使用VirtualBox)。
现在,您可以安装适用于Linux的Windows子系统,该子系统可让您在Windows上运行本机用户模式Linux shell和工具。这使您可以在基于Ubuntu的Windows上直接运行Bash shell。
Windows 10周年更新(2016)中引入了此功能,默认情况下未启用。要在Windows 10周年更新计算机上启用新功能,请执行以下操作:
回顾一下历史,早在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(视频)
Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Windows-Subsystem-Linux"
并从Windows商店安装以下任何程序:Ubuntu,Debian,OpenSUSE,Kali Linux
这是截至2018-05年度可用选项的列表,其中包含有关2019-01年度WSL的一些更新以及每个选项的一些详细信息。
Cygwin提供以下内容:
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的不错升级。
Mingw-w64提供以下功能:
MinGW主要是Windows的软件发行版和构建平台。特别是GNU编译器工具(例如GCC,make,bash等)的Windows端口。它包括大量的GNU工具和最小的Unix兼容性层。
Mingw-w64与Cygwin之间的主要区别在于优先级:Cygwin旨在提供完整的POSIX兼容性层,其中包括所有主要Unix系统调用和库的完整实现;性能次于兼容性。MinGW的目标是性能,因此它不会提供某些POSIX API,这些POSIX API在Windows下无法轻松和/或足够快地实现。MinGW的主要目标也是软件开发人员。不过,临时用户也可能会喜欢它的外壳,而通用目的包括实用程序。
MSYS2提供以下内容:
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环境。
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)。
UnxUtils&GnuWin32: UnxUtils是通向本地Win32的类似GNU Unix的通用实用程序端口的集合,其可执行文件仅取决于Microsoft C运行时msvcrt.dll。您必须下载主要部分和一些更新。GnuWin32的版本高于UnxUtils,但需要支持文件(例如DLL)
MSYS和MinGW似乎已被MSYS2和MinGW-W64 淘汰,所以我从没看过它们。
Mintty是Cygwin,MSYS2及其衍生产品中使用的终端。应该注意的是,如果您正在运行Windows本机控制台程序,它并不是Windows命令提示符的轻松替代。虽然带有简单文本输出的程序通常可以正常工作,但交互式和全屏程序经常会出现问题。在Mintty的主页上阅读更多内容,并阅读Git for Windows FAQ上的条目“从Git Bash运行时某些本机控制台程序不起作用” 。当您遇到此类问题时,该条目将提供以下建议:
有几种方法可以解决这些问题:
要记住的两个最重要的事情是:
在功能和难以调试的问题之间需要权衡取舍。该解决方案功能越强大,即使最初看起来与您的Linux层无关的方式,也可能出现更多问题。
如果您没有足够的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。我知道它们并不相同,但是在如此遥远的话题中很难区分它们。即使不难,我也没有时间;-)
pacman
不是,packman
还有碰杯可以在GitHub上。它使用挂钩库将自身集成到Windows命令提示符中。
从项目描述:
Clink将本机Windows Shell cmd.exe与GNU Readline库的强大命令行编辑功能结合在一起,该功能提供了丰富的完成,历史记录和行编辑功能。
(因此它不提供bash-as-a-programming-language语言功能或任何其他Unix好东西)
我在工作中使用Linux,有时发现自己有时会在cmd中四处乱跳,这与Bash所期望的不一样。使用Clink,我可以克服其中的一些缺点。
最近,我还发现了一个有前途但尚未完成的名为flinux的 “可以做所有事情”的项目,该项目模仿Linux系统功能并在其之上提供某种系统(当前基于Arch Linux)。
cmd.exe
,如网站上所述;)
除了faffaffaff所说的以外,Windows的Git还包括Bash和一些常见的Linux命令行程序(例如Vim,sed和gawk)。它基于MSYS。程序的版本较旧,例如Bash是3.1版。Cygwin将具有该实用程序的最新版本。
我还将ConEmu用作终端仿真器(主要用于Vim中的语法高亮显示,标签页和更轻松的复制粘贴)。console2也是另一个流行的终端仿真器,尽管我还没有尝试过。
putty
连接到真正的linux服务器。在Windows上cygwin
,由于我笨拙的安装经验,我总是既不愿意也不愿意使用它。但就我个人而言,我发现它比msys更方便使用,比vm更快。一旦安装,cygwin就会以某种方式可移植,只需复制它的目录就足够了,但是它将基于Windows用户名(至少默认情况下)在每台机器/用户上创建一个新用户名。但是请记住,由于cygwin / msys可被视为自定义“发行版”,因此可能会缺少某些[可选]命令开关。测试他们。