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