shell十三问之1: 何为shell?

本文深入探讨了Shell的概念及其在用户与操作系统之间扮演的角色。解释了Shell作为命令解释器的功能,如何通过命令行界面使用户能够操作系统,并介绍了不同类型的Shell,如bash、csh等,以及它们在Linux系统中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

shell十三问之1: 何为shell?


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

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

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

从技术的角度来说,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用户的喜爱,
且也逐渐成为不少组织的系统标准。

original link: https://github.com/wzb56/13_questions_of_shell/blob/master/1.%E4%BD%95%E4%B8%BAshell.md

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值