Linux Shell的设计与实现文献综述

Linux Shell的设计与实现文献综述

ID:479929

大小:55.50 KB

页数:6页

时间:2017-08-09

上传者:U-944
Linux Shell的设计与实现文献综述_第1页
Linux Shell的设计与实现文献综述_第2页
Linux Shell的设计与实现文献综述_第3页
Linux Shell的设计与实现文献综述_第4页
Linux Shell的设计与实现文献综述_第5页
资源描述:

《Linux Shell的设计与实现文献综述》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

文献综述LinuxShell的设计与实现   一、前言部分写作目的:介绍了在Linux系统背景下对Shell相关知识的了解,并且介绍了Shell相关的外部程序命令及管道和输入输出重定向功能,熟悉主流Shell的应用,以加深对Shell这方面知识的理解,为此类程序的开发提供一定的启示性和指导性。相关概念:Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称[1]。shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应[2]。实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果[3]。管道是Linux支持的最初UnixIPC形式之一,具有以下特点:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在于内存中。一个进程向管道中写的内容被管道另一端的进程读出,写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。执行一个shell 命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中[4]。一、主题部分追溯到Unix诞生的那个年代,当时还没有现在流行的"个人计算机"。被称为计算机的机器,还是吞吐磁带与磁存储器的庞然大物。DEC公司(现在的Compaq)推出的PDP-11,体积小(被称为mini)而且价格低,在大学中引起了巨大的反响,很多学校直到那时才买得起一台计算机(PDP-11物美价廉,只有10000$)。这些机器的操作系统由汇编语言、机器语言写成,所以运行起来效率很高,但都无法移植。每家计算机公司都给自己的机器配上独有的操作系统,然后再销售。这种笨拙的做法很快就被人们意识到了,于是就开始兴建一个可以在不同品牌机器上运行的操作系统。1969年,KenThompson开始写后来成为Unix的第一行代码。其实,DennisRitchie为这个新的操作系统设计了一种新的编程语言--C语言后,事情才真正开始。虽然Unix的效率不及原来的操作系统,但有三个突出的优点:可以任意移植到其他机器,其中的C语言大大简化了编程,而且这些都免费的。很快,全美国的大学都忙着开始为机器安装Unix[5]。1.终端(Terminals)Unix是可以在许多种机器上运行的操作系统,但人们又如何使用这些机器呢?他们是通过哑终端来连接到这些机器,也就是用键盘、显示器及足够的电子元件组成的机器与中央计算机相连。在这些终端上,用户可以敲字符(teletype),这就是字符串'tty'表示终端设备文件,和'getty'命令的名称来历。用户可能会问,现在这些东西都在哪儿。这些终端的厂家无法达成一项最终标准,这导致每种牌子的终端都有各自的键盘布局、各自的在屏幕上显示字符的方法、发送或接收什么信号表示什么字符、控制代码等等。 为了避免这些混乱,就创建了一个含有所有不同终端特性的文件,这就是'termcap'。文件存储路径是'/etc/termcap'。Linux终端大多数用'vt100'或'linux'作为终端类型。1.xterms在八十年代初期,产生了一个Unix的图形子系统theXWindowSystem。九十年代早期,为了更好地实现基于Intel的Unix类系统上(如FreeBSD、NetBSD、Linux)的应用,产生了一个系统分支XFree86。XWindow中一个很大的好处是可以运行多个虚拟终端。甚至在XWindow下就有这么个应用程序'xterm'。用户将发现'xterm'和'virtualterminal'在很多情况下都是一样的。有的地方说'打开一个xterm',其实用户不是非要用'xterm'程序,其他的终端模拟器(terminalemulator),如rxvt、konsole、aterm、eterm、wterm等等,一样有效。终端模拟器(又称为虚拟终端)通过伪tty设备pty与系统相连,并且使用自己的显示标准xterm。这导致不同的终端模拟器可能在一些按键或程序上存在细小的差别,这取决于模拟器多大程度上遵守了'xterm'的显示标准[6]。2.Shell标准的UNIXshell是V7(AT&T的第七版)UNIX,在1979年底被提出,且以它的创造者StephenBourne来命名。Bourneshell是以Algol这种语言为基础来设计,主要被用来做自动化系统管理工作。虽然Bourneshell以简单和速度而受欢迎,但它缺少许多交谈性使用的特色,例如历程、别名和工作控制。Cshell是在加州大学柏克来分校于70年代末期发展而成,而以2BSDUNIX的部分发行。这个shell主要是由BillJoy写成,提供了一些在标准Bourneshell所看不到的额外特色。Cshell是以C程序语言作为基础,且它被用来当程序语言时,能共享类似的语法。它也提供在交谈式运用上的改进,例如命令列历程、别名和工作控制。因为Cshell是在大型机器上设计出来,且增加了一些额外功能,所以Cshell有在小型机器上跑得较慢,即使在大型机器上跟Bourneshell比起来也显得缓慢[7,8]。有了Bourneshell和Cshell之后,UNIX使用者就有了选择,且争论那一个shell较好。AT&T的DavidKorn在80年代中期发明了Kornshell,在1986年发行且在1988年成为正式的部分SVR4UNIX。Kornshell实际上是Bourneshell的超集,且不只可在UNIX系统上执行,同时也可在OS/2、VMS、和DOS上执行。它提供了和Bourneshell向上兼容的能力,且增加了许多在Cshell上受欢迎的特色,更增加了速度和效率。Kornshell已历经许多修正版,要找寻用户使用的是那一个版本可在ksh提示符号下按Ctrl-v键。 在大部份的UNIX系统中,三种著名且广被支持的shell是Bourneshell(AT&Tshell,在Linux下是BASH)、Cshell(Berkeleyshell,在Linux下是TCSH)和Kornshell(Bourneshell的超集)。这三种shell在交互(interactive)模式下的表现相当类似,但作为命令文件语言时,在语法和执行效率上就有些不同了。Bourneshell是标准的UNIXshell,以前常被用来做为管理系统之用。大部份的系统管理命令文件,例如rcstart、stop与shutdown都是Bourneshell的命令,且在单用户模式(singleusermode)下以root登录时它常被系统管理者使用。Bourneshell是由AT&T发展的,以简洁、快速著名。Bourneshell提示符号的默认值是$。Cshell是柏克莱大学(Berkeley)所开发的,且加入了一些新特性,如命令列历程(history)、别名(alias)、内建算术、文件名完成(filenamecompletion)和作业控制(jobcontrol)。对于常在交互模式下执行shell的使用者而言,他们较喜爱使用Cshell;但对于系统管理者而言,则较偏好以Bourneshell来做命令,因为Bourneshell命令比Cshell命令来的简单及快速。Cshell提示符号的默认值是%。Kornshell是Bourneshell的超集(superset),由AT&T的DavidKorn所开发。它增加了一些特色,比Cshell更为先进。Kornshell的特色包括了可编辑的历程、别名、函式、正规表达式万用字符(regularexpressionwildcard)、内建算术、作业控制(jobcontrol)、协作处理(coprocessing)和特殊的纠错功能。Bourneshell几乎和Kornshell完全向上兼容(upwardcompatible),所以在Bourneshell下开发的程序仍能在Kornshell上执行。Kornshell提示符号的默认值也是$。在Linux系统使用的Kornshell叫做pdksh,它是指PublicDomainKornShell。除了执行效率稍差外,Kornshell在许多方面都比Bourneshell为佳;但是,若将Kornshell与Cshell相比就很困难,因为二者在许多方面都各有所长,就效率和容易使用上看,Kornshell是优于Cshell,相信许多使用者对于CShell的执行效率都有负面的印象。在shell的语法方面,Kornshell是比较接近一般程序语言,而且它具有子程序的功能及提供较多的资料型态。至于Bourneshell,它所拥有的资料型态是三种shell中最少的,仅提供字符串变量和布尔型态。在整体考量下Kornshell是三者中表现最佳者,其次为Cshell,最后才是Bourneshell,但是在实际使用中仍有其它应列入考虑的因素,如速度是最重要的选择时,很可能应该采用Bourneshell,因它是最基本的shell,执行的速度最快。 一、总结部分C语言是国际上广泛使用的计算机高级语言。C语言最初用于描述和实现UNIX系统,后来逐渐被广大程序员所接受,成为最后欢迎的编程语言。Linux作为一个操作系统,一个重要的功能就是要支持用户编程:C语言作为当前使用最广泛的编程语言,又具有多平台、移植性好的特点,因此,他们很快形成了完美的结合,为用户提供了一个强大的编程环境。C语言主要具有以下特点。1.两重性C语言既可以像汇编语言一样对位、字节、地址以及硬件进行操作,又具有一般高级语言的基本结构和语句。2.结构化结构化语言的一个显著特点是所开发的程序可以实现模块化。模块化是指程序的各个部分除了必要的信息交流外相对独立,因此各个部分可以单独开发和测试,提高开发效率,所开发的软件也易于维护。3.与Linux紧密结合Linux操作系统本身是由C语言开发的,在Linux上用C语言开发的程序运行效率很高,可以实现无缝结合。4.可移植性好用C语言编写的程序基本上不用作任何修改,就可以在不同的硬件平台和操作系统上运行。通过在UNIX系统上使用C进行编程来设计和实现shell,可以充分了解Linux操作系统的shell执行方式,以及相关命令的执行过程,学习并掌握LinuxC语言。本文较为详细地阐述了Linux系统及Shell等方面的知识,回顾历史,立足现实,展望未来。今后随着信息技术的发展和Linux系统应用领域的逐步增加,用户必须了解Linux系统,而Shell是介于使用者和Linux操作系统之核心程序(kernel)间的一个接口,用户要彻底了解Linux系统,首先要充分理解Shell的功能和熟练操作命令及其功能。四、参考文献[1]刘爽.LinuxShell的基本应用[J].中文信息,2002,(02). [2]卢军.Linux0.01内核分析与操作系统设计—创造你自己的操作系统[M].北京:清华大学出版社,2004.[3]王侠,高胜哲.论Linuxshell原理[J].辽宁税务高等专科学校学报,2005,(04).[4]徐德民.操作系统原理Linux篇[M].北京:国防工业出版社,2004.[5]逯燕玲,解文彬等.Linux操作系统[M].北京:机械工业出版社,2007.[6]刘胤杰,岳浩等.Linux操作系统教程[M].北京:机械工业出版社,2005.[7]朱永章.如何在Linux上写C程序[J].中小学信息技术教育,2005,(05).[8]任爱华等.操作系统实验指导[M].北京:清华大学出版社,2004.[9](美)BruceMolay著,杨宗源等译.Unix/Linux编程实践教程[M].北京:清华大学出版社,2004.[10]怀石工作室.Linux上的C编程[M].北京:中国电力出版社,2001.[11]杜华.Linux编程技术详解[M].北京:人民邮电出版社,2007.[12]童永清.LinuxC编程实战[M].北京:人民邮电出版社,2008.[13](美)BehrouzA.Forouzan,RichardF.Gilberg著,彭松虎译.Unix和Shell程序设计权威教程[M].北京:清华大学出版社,2003.[14]AbrahamSilberschatz等.操作系统概念(第六版影印版)[M].北京:高等教育出版社,JohnWiley&Sons,Inc,2002.[15]BrianCarrier.FileSystemForensicAnalysis[M].Crawfordsville:Addison-Wesley,2005.

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭