一、何为shell(转自:shell十三问)
shell是什么东西之前,不放让我们重新审视使用者和计算机系统的关系。我们知道计算机的运作不能离开硬件,但使用者却无法直接操作硬件,硬件的驱动只能通过一种称为“操作系统(OS)"的软件来管控。事实上,我们每天所谈的"linux",严格来说是一个操作系统,我们称之为"内核(kernel)".
然而,从使用者的角度来看,使用者没办法直接操作一个kernel,而是通过kernel的"外壳"程序,也就是所谓的shell,来与kernel沟通。这也正是kernel跟shell的形象命名的关系。
从技术的角度来说,shell是一个使用者与系统的交互界面(interface),只能让使用者通过命令行(command line)来使用系统来完成工作。因此,shell最简单的定义就是--命令解释器(Command Interpreter):
·将使用者的命令翻译成kernel来处理;
·同时,将kernel的处理结果翻译给使用者。
每次我们完成系统登入,我们就取得一个交互模式的shell,也称之为login shell或者primary shell。若从进程角度来说,我们在shell所下达的命令,均是shell所产生的子进程。这种现象,我们暂可称之为fork。
如果执行shell脚本的话,脚本中命令则是由另一个非交互模式的子shell(sub shell)来执行的。也就是primary shell产生的sub shell进程,而该sub shell进程再产生script中所有命令的进程。
这里我们必须知道:kernel与shell是不同的两套软件,而且都是可以被替换的:
·不同的OS使用不同的kernel
·同一个kernel上也可以使用不同的shell;
在linux的预设系统中,通常可以找到好几种不同的shell,且通常会被纪录在如下文件中:
/etc/shells
不同的shell有着不同的功能,且彼此各异,或者说“大同小异”。常见的shell主要分为两大主流:
1.sh:
burne shell(sh)
burne again shell(bash)
2.csh:
c shell(csh)
tc shell(tcsh)
大部分的linux操作刺痛的预设shell都是bash,其原因大致如下两种:
自由软件
功能强大的bash是gun project最成功的产品之一,自推出依赖受广大Unix用户的喜爱,且也逐渐成为不少组织的系统标准。
原文链接:https://github.com/ftylove/13_questions_of_shell.git
页:
[1]