在Linux操作系统中,用户没有办法跟内核直接交流,内核能够控制硬件的操作,并且向外提供系统调用接口,而在系统调用之上,可以有公用函数库,可以直接被应用程序调用,同时也可以有我们的shell。
shell的概念很广泛,它并不是Kernel的一部分,shell本身是一个用C程序编写的程序,它可以作为一种命令语言或一种程序设计语言,是一种脚本语言,根据语法和执行方面不同,其解释器也不同,常用的有bash、sh、csh、ksh等,习惯上将它们成为一种shell,因此,我们平时说Linux中有多少种shell其实指的就是其中存在几种shell脚本解释器。我们需要了解的是,用户可以通过shell来向Kernel输入命令,然后shell解释器会将我们输入的命令与内核通信,让内核理解我们需要做些什么。
我们的Linux系统中存在多种shell,我们可以在/etc/shells文件中查看到系统中可用的shell:
那么我们使用的shell是哪一个呢?其实用户在登录的时候,系统会给我们安排一个shell来工作,是如何安排的呢?是根据/etc/passwd中已经设置好的每个用户的默认shell: