1. Bash简介
Bash 是 GNU 计划中的一款自由软件 Unix shell,内置了大量的命令行处理工具。它是目前大多数 Linux 系统默认的 shell,由于它的灵活性和强大的脚本能力,更加适合于管理员和开发人员等需要处理大量文本和文件的人员使用。Bash 是对 Bourne shell 的扩展,有着更加友好的命令补全及历史记录等。
2. Bash的分支:
2.1 Dash
Dash 是 Bash 的一个轻量级分支,它的目标是尽可能地保留 Bourne shell 单纯、小型且最少的功能。因此,它常被用于启动性能方面的考虑,因为相比于 Bash,Dash 启动更快、消耗的资源更少,而且在启动脚本方面也具有更好的性能。
# 启动时间对比
time /bin/bash -c "echo hello"
real 0m0.042s
user 0m0.008s
sys 0m0.032s
time /bin/dash -c "echo hello"
real 0m0.022s
user 0m0.008s
sys 0m0.012s
针对服务器等高负载的环境,应用 Dash 更为适合。然而,值得注意的是,虽然 Dash 与 Bash 语法相似,但它不是完全兼容 Bash,因此在使用 Dash 时需要注意是否使用了 Bash 特有的语法。
2.2 Zsh
Zsh,全称Z Shell,是一个类Unix操作系统下的命令行解释器,它扩展了 Bash 的功能并提供了更多的特性和快捷方式。Zsh 除了继承了 Bash 的优点外,还包含其它更多的特性,例如自动补全功能、目录堆栈、插件支持、主题定制等丰富的功能,提供了比 Bash 更好的用户体验。
为了扩展功能,Zsh 引入了插件系统,可以通过配置启用更多的功能模块,从而让开发者在命令行环境下编写更加高效的代码。
2.3 Fish
Fish,全称 Friendly Interactive Shell,是一款用户友好的、功能强大的命令行 shell。它的设计借鉴了很多 GUI 工具的思想,比如命令自动补全、语法高亮、易于导航的历史记录等。Fish 还支持完整的 UTF-8,使得支持 utf-8 的语言更易于使用。
与 Bash 的变量设置类似,Fish 支持将别名、函数和变量属性全部存储为一种名为 universal variables(全局变量)的东西,从而更加方便地管理变量。它还支持在 shell 窗口中总是显示当前目录,并且可以通过 tab 键切换到其他窗口。这些特性使得 Fish 成为一款非常流行的替代 Bash 的 shell。
3. 如何改变使用的 shell
默认情况下,在大多数 Linux 发行版中,Bash 是默认的 shell。如果想要使用 Dash、Zsh或者 Fish,需要经过一些配置。以下是具体步骤:
3.1 切换到Dash
要使用 Dash 替换掉 Bash,需要将默认的 shell 更改为 Dash,使用以下命令可在 Debian 系发行版中切换为 Dash:
sudo dpkg-reconfigure dash
这会将默认的 shell 修改为 Dash,它也可以通过以下方式修改回 Bash:
sudo dpkg-reconfigure bash
3.2 切换到Zsh
为了使用 Zsh 替换掉 Bash,需要在系统中安装 Zsh。在 Debian 系发行版中,这可以通过以下命令来完成:
sudo apt-get install zsh
然后,通过以下命令切换默认 shell:
chsh -s $(which zsh)
执行上述命令后,需要重新登录终端以使切换生效。
3.3 切换到Fish
Fish 可以下载二进制文件或通过源码进行安装。可以在官网的下载页面上找到针对自己系统的版本,下载对应的二进制文件后,按照以下步骤将 fish 设置为默认 shell:
# 安装 fish
sudo apt-add-repository ppa:fish-shell/release-3
sudo apt-get update
sudo apt-get install fish
# 将 Fish 设置为默认 shell
chsh -s /usr/bin/fish
上述命令会将 Fish 设置为默认 shell。
4. 其它替代 Bash 的 shell
Bash、Dash、Zsh 和 Fish 是最流行的替代 Bash 的 shell,但并不是仅有的选择。在 Linux 社区还有其它的 shell,例如 Tcsh、Ksh 和 Csh 等。这些 shell 差异较大,具体选择可以根据实际需求来决定。
总之,选择 Linux 下的各种 shell,可以根据个人的工作习惯或需求,来看哪一种更符合自己的需求。可以尝试多种 shell,选择一款最符合自己的工作和使用习惯的 shell,从而更加高效地使用 Linux 系统。