前 言
一个影响巨大的软件系统
“Linux颇具颠覆性,就在5年前,谁能想到?这样一个全世界范围内广泛使用的操作系统是由几千个分散在全球,仅仅通过网线连接起来的开发人员,利用业余时间开发并整合出来的。”
Eric Raymond《大教堂与小集市》
是的,这样一个软件系统的发展和形成的确令人不可思议。Linux的前身甚至在小型机市场上都难以立足,而它却已成为这样一个颇具“颠覆性”的软件系统。它的成功对于那些企图破坏我们这个时代科技创新自由的势力无疑是个巨大的挑战。UNIX社团所推崇的开源理念最终能够获得成功,还要归功于Internet技术的发展和成熟,以及在硬件平台上为个人用户提供最大限度发展空间的思想。如果UNIX最终是为黑客而存在,那么Linux本身就是他们个人自由的化身,过去曾经是,现在也是。
这本教科书是对Internet普及所带来的强大作用的证明,也是对数以千计自认为应该属于一个更大团体的个体黑客的证明。了解这个社团最好的方法就是上网,跟踪本书一些章节末尾列出的网上资源,了解Linux的缔造者的思想。我们确信,通过勤奋实践,对本书提出问题的思考和富有创意的解答,你就会享受到Linux社团用户所拥有的成就感。
写作本书的原因
在这本教材完成之时,Linux已经在计算机科学和工程领域发展到一个颇为成熟的水平。这使我们觉得早该完成这样的一本Linux教科书了。总的来说,我们有35年以上的大学教学经验。完成这样一本教材的最初想法源于在教学中碰到的尴尬处境。在教授那些与Linux主题相关的课程时,我们发现能使用的素材,要么是非常复杂和庞大的Linux参考源代码,要么是“Linux傻瓜书”之类的指导手册。显然它们用于教授那些意义非凡、体系完备的课程是不合适的。而且,用教科书的形式,通过编排一些章内指南、章内练习以及每章末尾的练习,可以更好地展示Linux的重要主题,使之适应教室的环境和“讲课-实验-作业”的教学模式。这样的展示显然是一种最佳的学习方式(即合理的主题编排、准备充分和适当的课时、实验内容和课后练习,同步配之教科书章节)。另外,因为本书内容兼具深度和广度,使之适合于任何想要在这一方面进一步研究和学习的读者。
写作的目的
我们的主要目的是向读者描述Linux应用程序的用户界面(AUI),并且在这个过程中让读者进一步深入理解系统内部的工作原理,以及一些重要的Linux概念、数据结构和算法。其中最重要的实例是Linux的文件、进程的概念,以及I/O重定向。其次,是为使用C语言和shell脚本的开发人员介绍一些重要的Linux软件工程工具。但总的来说,在本教材中我们并没有从标准C库和Linux系统调用的角度介绍Linux应用程序界面(API)。编写本教材时,假设读者并不具备Linux或者编程方面的知识。
内容的编排格式
教材中编排了很多图表,以及大量的参考教程,交互式shell命令演示,练习和课后思考题。教材中对涉及到的每一个命令、工具和应用程序,都给出了相应的语法说明栏。详细介绍了命令的语法、使用目的、输出结果,以及常用的命令选项和特性。另外,每章都有一个小结。
本书的使用方法
如果将本书用作Linux的入门教材,那么除了第20章外,其他各章都应当列入教学内容。如果将本书用作操作系统概念和原理课程的辅助教材,那么应按照主要教材内容的编排顺序,对本书的内容逐一涉及。其中至少应当包含第2章、第7章以及第13章的内容。如果将本书作为学习C语言或者shell编程的课程的教科书,那么从第7章~第20章的全部内容,以及从第3章~第6章的相关章节对学生大有裨益。对于第20章的覆盖程度取决于课程的深度,导论性课程可以部分涉及,高级课程可以全部覆盖。
补充材料
通过访问http://lhotse.up.edu/~koretsky/linux.html站点可以获得章内练习题的答案、源代码,以及其他有助于更深入学习Linux的站点链接。也可以通过访问Addison Wesley的网站www.awl.com/cseng/titles/0-201-72595-9 链接到以上站点。
有关每章习题的解决方案,可提供给教授本课程的教师。请联系当地Addison-Wesley销售 代表。
我们为本书中所有的错误负完全责任。如果您发现本书内任何错误请发信至sarwar@up.edu和koretsky@up.edu与我们联系。我们将在下一版中加入您的反馈意见并修正您提出的错误。
致 谢
如果没有各方面的帮助,用不到一年的时间完成这本内容丰富的教材是不可能的。我们感谢Addison-Wesley所有参与人员。这本教材是我们第2次与编辑Maite Suarez-Rivas这位出色的专家合作。她支持我们编写这样一本教材的想法,并且提出了宝贵意见,保证了本书的及时完成。感谢Maite!同时也向她在Addison-Wesley工作的所有同事表示衷心的感谢。他们是Lisa Hogue、Patti Mahtani、Helen Reebenacker、Regina Hagen以及Jarrod Gibbons。感谢他们的支持和专业精神。Lisa,感谢你的全程帮助!特别感谢Pre-Press公司项目经理Marilyn Lloyd,感谢她在本书出版阶段的耐心和很多有价值的建议以及出色的工作。
同时也要感谢下面这些评审人员,他们提出了有价值的反馈信息,给出了许多精确而且深刻的评论。他们的贡献毫无疑问提高了本书的质量:
Austin社区学院的Ronald E.Bass
Henry Ford社区学院的Thomas A. Burns
Ashland大学的Simon Gray
Carven社区学院的Chuck Lesko
Oregon州立大学的Toshimi Minoura
Minot州立大学的Selmer Moen
北卡罗来那大学Chapel Hill校区的Gregory B. Newby
Franklin大学的Marianne Vakalis
田纳西州杰克逊联合大学的G. Jan Wilms
亚里桑那州立大学的Bill Wood
最后,还要感谢Portland大学工程学院计算实验室的Dale Frakes,感谢他各方面的支持。每当我们需要他时,总能得到他的帮助。
个人致谢
Syed Mansoor Sarwar 如果没有家人给予的支持、理解、鼓励和爱,我决不可能在两年内完成两本书的写作工作。我的全家都应当得到这样特别的感谢。感激我的父母,感激他们给予我的爱,并且教会我认识自己。他们是我努力工作的榜样,也为我树立了道德的模范。至今我依然继续从他们的教育中汲取力量。感谢我的妻子Robina,以及我的孩子Hassaan和Maham。他们爱我,并且理解和支持我的工作,让我可以投入所有的时间和精力完成这本教材的写作工作。没有他们,我就写不了这本书。所以,感谢他们!感谢我的姐妹Rizwana、Farhana和我的兄弟Masood、Nadeem、Aqeel和Nabeel,感谢他们给予的爱和友谊。尤其感谢Nadeem和Nabeel,在我的工作中,他们一直不断地给我支持和鼓励。Muk hondie aiy hoon? Asif out!
感激Tom Nelson,我的前任院长、导师和朋友。感谢在我的Portland大学职业生涯中所给予的鼓励。感谢我的朋友,Synplicity公司的Shahid Younas,以及我的同事Aziz Inan和Matthew Kuhn,感谢他们的支持。
最后,特别要真诚感谢我的合作者,Robert M. Koretsky和Syed Aqeel Sarwar,感谢我们之间的愉快合作。
Robert M.Koretsky 感谢我的妻子Kathe、女儿Tara,以及我的儿子Cody,感谢他们多年来给我的支持和爱。同时也感谢Mansoor Sarwar,感谢他的鼓励和友谊。
Syed Aqeel Sarwar 感谢我的父母,他们耐心养育我、爱我,他们做出了很大的牺牲。也感谢我的哥哥Syed Mansoor Sarwar博士,感谢他不断的支持。我特别感谢我的兄弟Masood Sarwar、Nadeem Sarwar博士、Nabeel Sarwar以及我亲爱的姐姐Rizwana Sarwar和Farhana Sarwar博士,感谢他们的友谊和支持。最后,感谢我的妻子Mamoona的支持,还有我的儿子Mohammad的 陪伴。
献给:
我的太太和孩子们 S.M.S.
我全家 R.M.K.
我的父母 S.A.S.