在介绍shell是什么东西之前,不妨让我们重新检视使用者与电脑系统的关系。我们知道电脑的运作不能离开硬件,但使用者却无法直接对硬件做驱动,硬件的驱动只能通过一个称为“操作系统(Operating System)”的软件来控制。事实上,我们每天所谈的linux,严格来说只是一个操作系统,我们称之为“核心(kernel)”。

然而,从使用者的角度来说,使用者也没办法直接操作kernel,而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通,这也正是kernel跟shell的形象命名关系。

从技术角度来说,shell是一个使用者与系统的互动界面(interface),主要是让使用者通过命令行(command line)来使用系统以完成工作。因此,shell最简单的定义就是——命令解释器(Command Interpreter):

*将使用者的命令翻译给核心处理
*同时,将核心的处理结果翻译给使用者

每次当我们完成系统登入(log in),我们就取得一个互动模式的shell,也称为login shell或primary shell。若从进程(process)角度来说,我们在shell所下达的命令,均是shell所产生的子进程。这现象,我们暂可称之为fork。

如果是执行脚本(shell script)的话,脚本中的命令则是有另外一个非互动模式的子shell(sub shell)来执行的。也就是primary shell产生sub shell的进程,sub shell再产生script中所有命令的进程。

这里,我们必须知道:kernel与shell是不同的两套软件,而且都是可以被替换的:

*不同的作业系统使用不同的kernel
*而在同一个kernel之上,也可以使用不同的shell。

在linux的预设系统中,通常都可以找到好几种不同的shell,且通常会被列于如下的文件里:

/etc/shells

不同的shell有着不同的功能,且也彼此各异,或说“大同小异”。常见的shell主要分为两大主流:

sh:
	Burne shell (sh)
	Burne again shell (bash)
csh:
	C shell (csh)
	Tc shell (tcsh)
	Korn shell (ksh)

大部分的Linux系统的预设shell是bash,其原因大致如下面两点:

*自由软件
*功能强大

Bash 是gnu project最成功的产品之一,自推出以来深受广大Unix用户喜爱,且也逐渐成为不少组织的系统标准。

转载请注明:知识蚂蚁 » shell十三问?(简体中文版)第1问:为何叫做shell?

我来说说

(便于我们更好的交流)

有不明白的地方欢迎留言哦~
取消