1、毕业设计文献综述 计算机科学与技术 Linux Shell 的研究与开发 一、前言部分 相关概念: Shell 是一种具备特殊功能的程序, 它是介于使用者和 UNIX/Linux 操作系统之核心程序( kernel)间的一个接口。 为了对用户屏蔽内核的复杂性,也为了保护内核以免用户误操作造成损害,在内核的周围建了一个外壳 (shell)。用户向 shell 提出请求, shell 解释并将请求传给内核。 使 用 较 广 的 shell 有 标 准 的 Bourne shell (sh) 、 Korn Shell(ksh) 、C shell (csh)、 Bourne Again Shell(b
2、ash)等。 shell 的另一个重要特性是它自身就是一个解释型的程序设计语言, shell 程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量和程序控制结构。 shell 编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的 shell 程序中。 本质上, shell 脚本是命令行命令简单的组合到一个文件里面。 Shell 基本上是一个命令解释器,类似于 DOS 下的 。它接收用户命令,然后调用相应的应用程序 1。 管道是 Linux 支持的最初 Unix IPC 形式之一,具有以下特点: 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道
3、; 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程); 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在于 内存中。一个进程向管道中写的内容被管道另一端的进程读出 , 写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。 执行一个 shell 命令行时通 常会自动打开三个标准文件,即标准输入文件( stdin),通常对应终端的键盘;标准输出文件( stdout)和标准错误输出文件( stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入
4、数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。 输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的输出就不显示在屏幕上,而 是写入到指定文件中 2。 写作目的: 介绍了在 Linux 系统背景下对 Shell 相关知识的了解,编写简单的 shell 命令例如ls,cp,cat 和 rm 命令等并且介绍了 Shell 相关的外部程序命令及管道和输入输出重定向功能,以加深对 Shell 这方面知识的理解,为此
5、类程序的开发提供一定的启示性和指导性。 二、主题部分 Unix/linux 发展简史 : 一、 Multics 计划 1965 年, AT&T 贝尔电话实验室、通用电气公司、麻省理工学院 MAC 课题组一起联合开发一个称为 Multics 的新操作系统。 Multics 系统的 目标是要向大的用户团体提供对计算机的同时访问,支持强大的计算数据存储,以及允许用户在需要的时候容易地共享他们的数据。1969 年 Multics 的原始版本在 GE645 计算机上运行了,但它既没能提供预定的综合服务,而且,连它自己也不清楚究竟什么时刻算达到开发目标。在这种情况下, AT&T 贝尔电话实验室首先退出了这
6、一项目。 二、 UNIX 系统的萌芽 Multics 项目中止后, AT&T 贝尔电话实验室中参加开发的主要人员开始寻找其他有趣的项目。这其中, KenThompson 写了一个名叫“太空漫游”的游戏程序。他找到了一台基 本无人使用的 DEC PDP-7 计算机运行他的程序。然而由于 DEC PDP-7 缺少开发程序,以致于Thompson 不得不在另一台运行 GECOS 操作系统的 Honeywell635 上交叉汇编他的程序,然后再通过纸带加载到 DECPDP-7 上。为了方便太空漫游的开发, Thompson 和 Dennis Ritchie一起着手开发 DEC PDP-7 上的操作环境
7、: 1.一个简单的文件系统,它后来深化成称之为 System V 文件系统的早期版; 2.一个进程子系统和 shell(命令解释器)。 这样这个系统就足以满足他们的需要,他 们将这个操作环境命名为 UNIX。 Thompson和 Ritchie后来开发了 B语言(后来 Ritchie又将其发展为 C语言),并扩展了 UNIX系统, UNIX 系统便在 AT&T 贝尔电话实验室流行起来。 1973 年 11 月,他们用 C 语言彻底重写,这是 UNIX 操作系统迈向成功之路的关键一步。完成后, Thompson 和 Ritchie 共同在 ACM 通信上发表了首篇 UNIX 论文, The UN
8、IX Time Sharing System3。 三、 UNIX 系统的发展 由于 AT&T 公司受到美国反托拉斯法的诉讼,与联邦政府签署 了一份协议,这份协议不允许 AT&T 公司生产与电话和电报服务无关的设备,也不允许从事除“公用通信服务”外的任何商业活支。这样, AT&T 公司就陷入了不能经营计算机产品的尴尬局面。 而自从在 ACM 通信中发表了关于 UNIX 的论文后,越来越多的人希望能够获得 UNIX软件和源码。为了不违背与政府签署的协议, AT&T 公司既不出售 UNIX、也不为其作广告、也不对其提供技术支持。而同时为了满足大家的需要, AT&T 公司在签署简单协议的前提下,将 U
9、NIX 系统无偿地提供给大学,以供教学与研究。由于 AT&T 公司对 UNIX 的策略, 使得 UNIX在全世界范围内快速发展。到 1975 年底,它已经传播到西至耶路撒冷的 Hebrew 大学,南至澳大利亚的新南威尔士大学,北至加拿大多伦多大学的世界各地。 1979 年 1 月发行的 UNIX版本是一个真正可移植的 UNIX 系统,它对其后的 UNIX 发展有着深远的影响。该版本最初是运行在 PDP-11 和 Interdata8/32 上的,该系统更加健壮,而且提供了比版本 6 更强大的功能,但其相当慢。许多领取了许可证的用户针对这一情况从不同方面对系统的性能进行了改进, AT&T 又将这
10、些改进中的许多内容加入了其以后的 UNIX 发行中 。这种使用者与开发者之间的合作精神正是 UNIX 快速成长和不断发展的关键因素。不幸的是,当 UNIX 在商业上取得很大成功之后,这种精神就不存在了。 四、 UNIX 系统最重要的分支 -BSD UNIX 1974年 12月,加州大学伯克利分校获得了 UNIX许可证。在其后的几年里,包括 Bill Joy和 Chuck Haley 在内的一组研究生为 UNIX 开发了几个实用工具,其中包括 ex 编辑器 -vi的前身和一个 Pascal 编译器。他们将这些软件绑定成一个称为“伯克利软件销售( BSD)”的软件包,并在 1978 年春以每个许
11、可证 50 美元出售。最初的 BSD 发行仅包括应用程序和实用工具,并没有对操作系统进行修改和再发行。 Joy 早期的贡献之一就是 C Shell。 1978 年伯克利得到一台 VAX-11/780 以及由新泽西州 Holmdel 的 BTL 小组移植的UNIX/32V。 VAX-11 采用 32 位体系结构,可以有 4GB 的地址,而物理内存仅为 2MB。与此同时, Ozalp Babaoglu 为 VAX 设计了一个分页式的虚存系统,并将其加入到 UNIX 系统中。这就是 1979 年末发行的 3BSD,是由伯克利发行的第一个操作系统。 伯克利在虚存方面的工作促 使美国国防部高级研究项目署
12、( DARPA)决定投资支持伯克利的 UNIX 系统开发。 DARPA 项目的目的之一就是将 TCP/IP 网络协议族集成到 UNIX 系统中。在 DARPA 的资助下,伯克利又推出了几个 BSD 发行,统称 4BSD。 五、纯 UNIX 系统 -System V AT&T 公司与美国司法部的法律大战终于在 1982 年达到终点,一部里程碑式的法律出台了。根据该法令,地区性运营公司都从 AT&T 公司中分离出来,成立一系列的“贝尔宝宝”,贝尔电话实验室也独立出来,改名为贝尔实验室。同时, AT&T 也被重新允许进入计算机市场。 贝尔实验室先后在 1982 年发行了 System III, 19
13、84 年发行了 System V Release 2( SVR2), 1987 年发行了 SVR3。 System V UNIX 也引入了许多新特征,新设施。最有代表性的就是进程间通信机制。 六、 UNIX 系统的商业化 UNIX 系统的不断发展吸引了许多计算机公司。它们急急忙忙地开始将 UNIX 商业化,出售自己的 UNIX 版本。每一家都是以 AT&T 或 BSD 为蓝本,将它们移植到自己的硬件上,并加上一些自己的“增值”功能。 1982 年, Bill Joy 离开了伯克利,与人合 资成立了 Sun 公司,基于 BSD 开发、发行了 SunOS,后来又基于 SVR4 发行了 Solari
14、s。微软与 SCO 合作开发发行的 XENIX。此后, SCO 公司将 SVR3 移植到 386 上,并将其命名为 SCO UNIX。还有一此大型的硬件公司,配合自己的计算机系统,也开发出一许多不同的 UNIX 版本: IBM 公司开发的AIX 操作系统 -运行在 RS 6000 小型机上; HP 公司开发的 HP-UX-运行在 HP 工作站上;Digital 公司开发的 Digital UNIX。还有著名教授 Tanenbaum 为了教学开发的 MINIX 系统 ; 以及我们可爱的小企鹅 -LINUX 操作系统。每种商业变体都增加了许多新特征,这些功能中的许多后来又被加入到主线系统中,这样逐
15、步推动 UNIX 系统向前发展。 七、 Linux Shell 的基本情况 标准的 UNIX shell 是 V7(AT&T 的第七版 )UNIX,在 1979 年底被提出,且以它的创造者 Stephen Bourne 来命名。 Bourne shell 是以 Algol 这种语言为基础来设计,主要被用来做自动化系统管理工作。虽然 Bourne shell 以简单和速度而受欢迎,但它缺少许多交谈性使用的特色,例如历程、别名和作业控制 4。 C shell 是在加州大学柏克来分校于 70 年代末期发展而成,而以 2BSD UNIX 的部分发行。这个 shell 主要是由 Bill Joy 写成,
16、提供了一些在标准 Bourne shell 所看不到的额外特色。 C shell 是以 C 程序语言作为基础,且它被用来当程序语言时,能共享类似的语法。它也提供在交谈式运用上的改进,例如命令列历程、别名和作业控制。因为 C shell 是在大型机器上设计出来,且增加了一些额外功能,所以 C shell 有在小型机器上跑 得较慢,即使在大型机器上跟 Bourne shell 比起来也显得缓慢。 有了 Bourne shell 和 C shell 之后, UNIX 使用者就有了选择,且争论那一个 shell 较好。 AT&T 的 David Korn 在 80 年代中期发明了 Korn shell
17、,在 1986 年发行且在 1988 年成为正式的部分 SVR4 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
18、下是 BASH)、 C shell(Berkeley shell,在 Linux 下是 TCSH)和 Korn shell(Bourne shell 的超集 )。这三种 shell 在交 互 (interactive)模式下的表现相当类似,但作为命令文件语言时,在语法和执行效率上就有些不同了。 Bourne shell 是标准的 UNIX shell,以前常被用来做为管理系统之用。大部份的系统管理命令文件,例如 rc start、 stop 与 shutdown 都是 Bourne shell 的命令,且在单 用户 模式 (single user mode)下以 root 登录 时它常被系统管
19、理 员 使用。 Bourne shell 是由 AT&T 发展的,以简洁、快速著名。 Bourne shell 提示符号的默认值是 $。 C shell 是柏克莱大学 (Berkeley)所开发的,且加入了一些新特性,如命令列历程(history)、别名 (alias)、内建算术、 文件 名完成 (filename completion)、和作业控制 (job control)。对于常在交 互 模式下执行 shell 的使用者而言,他们较喜爱使用 C shell;但对于系统管理者而言,则较偏好以 Bourne shell 来做命令,因为 Bourne shell 命令比 C shell 命令来
20、的简单及快速。 C shell 提示符号的 默认值是 %。 Korn shell 是 Bourne shell 的超集 (superset),由 AT&T 的 David Korn 所开发。它增加了一些特色,比 C shell 更为先进。 Korn shell 的特色包括了可编辑的历程、别名、函 数 、正规表达式万用字符 (regular expression wildcard)、内建算术、作业控制 (job control)、 协同 处理 (coprocessing)和特殊的 纠 错功能。 Bourne shell 几乎和 Korn shell 完全向上兼容 (upward compatib
21、le),所以在 Bourne shell 下开发的程序仍能在 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 的执行效率都有负面的印象。 未来发
22、展趋势 : 未来的 Unix 市场还会有很大的发展空间,对于 Unix 系统服务器产品主要是集中在特定的行业,像国内小型机市场的主要发展动力来自电信行业。同时,随着 2009 年电信运营商的重组和 3G 无线通信业务的开展,对于小型机市场的发展是一个商机。最关键的是,高度的可靠性和安全性始终拥有市场需求,特别是在金融电信行业来说,数据服务器等高密度数据处理的系统环境,这些高端的应用领域,仍然是 Unix 占据主要地位 5。 另外, Unix 的发展和系统设计、架构都是以高性能和高可靠性为中心的。 Unix 经历了整体架构和性能的考验,主要用于“计算”和实际业务的数据处理,所以 Unix 系统正
23、是利用极少的资源去做关键的处理而闻名。同时,对于现有的 Unix 系统服务器而言,对市场所关注的所谓的封闭性并不是非常介意, Unix 当年是作为一个开放的系统平台出现的,应用在 IBM 的 AIX 和惠普的 HP-UX 之间进行迁移是十分容易的,尽管 Unix 厂商都在发展各自的系统平台,但是对用户的应用来说,这并不是一个很大的障碍。 基于此,在 Unix 系统领域,在表 面的危机之下,却蕴藏着一定的商机,在用户需求的推动下,在 IBM、惠普、 SUN 等主要厂商的技术进步过程中,相信未来 5 至 10 年内, Unix市场仍然会是一片广阔的发展天地。 在 UNIX 系统中,使用者可视自己的
24、需要执行 sh、 ksh、 bash、 csh 或 tcsh 来代替原先使用的 shell、改变正在使用的环境;也可以用 chsh指令、输入想使用的 shell 的路径及名称 (如 /bin/csh, 在 Y11-Y14 机器上还需输入个人使用者的密码 ),改变以 后 每次 login时所使用的 shell、使自己所使用的环境能满足自己使用 上的需要。 三、总结部分 本文较为详细地阐述了有关 linux/unix 方面的知识,回顾历史,立足现实,展望未来。今后随着信息技术的发展和 shell 方面应用领域的逐步增加,在通过设计并实现一些基本的shell,比如说列出目录下的文件,显示文件的内容,
25、删除文件,复制文件等。更加加深了对shell 的了解,也加深了对 Linux 这个系统的熟练程度。 四、参考文献 1 坦思利 . LINUX 与 UNIX Shell 编程指南 M.北京: 机械工业出版社, 2000. 2 Mark G. Sobell. Linux 命 令、编辑器与 Shell 编程 M. 北京:清华大学出版社, 2007. 3 Mark G. Sobell. Linux 命令、编辑器与 shell 编程 (第 2 版 )M. 清华大学出版社, 2010. 4 卧龙小三 . 实战 Linux Shell 编程与服务器管理 M. 北京:电子工业出版社, 2010. 5 (美)布
26、卢姆 . Linux 命令行和 shell 脚本编程宝典 M. 北京:人民邮电出版社, 2009. 6 于重重,谭励,杨明华 . Linux 命令、编辑器、 Shell 编程实例大全 M. 北京:人民 邮 电出版社 , 2009. 7 (美)莫雷( Molay, B) . Unix/Linux 编程实践教程 M. 清华大学出版社, 2004. 8 Robert Love. LINUX 系统编程 M.南京:东南大学出版社, 2009. 9 和硕科技编辑部 . 精通 LINUX & UNIX Shell 程序设计 M. 北京:中国青年出版社, 2001. 10(美)弗里斯科比( Frisch,AE
27、.) . Unix 与 Linux 系统管理 M. 北京:清华大学出版 社, 2006. 11 李善平 . 边干 边学 :LINUX 内核指导 M. 杭州:浙江大学出版社, 2002. 12 沈良忠 . Linux C 编程一站式学习 M. 北京:电子工业出版社, 2009. 13 Kurt Wall. GNU/Linux 编程指南 (第二版 )M. 北京:清华大学出版社, 2002. 14 Quigley / 美 Ellie. Linux Shell 实例精解 M. 北京:中国电力出版社, 2003. 15 David Tansley. LINUX & UNIX Shell ProgrammingM. Addison-Wesley Professional, 2000. 16 Charlie Rursel. UNIX 与 Linux 精选问题集(英文版) M. 北京:机械工业出版 1998.