目录
学习 Shell 首先需要知道 Shell 的用途,这一篇文章就给大家介绍下 Shell 解析器。
一、什么是解析器 ?
Shell 是 Linux 操作系统下的命令行解析器,是用户和 Linux 内核交互的工具,其实 Shell 担任着类似翻译官的角色,如下图所示(纯手工制作):
![](https://img-blog.csdnimg.cn/20210116161618352.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwNzQxNDk=,size_16,color_FFFFFF,t_70)
从上图可以看到,解析器起名为Shell(外壳)也是有原因的,整个操作系统其实是一层层包起来的,是一层层的抽象,抽象程度越高越方便用户操作,这就类似于编程语言,汇编程序更接近于底层,再就是C语言抽象程度比汇编语言高,Java语言抽象程度更高。
那么,第一个 Unix Shell 是谁发明的呢?
肯·汤普逊在写第一版 UNIX 的时候开发了 Shell,仿效 Multics 上的 Shell 所实现出来的。
二、Linux 中都有哪些解析器 ?
Linux 解析器有如下几种:
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
[root@localhost ~]#
在 CentOS 7 中默认使用 /bin/bash,如下所示:
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@localhost ~]# echo $SHELL
/bin/bash
[root@localhost ~]#
2.1 /bin/bash 和 /usr/bin/bash
Bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括Linux与Mac OS X v10.4起至macOS Mojave都将它作为默认shell,而自macOS Catalina,默认Shell以zsh取代。 ------ 维基百科
2.2 /bin/sh 和 /usr/bin/sh
如下所示,/bin/sh 和 /usr/bin/sh 是 bash 的一个软连接。
[root@localhost ~]# ls -l /bin/sh
lrwxrwxrwx. 1 root root 4 9月 24 01:40 /bin/sh -> bash
[root@localhost ~]# ls -l /usr/bin/sh
lrwxrwxrwx. 1 root root 4 9月 24 01:40 /usr/bin/sh -> bash
[root@localhost ~]#
2.3 /bin/tcsh
tcsh 是一个向下兼容c shell的Unix shell。它本质上是为c shell增加命令补完,命令编辑等其他功能。 目前作为FreeBSD和其延伸发行版的默认shell。 ------ 维基百科
2.4 /bin/csh
C shell 是Unix shell的一种,由比尔·乔伊在BSD系统上开发。C shell脱胎于Unix第六版的/bin/sh,也是Bourne shell的前身。这种shell的语法类似于C语言,与Bourne shell相比,C shell有不少特别的功能,比如aliases(别名)、command history(命令的历史)。目前C shell已不再被广泛使用,后继者包括Tenex C shell(tcsh)、Korn shell(ksh)、GNU Bourne-Again shell(bash)。 ------ 维基百科
三、总结
Shell 是用户和 Linux 内核之间交互的桥梁,Shell 也是一门脚本编程语言。点击关注后面还会继续更新更多 Shell 必知必会知识点~