1、毕业设计开题报告 计算机科学与技术 Linux Shell 的研究与开发 一、选题的背景、意义 Linux 的诞生和发展 : Linux 操作系统是 UNIX 操作系统的一种克隆系统。它诞生于 1991 年的 10 月 5 日(这是第一次正式向外公布的时间)。以后借助于 Internet 网络,并经过全世界各地计算机爱好者的共同努力,现已成为今天世界上使用最多的一种 UNIX 类操作系统,并且使用人数还在迅猛增长。 Linux 操作系统的诞生、发展和成长过程始终依赖着以下五个重要支柱: UNIX 操作系统、 MINIX 操作 系统、 GNU 计划、 POSIX 标准和 Internet 网络。
2、 UNIX 操作系统是美国贝尔实验室的 Ken.Thompson 和 Dennis Ritchie 于 1969 年夏在DEC PDP-7 小型计算机上开发的一个分时操作系统。当时 Ken Thompson 为了能在闲置不用的 PDP-7 计算机上运行他非常喜欢的星际旅行( Space travel)游戏,在 1969 年夏天乘他夫人回家乡加利福尼亚渡假期间,在一个月内开发出了 unix 操作系统的原型。当时使用的是 BCPL 语言(基本组合编程语言),后经 Dennis Ritchie 于 1972 年用移植性很强的 C 语言进行了改写,使得 UNIX 系统在大专院校得到了推广。 MINIX
3、 系统是由 Andrew S. Tanenbaum( AST)开发的。 AST 是在荷兰 Amsterdam 的 Vrije 大学数学与计算机科学系统工作,是 ACM 和 IEEE 的资深会员 (全世界也只有很少人是两会的资深会员 ),共发表了 100 多篇文章, 5 本计算机书籍。 AST 虽出生在美国纽约,但他是荷兰侨民 (1914 年他的祖辈来到美国 )。他在纽约上的中学、 M.I.T 上的大学、加州大学Berkeley 分校念的博士学位。由于读博士后的缘故,他来到了家乡荷兰。从此就与家乡一直有来往。后来就在 Vrije 大学开始教书、带研究生了。荷兰首都 Amsterdam 是个常年阴
4、雨绵绵的城市,而对于 AST 来说,这最好不过了,因为这样他就可以待在家里摆弄他的计算机了。 MINIX 是他 1987 年编制的,主要用于学生学习操作系统原理。到 91 年时版本是1.5。目前主要有两个版本在使用: 1.5 版和 2.0 版,当时该操作系统在大学使用是免费的,但其它用途不是,当然目前都已经是免费的,可以从许多 FTP 上下载。 作为一个 操作系统, MINIX 并不是优秀者,但它同时提供了用 C 语言和汇编语言写的系统源代码。这是第一次使得有抱负的程序员或 hacker 能够阅读操作系统的源代码,在当时这种源代码是软件商一直小心地守护着的。 GNU 计划 : GNU 计划和自
5、由软件基金会 (the Free Software Foundation - FSF)是由 Richard M. Stallman 于 1984 年一手创办的。旨在开发一个类似 Unix、并且是自由软件的完整操作系统: GNU 系统。( GNU 是 “GNUs Not Unix“的递归 缩写,它的发音为 “guh-NEW“。)各种使用linux 作为核心的 GNU 操作系统正在被广泛的使用。虽然这些系统通常被称作 “Linux“,但是严格地说,它们应该被称为 GNU/Linux 系统。 到上世纪 90 年代初, GNU 项目已经开发出许多高质量的免费软件,其中包括有名的emacs 编辑系统、
6、bash shell 程序、 gcc 系列编译程序、 gdb 调试程序等等。这些软件为Linux 操作系统的开发创造了一个合适的环境,是 Linux 能够诞生的基础之一。以至于目前许多人都将 Linux 操作系统称为 “GNU/Linux“操作系统。 Linux Shell 的基本概念: 标准的 UNIX shell 是 V7(AT&T 的第七版 )UNIX,在 1979 年底被提出,且以它的创造者 Stephen Bourne 来命名。 Bourne shell 是以 Algol 这种语言为基础来设计,主要被用来做自动化系统管理工作。虽然 Bourne shell 以简单和速度而受欢迎,但它
7、缺少许多交谈性使用的特色,例如历程、别名和作业控制。 C shell 是在加州大学柏克来分校于 70 年代末期发展而成,而以 2BSD UNIX 的部分发行 。这个 shell 主要是由 Bill Joy 写成,提供了一些在标准 Bourne shell 所看不到的额外特色。 C shell 是以 C 程序语言作为基础,且它被用来当程序语言时,能共享类似的语法。它也提供在交谈式运用上的改进,例如命令列历程、别名和作业控制。因为 C shell 是在大型机器上设计出来,且增加了一些额外功能,所以 C shell 有在小型机器上跑得较慢,即使在大型机器上跟 Bourne shell 比起来也显得缓
8、慢。 有了 Bourne shell 和 C shell 之后, UNIX 使用者就有了选择,且争论那一个 shell 较好。 AT&T 的 David Korn 在 80 年代中期发明了 Korn shell,在 1986 年发行且在 1988 年成为正式的部分 SVR4 UNIX。 Korn shell 实际上是 Bourne shell 的超集,且不只可在 UNIX 系统上执行,同时也可在 OS/2、 VMS、和 DOS 上执行。它提供了和 Bourne shell 向上兼容的能力,且增加了许多在 C shell 上受欢迎的特色,更增加了速度和效率。 Korn shell 已历经许多修
9、正版,要找寻用户使用的是那一个版本可在 ksh 提示符号下按 Ctrl-v 键。 在大部份的 UNIX 系统,三种著名且广被支持的 shell 是 Bourne shell(AT&T shell,在 Linux 下是 BASH)、 C shell(Berkeley shell,在 Linux 下是 TCSH)和 Korn shell(Bourne shell 的超集 )。这三种 shell 在交 互 (interactive)模式下的表现相当类似,但作为命令文件语言时,在语法和执行效率上就有些不同了。 Bourne shell 是标准的 UNIX shell,以前常被用来做为管理系统之用。大部
10、份的系统管理命令文件,例如 rc start、 stop 与 shutdown 都是 Bourne shell 的命令,且在单 用户 模式 (single user mode)下以 root 登录 时它常被系统管理 员 使用。 Bourne shell 是由 AT&T 发展的,以简洁、快速著名。 Bourne shell 提示符号的默认值是 $。 C shell 是柏克莱大学 (Berkeley)所开发的,且加入了一些新特性,如命令列历程(history)、别名 (alias)、内建算术、 文件 名完成 (filename completion)、和作业控制 (job control)。对于常
11、在交 互 模式下执行 shell 的使用者而言,他们较喜爱使用 C shell;但对于系统管理者而言,则较偏好以 Bourne shell 来做命令,因为 Bourne shell 命令比 C shell 命令来的简单及快速。 C shell 提示符号的默认值是 %。 Korn shell 是 Bourne shell 的超集 (superset),由 AT&T 的 David Korn 所开发。它增加了一些特色,比 C shell 更为先进。 Korn shell 的特色包括了可编辑的历程、别名、函 数 、正规表达式万用字符 (regular expression wildcard)、内建算
12、术、作业控制 (job control)、 协同 处理 (coprocessing)和特殊的 纠 错功能。 Bourne shell 几乎和 Korn shell 完全向上兼容 (upward compatible),所以在 Bourne shell 下开发的程序仍能在 Korn shell 上执行。 Korn shell 提示符号的默 认值也是 $。在 Linux 系统使用的 Korn shell 叫做 pdksh,它是指 Public Domain Korn Shell。 除了执行效率稍差外, Korn shell 在许多方面都比 Bourne shell 为佳;但是,若将 Korn sh
13、ell 与 C shell 相比就很困难,因为二者在许多方面都各有所长,就效率和容易使用上看, Korn shell 是优于 C shell,相信许多使用者对于 C Shell 的执行效率都有负面的印象。 国内外研究现状 : Linux 作为一种开源的操作系统 ,在国内外享有较高的声誉,其重要地位是其他操作系统所不可取代的。正是由于 Linux 操作系统的开源性,在国内外各大研究机构对其进行了不断的开发和完善,逐步形成了今天的 Linux 操作系统,其功能非常强大,运行非常稳定。国内外均成立了专门的研究机构对其进行开发和研究。而近年来由于网络技术的兴起, Linux系统也发展为一种可以进行资源
14、共享和交互的网络平台。在资源共享的同时,网络的安全已经成为科研机构研究的重点,并且推出了一系列的网络管理控制系统,特别是实现对网络数据的管理和控制。其中以网络数据管理和控制过滤器 IPTABLES 最为出名。可以说就目前国内外研究的情况来看 Liunx 方面的网络管理控制系统的开发技术已经相当成熟,并且正在不断的进行完善。 在 UNIX/linux Shell 中主要有这几类 shell: Bourne shell (bsh) C shell ( csh) Korn shell ( ksh) Bourne Again shell ( bash) POSIX shell ( sh) TENEX/
15、TOPS C shell ( tcsh) TC Shell(tesh) Z Shell(zsh ) 各主要操作系统下缺省的 shell: AIX 下是 Korn Shell。 Solaris 和 FreeBSD 缺省的是 Bourne shell。 HP-UX 缺省的是 POSIX shell。 Linux 是 Bourne Again shell。 未来发展趋势 : 目前, Linux 技术已经成为 IT 技术发展的热点,投身于 Linux 技术研究的社区、研究机构和软件企业越来越多,支持 Linux 的软件、硬件制造商和解决方案提供商也迅速增加,Linux 在信息化建设中的应用范围也越来越
16、广, Linux 产业链已初步形成,并正在得到持续的完善。随着整个 Linux 产业的发展, Linux 技术也处在快速的发展过程中,形成了若干了技术热点。 UNIX 作业系统的 SHELL 大致可分为两大系统,一是 1970 年代 前期由美国贝尔实验室(BELL LAB)所发展的 sh(Bourne Shell), 它是 UNIX 系统中的标准 SHELL,此一系统後来又发展出 ksh(Korne Shell)、 bash(Bourne Again Shell)等功能更多的介面;另一系 统是美国柏克来大学 (Berkekey)在 1970 年代後期所发展的 csh(C Shell),和它属於
17、 同一系统的有tcsh 等。 无论上述的那一种 shell,它的基本功能与作用都是相同的, 它们之间的不同处可能在於对同一动作处理程序上的不同 (会影响 命令处理的速度 )、所提供内键命令及变数的或多或寡等,其中内部命令与变 量 的多 少 直接影响到 shell 功能的多 少 ,是使用者在使用时最容易直接感受到的。 在 UNIX 系统中,使用者可视自己的需要执行 sh、 ksh、 bash、 csh 或 tcsh 来代替原先使用的 shell、改变正在使用的环境;也可 以用 chsh指令、输入想使用的 shell 的路径及名称 (如 /bin/csh, 在 Y11-Y14 机器上还需输入个人使
18、用者的密码 ),改变以後每次 login时所使用的 shell、使自己所使用的环境能最满足自己使用 上的需要。 本课题的意义就是通过编写简单的 shell 程序,更加了解 shell 的执行过程,加深对shell 命令的理解,进而进一步加深对 linux 操作系统的熟练程度。 二、研究的基本内容与拟解决的主要问题 研究的基本内容: 在 Linux 环境下编写一个简单的 shell 程序,达到以下要求: ( 1)能够执行外部程序命令,命令可以带参数; ( 2)能够实现管道和输入输出重定向功能。 拟解 决的主要问题: 实现的 shell 能够解释并执行下列命令: ( 1) ls 列目录 功能:显示
19、文件和目录的信息 ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 ls -l 显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行 ls -lh 显示文件的大小,以容易理解的格式印出文件大小 (例如 1K 234M 2G) ls -lt 显示文件,按照修改时间排序 ( 2) cp 文件拷贝 功能: copy 文件 cp source target 将文件 source 复制为 target cp /root /source. 将 /root 下的文件 source 复制到当前目录 cp ? av soure_dir target_dir 将整个目录复制,两
20、目录完全一样 ( 3) rm 删除文件 功能: 删除文件 或目录 rm file 删除某一个文件 rm -f file 删除时候不进行提示。可以于 r 参数配合使用 rm -rf dir 删除当前目录下叫 dir 的整个目录 ( 4) who 显示当前登录的用户 信息 功能:显示登录用户 例如: # who zhoulj pts/0 Mar 13 21:24 (10.140.0.109) ( 5) cat 显示文件内容 显示文件的内容,和 DOS 的 type 相同 cat file 三、研究的方法与技术路线、研究难点,预期达到的目标 研究的方法与技术路线: 熟悉 Linux 操作系统下的 C
21、 语言高级编程,了解 Linux 操作系统的 shell 执行方式,熟练运用 C 语言对字符串进行处理。学习并掌握 Linux C 语言系统库函数的用法,熟练运用某些库函数来完成设计。 研究难点: 实现管道和输入输出重定向。 预期目标: 在 Red Hat Linux 操作系统下,设计一个并实现一些简单的 shell 命令,具有列出文件,复制文件,显示文件内容,删除文件和目录等功能,能识别并提示错误的命令,并达到初步实用的水平。 四、论文详细工作进度和安排 第七学期第 10 周至第 18 周( 2011 年 01 月 06 日前):文献检索和资料收集,完成毕业论文(设计)文献综述、开题报告和外
22、文翻译; 第八学期 第 1 周 至第 3 周( 2011 年 03 月 11 日前):撰写论文提纲,完成毕业论文(设计)初稿 、需求分析和概要设计; 第八学期 第 4 周 至第 12 周( 2011 年 05 月 13 日前):详细设计、系统调试、和毕业论文(设计)完成定稿; 第八学期第 13 周( 2011 年 05 月 20 日前):完成应用软件系统的设计和毕业论文(设计)送指导老师和评阅老师评阅,准备答辩; 第八学期第 14 周:参加毕业论文(设计)答辩。 五、主要参考文献: 1 坦思利 . LINUX 与 UNIX Shell 编程指南 M.北京: 机械工业出版社, 2000. 2 M
23、ark G. Sobell. Linux 命令、编辑器与 Shell 编程 M. 北京:清华大学出版社, 2007. 3 Mark G. Sobell. Linux 命令、编辑器与 shell 编程 (第 2 版 )M. 清华大学出版社, 2010. 4 卧龙小三 . 实战 Linux Shell 编程与服务器管理 M. 北京:电子工业出版社, 2010. 5 (美)布卢姆 . Linux 命令行和 shell 脚本编程宝典 M. 北京:人民邮电出版社, 2009. 6 于重重,谭励,杨明华 . Linux 命令、编辑器、 Shell 编程实例大全 M. 北京:人民邮 电出版社 , 2009.
24、 7 (美)莫雷( Molay, B) . Unix/Linux 编程实践教程 M. 清华大学出版社, 2004. 8 Robert Love. LINUX 系统编程 M.南京:东南大学出版社, 2009. 9 和硕科技编辑部 . 精通 LINUX & UNIX Shell 程序设计 M. 北京:中国青年出版社, 2001. 10(美)弗里斯科比( Frisch,AE.) . Unix 与 Linux 系统管理 M. 北京:清华大学出版 社, 2006. 11 李善平 . 边干边学 :LINUX 内核指导 M. 杭州:浙江大学出版社, 2002. 12 沈良忠 . Linux C 编程一站式学
25、习 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. 17(美) Bruce Molay 著,杨宗源等译 .Unix/Linux 编程实践教程 M. 北京:清华大学出版社, 2004.