Shell、Bash、Zsh这都是啥啊

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和bash

sh全称为Bourne Shell,来自于1977年底的Unix v7版。二进制文件位置为/bin/sh

bash全称为Bourne-Again Shell,是在1989年对sh的重写版,替代了sh。二进制文件位置为/bin/bash

现在的Linux系统以及macOS系统的shell都默认使用bash。

Zsh

Zsh即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.html
  • https://zsh.sourceforge.io/Doc/Release/Files.html

你可能感兴趣的:(bash,linux,开发语言)