Bash,Zsh和其他Linux Shell之间有什么区别?

大多数Linux发行版默认包括bash shell,但您也可以切换到另一个shell环境。 Zsh是一种特别受欢迎的替代品,还有其他Shell,如灰,短划线,鱼和tcsh。 但有什么区别,为什么有这么多?

壳做什么?

当您在命令行上登录或在Linux上启动终端窗口时,系统将启动shell程序。 Shell提供了扩展命令行环境的标准方法。 如果你喜欢,你可以换掉另一个默认shell。

第一个shell环境是Thompson Shell,在贝尔实验室开发并于1971年发布。Shell环境一直在基于这个概念,添加了各种新功能,功能和速度的改进。

例如,Bash提供了命令和文件名称完成高级脚本功能命令历史 ,可配置的颜色,命令别名,以及在1971年发布第一个shell时不可用的各种其他功能。

shell也在后台由各种系统服务使用。 Linux发行版包括许多写为shell脚本的函数。 这些脚本是通过shell环境运行的命令和其他高级shell脚本函数。

shell导致Bash:sh,csh,tsh和ksh

现代Shell最突出的祖先是BourneShell - 也被称为“sh” - 以其创建者Stephen Bourne命名,他在AT&T的贝尔实验室工作。 发布于1979年,它成为Unix中的默认命令解释器,因为它支持命令替换,管道,变量,条件测试和循环,以及其他功能。 它没有为用户提供太多的定制,并且不支持像别名,命令完成和shell函数这样的现代化的细节(虽然最后一个添加了)。

C shell或“csh”是20世纪70年代末由Bill Joy在加州大学伯克利分校开发的。 它添加了许多交互式元素,用户可以控制他们的系统,如别名(长命令的快捷方式),作业管理能力,命令历史等。 它是用C编程语言建模的,Unix操作系统本身就是这样编写的。这也意味着Bourne shell的用户必须学习C,所以他们可以在其中输入命令。 此外,csh有相当多的错误,必须由用户和创建者在很长一段时间内敲定。 人们最终将Bourne shell用于脚本,因为它更好地处理非交互式命令,但是仍然使用C shell来正常使用。

随着时间的推移,很多人修复了bug,并向C shell添加了功能,最终导致了csh的改进版本,称为“tcsh”。 但是csh在基于Unix的计算机上仍然是默认的,并且添加了一些非标准的功能。 贝尔实验室的David Korn致力于KornShell或“ksh”,它试图通过向后兼容Bourne shell的语言来改进这种情况,但增加了csh shell的许多功能。 它在1983年发布,但是根据专有许可。 它不是自由软件,直到2000年代,当它发布了各种开源许可证。

bash的诞生

用于Unix或POSIX的便携式操作系统接口是对繁忙的专有csh实现的另一个响应。 它成功创建了一个标准的命令解释(除其他外),并最终镜像了KornShell的很多功能。 与此同时,GNU项目试图创建一个免费的Unix兼容操作系统。 GNU项目开发了一个自由软件shell作为其自由操作系统的一部分,并命名为“Bourne Again Shell”或“bash”。

Bash在1989年第一次发布以来的几十年里得到了改进,但它仍然是当今大多数Linux发行版的默认shell。 它也是Apple的macOS上的默认shell,可以在Microsoft的Windows 10上安装

新壳:灰,破折号,zsh和鱼

虽然Linux社区在之后的几年里确定了Bash,但是Bash在28年前首次发布时,开发人员并没有停止创建新的shell。

Kenneth Almquist创建了一个名为Almquish shell的Bourne shell克隆,一个Shell,“ash”,或者有时只是“sh”。 它也是POSIX兼容,并成为BSD ,Unix的不同分支的默认shell。 灰壳比bash更轻量,这使它在嵌入式Linux系统中很受欢迎。 如果你有一个根植的Android手机与BusyBox安装或任何其他设备的BusyBox套件的软件 - 它使用的代码ash。

Debian开发了一个基于灰的shell环境,并称之为“dash”。 它的设计是符合POSIX的和轻量级的,所以它比Bash快,但不会有所有的功能。 Ubuntu使用dash shell作为非交互式任务的默认shell,加快shell脚本和在后台运行的其他任务。 Ubuntu仍然使用bash用于交互式shell,因此用户仍然具有全功能的交互式环境。

最流行的新shell之一是Z shell,或“zsh”。 zsh是由Paul Falstad于1990年创建的,它是一个Bourne风格的shell,它包含了bash中的功能,甚至更多。 例如,zsh具有拼写检查功能,可以监视登录/注销,某些内置编程功能(如字节码),支持语法中的科学计数,允许浮点运算和更多功能。

另一个更新的shell是2005年发布的Friendly Interactive Shell或“fish”。它有一个独特的命令行语法,旨在更容易学习,但不是从Bourne shell或C shell派生。 这是一个有趣的想法,但你通过使用鱼学习,不一定会帮助你使用bash和其他Bourne派生的shell。

你应该选择什么? (和为什么Zsh是受欢迎)

你不需要选择一个shell。 你的操作系统为你选择你的默认shell,这个选择几乎总是bash。 坐在前面的Linux发行版 - 甚至是Mac - 你几乎总是有一个bash shell环境。 Bash有很多高级功能,但你可能不会使用它们,除非你编写shell脚本。

在嵌入式Linux系统或BSD系统上,你最终会得到ash shell。 但是灰是一个基于Bourne的壳,并且很大程度上兼容bash。 使用bash的任何知识都将转移到使用灰或破折号外壳,虽然一些高级脚本功能在这个轻量级外壳中不可用。

几乎每一个你会遇到的shell都是基于Bourne的,工作方式类似 - 包括zsh。

这就是为什么zsh很受欢迎。 这个较新的shell与bash兼容,但包括更多的功能。 zsh shell提供内置的拼写校正,改进的命令行完成,充当shell插件的可加载模块,允许您在命令行上别名文件名或其他任何东西的全局别名,而不仅仅是命令,以及更多主题支持。 它像bash,但有很多附加功能,附加功能和可配置选项,你可能会喜欢,如果你在命令行上花费大量的时间。

如果你熟悉bash,你可以切换到zsh,而不学习不同的语法,你只会获得额外的功能。 如果你熟悉zsh,你可以切换到bash而不学习不同的语法 - 你只是不能访问这些功能。

Oh My ZSH ”是一个工具,可以帮助您更轻松地启用zsh插件和在预制主题之间切换,快速自定义您的zsh shell,而不花时间调整的东西。

还有其他壳。 例如,tcsh shell仍在周围,仍然是一个选项。 FreeBSD使用tsch作为其默认根shell和ash作为其默认交互式shell。 如果你定期使用C编程,tsch可能更适合你。 但是,它通常不像bash或zsh那样常用。

如何在Shell之间切换

很容易切换到一个新的shell来试试。 只需从您的Linux发行版包管理器安装shell,然后键入命令启动shell。

例如,让我们说你想在Ubuntu上尝试zsh。 您可以运行以下命令来安装并启动它:

  sudo apt install zsh

 zsh 

然后你会坐在zsh shell。 在shell中键入“ exit ”,保留它并返回到当前shell。

这只是暂时的。 每当您打开一个新的终端窗口或在命令行登录您的系统,您将看到您的默认shell。 要更改当您登录时称为登录shell的shell,您通常可以使用chsh或“Change Shell”命令。

要使用此命令,您首先需要使用which命令找到shell的完整路径。 例如,假设我们想改为zsh shell。 我们将运行以下命令:

 其中zsh 

在Ubuntu上,这告诉我们zsh二进制存储在/ usr / bin / zsh。

运行以下命令,输入您的密码,系统将提示您选择一个新的登录shell:

  chsh 

根据上面的命令,我们输入/usr/bin/zsh 然后,zsh shell将是我们的默认,直到我们运行chsh命令并将其更改回来。

Bash,Zsh和其他Linux Shell之间有什么区别?

banner-01

我们已经涵盖了关于shell脚本的主题,因为Linux几乎可以放在任何东西上。 命令行shell的多功能性是什么真正允许这一点,但什么使每个shell不同,为什么人们喜欢一个在另一个?

Shell做什么?

命令行是一个非常有趣的事情。 一旦被认为是最先进的用户界面,它已经走过腰围和钢笔的方式:回避到周边。 虽然你仍然看到他们的目的和效用,他们通常被留在一边主要是爱好者欣赏,主要是因为他们花时间来学习他们的内外。 事实上,在任何给定的操作系统中的命令行将有很多怪癖,因为容易的OS解释命令不同。 今天,这主要是Linux,OS X和Windows之间的一个问题,但在这之前是大多数计算机的问题。

blakespot2376243022_eb9edb1c77_z

(按图blakespot

Shells进入了图片,允许命令行更加标准的扩展,使其更加不显眼。 Shells添加了很多功能,如命令和文件名称完成和更高级的脚本能力,并帮助带来一些性能增强。 他们也做了很多事情来掩盖一些恼人的问题。 例如,在Unix中,您不能在遵循它们之前通过符号链接备份到目录。 总而言之,他们添加了一些功能,允许用户更快更有效地完成他们的工作,就像Linux的众多替代窗口管理器。

为什么有这么多?

sshot-4

现代Shell最突出的祖先是被称为“sh”的BourneShell - 这是以在AT&T工作的创始人Stephen Bourne命名的。 它成为默认的Unix命令解释器,因为它支持命令替换,管道,变量,条件测试和循环,以及其他功能。 这是一个编程真的与使用命令行一起的时代,这是许多人认为今天被稀释的做法。 它没有为用户提供很多自定义的空间,例如别名,命令完成和shell函数(虽然最后一个添加了)。

C shell(csh)是在UCB开发的Bill Joy,真的震撼了一下。 它添加了许多交互式元素,用户可以使用它们来控制他们的系统,如别名(长命令的快捷方式),作业管理能力,命令历史等等。 它建模的C编程语言,一个有趣的想法,因为Unix是用C编写的。它也意味着Bourne shell的用户必须学习C,以便他们可以输入命令。 此外,它有大量的错误,必须由用户和创建者敲定在很长一段时间。 人们最终将Bourne shell用于脚本,因为它更好地处理非交互式命令,但是仍然使用C shell来正常使用。

随着时间的推移,很多人修复了错误并向C shell添加了功能,最终导致了“tcsh”。 问题是,在基于分布式Unix的计算机中,csh仍然是默认的,并添加了一些添加了“非标准”的功能,创建一个非常碎片的东西(回想起来)。 然后,AT&T的David Korn在Korn shell上工作 - “ksh” - 它试图通过使用Bourne shell的语言作为基础来减轻这种情况,但是增加了所有人都习惯的所有新功能。 不幸的是,许多人不是免费的。

sshot-1

对繁忙的专有csh实现的另一个响应是用于Unix或POSIX的便携式操作系统接口。 这是一个成功的尝试,创建一个标准的命令解释(除其他事项外),并最终镜像了Korn shell的很多功能。 同时,GNU项目正在进行,并试图创建一个完全Unix兼容的自由操作系统。 它开发了一个shell为自己的目的:Bourne Again外壳,通过bash在一起的特征从sh,csh和ksh形成。 结果,如回顾所见,令人印象深刻。

Kenneth Almquist创建了一个Bourne shell克隆 - “ash” - 这是POSIX兼容的,并将成为BSD中的默认shell,这是Unix的一个不同的分支/克隆。 它的独特之处在于它非常轻量级,所以它在嵌入式Linux系统中变得非常受欢迎。 如果你有一个根植的Android手机安装了BusyBox,它使用的代码ash。 Debian开发了一个基于灰色的克隆,称为“dash”。

othree4240326365_3ca467f0c9_o

(按图othree

其中一个最突出的“新”shell是“zsh”,由Paul Falstad于1990年开发的。它是一个Bourne式shell,它使用bash和previous shell的特性,并添加了更多的特性。 它具有拼写检查功能,可以监视登录/注销,一些内置的编程特性,如字节码,支持语法的科学记数法,允许浮点运算,然后一些。 另一个是友好的交互式壳,鱼,其重点是容易记住和使用的命令语法。

总的来说,大多数shell被创建为以前shell的克隆,增加了功能,修复了bug,并绕过了许可问题和费用。 值得注意的例外是原始的Bourne shell和C shell,以及rc shell和ash,它们不完全是原始的,但肯定有一些niche-utility。

我应该使用什么?

sshot-2

有了这么多的外,你会认为很难选择使用哪个shell,但实际上并不是很困难。 由于这么多是基于Bourne shell,基本的东西在大多数shell之间将是相同的。

Bash是最广泛使用的shell,并且是大多数Linux发行版的默认值。 它真的很强大,有很多功能,其中大部分你可能不会使用,除非你编程,所以它是很安全的说,你可以坚持这一个。 因为它是如此常见,它是完美的脚本的东西,将被用于不同的平台。 如果你想尝试不同的东西,更方便用户,你可以试试鱼。

如果你修改嵌入式Linux系统很多,喜欢把Linux放在可笑的东西,如你的Nintendo DS,或者你真的喜欢Debian,那么ash / dash可能是最适合你的。 再次,它的工作原理大多是像其他人,但由于它是一种裸骨骼和轻量级,你会发现一些更复杂的功能缺失。

renrutal135123038_5d960b60c3_z

(按图renrutal

如果你计划在编程或学习在命令行上开发,那么你必须有点更挑剔。 Bash是一个很好的选择,但我知道足够的人已经切换到Zsh的额外。 我想这真的取决于你的项目将获得多么复杂和什么类型的功能,你喜欢从你的shell。 有些人仍然坚持tcsh,因为他们知道和使用C定期,它更容易为他们。 奇怪的是,如果你不确定选择哪个shell,你可能不会编程太多,所以尝试选择一些将与你想学习的东西一致,并对该领域的其他人使用的一些研究。

您可以使用Ubuntu上的软件中心或首选的软件包管理器轻松地安装和删除不同的shell。 shell位于/ bin /目录中,只要运行现代Linux发行版,就可以轻松更改默认设置。 只需输入以下命令:

chsh

系统会提示您输入密码,然后您可以通过输入其路径更改为其他shell。

sshot-9

在方括号中,您会看到目前的预设值,如果您想要保留原状,只要按一下Enter键即可。


你坚持bash吗? 你有另一个最喜欢的壳吗? 你最常用的功能是什么? 请在评论中告诉我们您的想法!

赞 (0)
分享到:更多 ()