Zsh和Bash都是我们常用的Shell,那先搞明白啥是shell吧。
Shell作为一个单词,他是“壳”的意思,蛋壳坚果壳。
之所以叫壳,是为了和计算机的“核”来区分,用它表示“为使用者提供的操作界面”。
所以这个命名其实很形象,翻译成中文,直译过来叫“壳层”。个人认为这个叫法很奇怪,意译貌似也没有什么好的词汇来匹配。就还是叫shell吧。
维基百科给的定义是:
In computing, a shell is a computer program which exposes an operating system’s services to a human user or other programs. In general, operating system shells use either a command-line interface (CLI) or graphical user interface (GUI), depending on a computer’s role and particular operation. It is named a shell because it is the outermost layer around the operating system.
我们由此可以知道,Shell也会泛指所有为用户提供操作界面的程序,分为两类:命令行(CLI)与图形界面(GUI)。
但是通常情况下,我们在聊shell的时候,其实都是聊的Linux的命令行界面。
sh和bashsh全称为Bourne Shell,来自于1977年底的Unix v7版。二进制文件位置为/bin/sh。
bash全称为Bourne-Again Shell,是在1989年对sh的重写版,替代了sh。二进制文件位置为/bin/bash。
现在的Linux系统以及macOS系统的shell都默认使用bash。
ZshZsh即Z shell,是一款可用作交互式登录的shell及脚本编写的命令解释器。Zsh对Bourne shell做出了大量改进,同时加入了Bash、ksh及tcsh的某些功能。
所以说Zsh也是一个Shell,就是会比bash能好用很多。所以这也是2019年起,macOS的默认Shell从Bash改为Zsh的原因?
Zsh好在哪里?我认为提高了交互的效率,以及丰富的插件。比如:
强大的补全功能
使用tab键可以补全命令,补全命令后的参数等,还自带命令的解释kill命令还可以补全进程pid 跳转不用cd,直接输入路径历史命令,敲出命令的前几个字母,按上下箭头就可以查看这个前缀的历史命令完善的插件机制以及丰富的生态,和oh my zsh一起食用更佳 查看本地Shell的命令
查看当前Linux的全部Shell:cat /etc/shells查看当前使用的Shell:echo $SHELL或者echo $0切换默认的Shell:chsh -s [shell的二进制文件路径],之后要重新登陆Shell才能生效哈。例如:
切换为Bash: chsh -s /bin/bash
切换为Zsh:chsh -s /bin/zsh Shell的各种配置文件
无论是Bash还是Zsh,都是有各自的配置文件来完成自己的工作的。这些配置文件都是隐藏文件,也就是说,用户不需要知道这些配置。但是在这里也要给大家总结一下都有哪些配置文件,也许以后用的上呢。
Bash的配置文件/etc/profile:为系统的每个用户设置环境信息,当用户第一次登录时会执行该文件里的命令。默认会直接调用/etc/bashrc。该文件的改动需要重启才能生效。/etc/bashrc:为每一个运行bash shell的用户执行此文件。当bash shell被打开时,会读取并执行该文件中的命令。所以修改该文件后,重新打开Shell即可生效。~/.bash_profile:和/etc/profile类似,但是只对当前用户生效。~/.bashrc:和/etc/bashrc类似,但是只对当前用户生效。~/.bash_logout:当每次退出bash shell时,执行该文件。~/.bash_history:保存了历史命令。在Shell为Bash时,每次敲击命令时,都会保存在这个文件里 Zsh的配置文件
.zshenv:存放的环境变量配置项在任何场景下都能被读取,这里通常把$PATH等变量写在这里,这样无论是在交互shell,或者运行程序都会读取此文件。个人理解对标Bash的profile。.zshrc:在交互式shell中会读取并执行该文件,包含设置别名、函数、选项、键绑定等命令。对标bashrc。.zlogin:在login shell的时候读取。.zprofile:和.zlogin类似,但是是在.zshrc之前加载。.zlogout:退出终端的时候读取,用于做一些清理工作。对标bash_logout。.zsh_history:保存了历史命令。在Shell为Zsh时,每次敲击命令时,都会保存在这个文件里。
加载顺序:zshenv、zprofile、zshrc、zlogin
参考Zsh官方文档:
https://zsh.sourceforge.io/Intro/intro_3.htmlhttps://zsh.sourceforge.io/Doc/Release/Files.html



