Chinaunix首页 | 论坛 | 博客
  • 博客访问: 369244
  • 博文数量: 83
  • 博客积分: 5322
  • 博客等级: 中校
  • 技术积分: 1057
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-11 11:27
个人简介

爱生活,爱阅读

文章分类

全部博文(83)

文章存档

2015年(1)

2013年(1)

2012年(80)

2011年(1)

分类: LINUX

2012-02-29 14:37:59


--------------------------------------------------------------------------------------------------------------------------------

--------------------------------------收集于网络:网中人---shell 十三问》----------------------------------

--------------------------------------------------------------------------------------------------------------------------------

在介绍 shell 是甚么东西之前,不妨让我们重新检视使用者与计算机系统的关系。    

我们知道计算机的运作不能离开硬件,但使用者却无法直接对硬件作驱动,硬件的驱动只能透过一个称为"操作系统(Operating System)"的软件来控管。事实上,我们每天所谈的 linux ,严格来说只是一个操作系统,我们称之为"核心(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 script)的话,脚本中的命令则是由另外一个非互动模式的子shell (sub shell)来执行的。也就是 primary shell 产生 sub shell 的进程,sub shell 再产生 script 中所有命令的进程。

 

实验:
     建立一个普通
shell脚本,循环(while :)查询当前进程信息(例如:ps -ef | grep sh),并于后台运行。
    在前台执行某一个
shell命令(例如find)。
可以验证:
    shell脚本中命令均为primary shell产生的子shell fork 出的进程负责shell脚本中命令的运行;
    而前台运行的
shell命令则是当前shell(
primary shell) fork 出来的进程(通过查看父进程号)。

 

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

        * 不同的操作系统使用不同的 kernel

        * 而在同一个 kernel 之上,也可使用不同的 shell

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

 /etc/shells

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

        sh

                bourne shell (sh)

                bourne again shell (bash)

        csh

                c shell (csh)

                tc shell (tcsh)

                korn shell (ksh)

       

大部份的 linux 系统的预设 shell 都是 bash ,其原因大致如下两点:

        * 自由软件

        * 功能强大

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

阅读(1220) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~