Chinaunix首页 | 论坛 | 博客
  • 博客访问: 23330
  • 博文数量: 6
  • 博客积分: 240
  • 博客等级: 二等列兵
  • 技术积分: 101
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-06 13:33
文章分类

全部博文(6)

文章存档

2011年(1)

2009年(5)

我的朋友

分类: LINUX

2009-08-08 17:16:46

     在前面的学习中,我们认识了Linux下的一些命令,能够使用命令在Linux下完成任务。我们输入命令,操作系统执行命令并输出结果。通过命令,我们控制计算机完成一件又一件任务。那么Linux是如何解析命令、执行命令并返回结果的呢?接下来我们将学习相关知识并会接触到一个如雷贯耳的名字——Shell。

什么是Shell
     在解释什么是Shell之前,我们先来重新检视一下用户与计算机系统的关系。我们知道计算机的运作不能离开硬件,在计算机刚出来时用户通过命令直接控制硬件完成任务。但是这样不安全也特麻烦,于是就在硬件的上面加了一层,用户就不需要直接跟硬件打交道了。这一层就叫操作系统也就是所谓的Kernel,比如Linux、Windows、FreeBSD等等。但是Kernel是非常脆弱的,如果用户输入某个无效或无害的命令导致Kernel不能运行,那么计算机也就无法工作了。于是人们在Kernel上又加了一层,叫做Shell。如图1所示。Shell翻译过来就是壳的意思,一个是核,一个是壳,壳包裹着核,Shell把Kernel包裹在里面。

 
图1、硬件、内核与用户的关系
         Shell就是一个命令解释器,一个程序,一个介于用户和操作系统内核间的接口。从图1可以看出,用户和Linux操作系统内核之间的对话必须通过Shell。那么这个关系是怎么建立起来的呢?

       当我们启动一台基于Linux的计算机时,Linux的内核就会被调
入计算机的内存里,一旦内核调入内存,它就准备执行用户的请求。然而用户首先得登录,然后才能发出请求。内核也必须知道用户是谁以及如何和他通话。为了做到这一点,内核调用两个特殊的程序:getty和login。getty显示一个登录提示,接着等待用户名和密码的输入。当getty取得用户输入时,它便调用login程序。login程序建立用户身份并验证用户密码,如果密码不正确则返回getty。如果正确,login调用password文件里用户条目中所记录的程序并把控制交给它。到此为止,计算机就准备好为用户服务了。下图是登陆Linux后,屏幕上出现的提示符:
 
小提示:在 /etc/passwd 文件中,每个用户对应的最后一项,就是用户登陆之后,要执行的程序。

Shell的分类
      Shell基本上可以分为两大类:图形界面Shell和命令行式Shell。图形界面Shell应用最广泛的就是Windows Explorer,Linux下图形界面Shell有GNOME、X windows和CDE等。传统意义上的Shell指的是命令行式Shell,以后如不特别指明,Shell是指命令行式Shell。在Unix环境下,使用最广泛的Shell是Bourne Shell、C Shell 、Korn Shell和Bash Shell。

      Bourne Shell也称sh,是Version 7 Unix默认的Unix Shell。C Shell是由柏克莱大学的Bill Joy 设计依附于BSD中的Shell,由于这个Shell的语法类似于C语言,所以得名C Shell,简称csh。Korn Shell是由贝尔实验室的David Korn早期编写,它完全向上兼容Bourne Shell并包含了许多C Shell的特性,简称ksh。

      Bash Shell是Linux默认的Shell,是与sh兼容并且根据一些使用者的需求而加强的Shell。作为GNU计划中重要的程序之一,Bash Shell具有以下特点:命令记忆功能、命令补全功能、命令别名设定功能、工作控制,背景前景控制和程序脚本。若想更深的学习Bash Shell请点击

Shell的功能
     Shell的种类这么多,我们到底选择哪种Shell好呢?其实你选择任何一种Shell都可以,因为Shell都有一个共同的目标:为用户提供一个界面。为了达到这个目标,所有的Shell都具有以下的基本功能:
         运行程序
         命令行解释
         输入输出重定向
         管道连接
         变量维护
         环境控制
         Shell编程
     接下来我们就会学习这些基本功能并且自己动手实现部分基本功能,自己动手做一个简单的Shell。


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