离线下载
PDF版 ePub版

Zhongbo Wang · 更新于 2018-11-28 11:00:43

何为 shell?

shell是什么东西之前,不妨让我们重新审视使用者计算机系统的关系:

我们知道计算机的运作不能离开硬件,但使用者却无法直接操作硬件, 硬件的驱动只能通过一种称为“操作系统(OSOpertating System)”的软件来管控。 事实上,我们每天所谈的“linux”,严格来说只是一个操作系统(OS), 我们称之为“内核(kernel)”。

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

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

  • 将使用者的命令翻译给 kernel 来处理;
  • 同时,将 kernel 的处理结果翻译给使用者。

每次当我们完成系统登入(login), 我们就取得一个交互模式的 shell, 也称之为login shell 或者 primary shell

若从进程(process)的角度来说,我们在shell所下达的命令,均是 shell 所产生的子进程。 这种现象,我暂可称之为fork

如果是执行shell脚本(shell script)的话,脚本中命令则是由另一个非交互模式的 子shell(sub shell)来执行的。 也就是 primary shell 产生 sub shell 的进程,而该 sub shell 进程再产生 script 中所有命令的进程。 (关于进程,我们日后有机会在补充)

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

  • 不同的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)
    • korn shell (ksh) (FIXME)

大部分的 Linux 操作系统的预设 shell 都是bash,其原因大致如下两种:

  • 自由软件
  • 功能强大

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

上一篇: 关于 下一篇: shell and Carria...