本书是一本很好的UNIX基础教材。作者深入浅出地剖析了UNIX操作系统的各个方面,系统地向读者介绍了UNIX的用户接口,介绍了系统内部的工作情况等。本书从UNIX系统最基本的操作开始,依次阐述了 UNIX shell操作、文本文件编辑、收发电子邮件、UNIX文件与文件系统的操作、输入输出管理、进程管理、网络管理以及常用shell的编程等。书后的附录详尽介绍了UNIX的终端命令及命令参数和选项,精心设计的章内练习和章末问题有助于读者及时巩固新的命令、原语和概念。本书适合作计算机专业本科生教材。
出版者的话\r\n专家指导委员会\r\n译者序\r\n前言\r\n\r\n第1章 操作系统概述 \r\n\r\n1.1 导言 \r\n1.2 什么是操作系统 \r\n1.3 操作系统功能 \r\n1.4 字符与图形用户界面 \r\n1.5 操作系统的分类 \r\n1.6 UNIX产品系列 \r\n小结 \r\n问题 \r\n\r\n第2章 UNIX操作系统简史 \r\n\r\n2.1 导言 \r\n2.2 UNIX操作系统的发展历史 \r\n2.2.1 开端 \r\n2.2.2 操作系统研究 \r\n2.2.3 AT&T System V\r\n2.2.4 Berkeley软件发布版本 \r\n2.2.5 shell的历史 \r\n2.2.6 当前与未来的发展—Linux \r\n2.3 UNIX系统的变种 \r\n小结 \r\n问题 \r\n\r\n第3章 UNIX起步 \r\n\r\n3.1 导言 \r\n3.2 计算机系统硬件 \r\n3.2.1 主存 \r\n3.2.2 中央处理单元 \r\n3.2.3 磁盘 \r\n3.2.4 总线 \r\n3.2.5 输入/输出设备 \r\n3.3 UNIX软件体系结构\r\n3.3.1 设备驱动程序层\r\n3.3.2 UNIX内核 \r\n3.3.3 系统调用接口 \r\n3.3.4 语言库 \r\n3.3.5 UNIX shell \r\n3.3.6 应用程序 \r\n3.4 登录与注销 \r\n3.5 纠正错误 \r\n3.6 一些重要的系统设置 \r\n3.7 初学者常用命令 \r\n3.7.1 更改口令 \r\n3.7.2 获得帮助 \r\n3.7.3 查看自己的账号与UNIX系统名称 \r\n小结 \r\n问题 \r\n\r\n第4章 UNIX shell \r\n\r\n4.1 导言 \r\n4.2 多种UNIX shell \r\n4.2.1 shell程序 \r\n4.2.2 哪种shell适合你 \r\n4.2.3 改变shell的方法 \r\n4.2.4 shell启动文件与环境变量 \r\n4.3 其他常用命令 \r\n4.3.1 创建与显示目录 \r\n4.3.2 显示文件 \r\n4.3.3 打印文件 \r\n4.3.4 显示日历 \r\n4.3.5 单向实时消息传送 \r\n4.3.6 电子通信的通知和许可 \r\n4.3.7 命令伪名的生成 \r\n4.3.8 显示系统正常运行时间 \r\n4.4 shell元字符\r\n小结 \r\n问题 \r\n\r\n第5章 编辑文本文件 \r\n\r\n5.1 导言 \r\n5.2 如何使用pico编辑器进行简单的编辑工作 \r\n5.2.1 使用pico文本编辑器创建电子邮件文本 \r\n5.2.2 如何开始、保存及退出文件 \r\n5.2.3 常用键盘命令与光标控制 \r\n5.2.4 剪切、粘贴与查找 \r\n5.3 使用vi编辑器获取更多控制 \r\n5.3.1 shell脚本文件 \r\n5.3.2 如何开始、保存并退出一个文件 \r\n5.3.3 vi命令格式及操作模式 \r\n5.3.4 光标移动与编辑命令 \r\n5.3.5 拖放(复制与粘贴)和交换(查找与替换) \r\n5.3.6 设置vi环境 \r\n5.3.7 在vi中执行shell命令 \r\n5.4 使用emacs编辑器获得最大的控制 \r\n5.4.1 DOS别名 \r\n5.4.2 如何开始、保存并退出一个文件 \r\n5.4.3 光标移动与编辑命令 \r\n5.4.4 键盘宏\r\n5.4.5 剪切、复制、粘贴、查找与替换\r\n5.5 怎样使用emacs和X Window系统实现图形化编辑\r\n5.5.1 编辑数据文件\r\n5.5.2 如何开始、保存并退出一个文件\r\n5.5.3 X Window emacs菜单\r\n小结\r\n问题\r\n\r\n第6章 电子邮件\r\n\r\n6.1 导言\r\n6.2 怎样有效地使用UNIX的mail命令\r\n6.2.1 使用UNIX的mail命令发送和阅读电子邮件\r\n6.2.2 用mail发送电子邮件\r\n6.2.3 用mail阅读电子邮件\r\n6.2.4 在文件夹内保存消息\r\n6.2.5 回复和转发邮件(包括附件)\r\n6.2.6 mail别名\r\n6.3 elm:一个全屏幕显示的电子邮件系统\r\n6.3.1 用elm发送消息\r\n6.3.2 用elm发送电子邮件\r\n6.3.3 用elm阅读电子邮件\r\n6.3.4 用elm转发和回复电子邮件\r\n6.3.5 在文件夹内保存消息\r\n6.3.6 elm别名\r\n6.4 pine:另一个全屏幕显示的电子邮件系统\r\n6.4.1 用pine发送附有用vi创建的附件的电子邮件消息\r\n6.4.2 用pine发送电子邮件\r\n6.4.3 用pine阅读电子邮件\r\n6.4.4 用pine处理文件夹中的电子邮件\r\n6.4.5 使用pine地址簿\r\n6.4.6 pine命令小结\r\n小结\r\n问题\r\n\r\n第7章 文件与文件系统结构\r\n\r\n7.1 导言\r\n7.2 UNIX文件概念\r\n7.3 文件类型\r\n7.3.1 简单/普通文件\r\n7.3.2 目录\r\n7.3.3 链接文件\r\n7.3.4 特殊文件(设备文件)\r\n7.3.5 命名管道(FIFO)\r\n7.4 文件系统结构\r\n7.4.1 文件系统组织\r\n7.4.2 起始目录与当前工作目录\r\n7.4.3 绝对路径名与相对路径名\r\n7.4.4 一些标准目录与文件\r\n7.5 文件结构导航\r\n7.5.1 决定起始目录的绝对路径名\r\n7.5.2 浏览文件系统\r\n7.5.3 创建文件\r\n7.5.4 创建和删除目录\r\n7.5.5 决定文件属性\r\n7.5.6 决定文件内容的类型\r\n7.6 UNIX中文件的表示与存储\r\n7.7 标准文件与文件描述符\r\n7.8 文件结束记号\r\n小结\r\n问题\r\n\r\n第8章 文件安全性\r\n\r\n8.1 导言\r\n8.2 基于口令的保护\r\n8.3 基于加密的保护\r\n8.4 基于访问权限的保护\r\n8.4.1 用户的类型\r\n8.4.2 文件操作/访问权限的类型\r\n8.5 决定与更改文件访问权\r\n8.5.1 决定文件访问权\r\n8.5.2 更改文件访问权\r\n8.5.3 默认文件访问权\r\n8.6 特殊访问位\r\n8.6.1 设置用户ID(SUID)位\r\n8.6.2 设置组ID(SGID)位\r\n8.6.3 粘住位\r\n小结\r\n问题\r\n\r\n第9章 基本文件处理\r\n\r\n9.1 导言\r\n9.2 查看文本文件的内容\r\n9.2.1 查看完整的文件\r\n9.2.2 一次查看一页文件\r\n9.2.3 查看文件的头尾部分\r\n9.3 复制、移动和删除文件\r\n9.3.1 复制文件\r\n9.3.2 移动文件\r\n9.3.3 删除文件\r\n9.3.4 决定文件大小\r\n9.4 添加文件\r\n9.5 合并文件\r\n9.6 比较文件\r\n9.7 删除重复的行\r\n9.8 打印文件与控制打印作业\r\n9.8.1 UNIX文件打印机制\r\n9.8.2 打印文件\r\n9.8.3 确定打印请求的状态\r\n9.8.4 取消打印作业\r\n小结\r\n问题\r\n\r\n第10章 高级文件处理\r\n\r\n10.1 导言\r\n10.2 正则表达式\r\n10.3 文件压缩\r\n10.4 文件排序\r\n10.5 命令与文件的查找\r\n10.6 查找文件\r\n10.7 剪切与粘贴\r\n10.8 编码与解码\r\n10.9 文件加密与解密\r\n小结\r\n问题\r\n\r\n第11章 文件共享\r\n\r\n11.1 导言\r\n11.2 复制共享文件\r\n11.3 小组成员的共同登录\r\n11.4 为共享文件设置适当的访问权限\r\n11.5 小组成员的共同组\r\n11.6 通过链接实现文件共享\r\n11.6.1 硬链接\r\n11.6.2 硬链接的缺点\r\n11.6.3 软/符号链接\r\n11.6.4 符号链接的优点和缺点\r\n小结\r\n问题\r\n\r\n第12章 重定向与管道\r\n\r\n12.1 导言\r\n12.2 标准文件\r\n12.3 输入重定向\r\n12.4 输出重定向\r\n12.5 合并输入输出重定向\r\n12.6 带文件描述符的输入/输出重定向\r\n12.7 标准错误重定向\r\n12.8 在一个命令中重定向标准输出与标准错误\r\n12.9 在一个命令中重定向标准输入、标准输出与标准错误\r\n12.10 不覆盖文件内容的重定向(添加)\r\n12.11 UNIX管道\r\n12.12 重定向与管道结合使用\r\n12.13 C shell中的错误重定向\r\n12.14 输入输出和错误重定向的归纳总结\r\n小结\r\n问题\r\n\r\n第13章 进程\r\n\r\n13.1 导言\r\n13.2 同时运行多个进程\r\n13.3 UNIX进程状态\r\n13.4 shell命令的执行\r\n13.5 进程属性\r\n13.6 进程与作业控制\r\n13.6.1 前台进程与后台进程以及相关命令\r\n13.6.2 UNIX守护进程\r\n13.6.3 命令的顺序执行与并行执行\r\n13.6.4 命令与进程的异常终止\r\n13.7 UNIX的进程等级\r\n小结\r\n问题\r\n\r\n第14章 网络和互联网\r\n\r\n14.1 导言\r\n14.2 计算机网络与互联网\r\n14.3 使用计算机网络与互联网的原因\r\n14.4 网络模型\r\n14.5 TCP/IP协议族\r\n14.5.1 TCP和UDP\r\n14.5.2 应用数据的路由—Internet协议\r\n14.5.3 IPv4地址的点分十进制表示法\r\n14.5.4 符号名称\r\n14.5.5 从名称到IP地址的转换—域名系统\r\n14.6 Internet服务和协议\r\n14.7 客户-服务器软件模型\r\n14.8 应用软件\r\n14.8.1 显示主机名\r\n14.8.2 显示网络上正在使用主机的用户信息列表\r\n14.8.3 显示网络上主机的状态\r\n14.8.4 测试网络连接\r\n14.8.5 显示用户信息\r\n14.8.6 远程登录\r\n14.8.7 执行远程命令\r\n14.8.8 文件传输\r\n14.8.9 远程复制\r\n14.8.10 交互式聊天\r\n14.8.11 跟踪站点间的路由\r\n小结\r\n问题\r\n\r\n第15章 Bourne shell编程初步\r\n\r\n15.1 导言\r\n15.2 运行Bourne shell脚本\r\n15.3 shell变量与相关命令\r\n15.3.1 读写shell变量\r\n15.3.2 命令替换\r\n15.3.3 导出环境\r\n15.3.4 变量重置\r\n15.3.5 创建用户自定义的只读变量\r\n15.3.6 从标准输入读\r\n15.4 向shell脚本传递参数\r\n15.5 注释与程序头\r\n15.6 程序控制流命令\r\n15.6.1 if-then-elif-else-fi语句\r\n15.6.2 for语句\r\n15.6.3 while语句\r\n15.6.4 until语句\r\n15.6.5 break和continue命令\r\n15.6.6 case语句\r\n小结\r\n问题\r\n\r\n第16章 高级Bourne shell编程\r\n\r\n16.1 导言\r\n16.2 数值型数据的处理\r\n16.3 here文档\r\n16.4 中断(信号)处理\r\n16.5 exec命令与文件输入输出\r\n16.5.1 不创建新的进程执行命令\r\n16.5.2 使用exec命令进行文件输入输出\r\n16.6 Bourne shell函数\r\n16.6.1 使用函数的原因\r\n16.6.2 函数定义\r\n16.6.3 函数调用\r\n16.6.4 函数举例\r\n16.7 调试shell程序\r\n小结\r\n问题\r\n\r\n第17章 C shell编程初步\r\n\r\n17.1 导言\r\n17.2 运行C shell脚本\r\n17.3 shell变量与相关命令\r\n17.3.1 读写shell变量\r\n17.3.2 命令替换\r\n17.3.3 导出环境\r\n17.3.4 变量重置\r\n17.3.5 从标准输入读\r\n17.4 向shell脚本传递参数\r\n17.5 注释与程序头\r\n17.6 程序控制流命令\r\n17.6.1 if-then-else-endif语句\r\n17.6.2 foreach语句\r\n17.6.3 while语句\r\n17.6.4 break、continue和goto语句\r\n17.6.5 switch语句\r\n小结\r\n问题\r\n\r\n第18章 高级C shell编程\r\n\r\n18.1 导言\r\n18.2 数值型数据处理\r\n18.3 数组处理 \r\n18.4 here文档 \r\n18.5 中断(信号)处理 \r\n18.6 调试shell程序 \r\n小结\r\n问题\r\n\r\n第19章 文件系统备份\r\n\r\n19.1 导言\r\n19.2 使用tar归档和恢复文件\r\n19.2.1 文件归档 \r\n19.2.2 恢复归档文件 \r\n19.2.3 复制目录层次 \r\n19.3 以tar格式发布软件\r\n小结\r\n问题\r\n\r\n第20章 UNIX软件开发工具\r\n\r\n20.1 导言\r\n20.2 计算机编程语言\r\n20.3 编译过程 \r\n20.4 软件工程生命周期\r\n20.5 程序生成工具\r\n20.5.1 生成C源文件\r\n20.5.2 缩排C源代码\r\n20.5.3 编译C程序 \r\n20.5.4 处理基于模块的C软件 \r\n20.5.5 建立库中的目标文件7\r\n20.5.6 使用库 \r\n20.5.7 版本控制 \r\n20.6 静态分析工具 \r\n20.6.1 验证代码的可移植性 \r\n20.6.2 源代码度量分析 \r\n20.7 动态分析工具\r\n20.7.1 跟踪程序执行\r\n20.7.2 源代码调试\r\n20.7.3 运行时性能\r\n小结\r\n问题\r\n\r\n第21章 X Window系统—UNIX图形用户界面\r\n\r\n21.1 导言\r\n21.2 人机交互和X Window系统\r\n21.3 用户界面中窗口管理器的角色和fvwm\r\n21.3.1 窗口管理器界面的功能和外观\r\n21.3.2 fvwm的外观与操作\r\n21.4 定制X Window系统与fvwm\r\n21.4.1 在命令行修改X Window系统的应用程序\r\n21.4.2 修改.Xdefaults和.xinitrc初始文件中的优先设置\r\n21.4.3 定制fvwm窗口管理器时对.fvwmrc的典型修改\r\n小结\r\n问题\r\n\r\n附录 命令字典\r\n词汇表\r\n索引
日趋成熟的主题
衡量任何技术是否成熟的必要标准之一,要看该技术在产生它的学科中被接纳和标准化的程度。实用技术最初往往只是从奇特的(甚至是怪异的)假想中,慢慢发展成为一个标准的、规范的、更重要的是实用统一的体系结构。任何技术的成长都离不开整体科学技术的发展。
为什么要写这本书
在我们写这本书的时候,UNIX已经在计算机科学和工程领域达到了相当成熟的阶段,这使我们的工作显得迟了一步。同时,我们在大学里已有超过30年的实际教学经验。我们最初的写作冲动来自于:我们不愿意在教授UNIX这门课时,还要参考大量的材料。不管是汗牛充栋的UNIX参考材料,还是如“UNIX傻瓜书”这样的精简手册,都不能满足我们有意义、完整、相对入门地讲授UNIX主题这一要求。而且,通过课本的方式,配之以按章节讲授的实践操作和练习以及章后的问题,可以让我们把UNIX中所有重要的论题在课堂内以讲座—实验—作业的形式体现出来,从而达到最佳的学习效果(例如:深思熟虑的论题,及时完整的课程、实验和作业练习以及与书中章节同步的家庭作业/问题)。此外,由于这些论题所涉及的深度和广度,任何有志于将其中主题作为其专业研究方向的人士也会发现这本书相当有用。
本书的目的
我们的首要目标是向读者描述UNIX的应用用户接口(AUI),以及提供让读者深入了解系统内部工作的途径,同时还有一些重要的UNIX概念、数据结构、算法。重点是UNIX文件、进程概念和输入输出重定向。本书的第二个目标是向C语言软件与shell脚本的开发人员描述一些重要的UNIX软件工程工具。然而,我们不准备按照C语言库和UNIX系统调用的方式介绍UNIX应用程序员接口(API)。我们假定部分读者先前没有有关UNIX和编程的知识。
表达格式
书中包含了很多图表,章节中还有大量“示例”、“实践”、“练习”、“问题”等内容。针对每个命令、工具和应用程序,都以语法框的形式描述了命令的语法、作用、产生的输出结果,以及命令中一些选项和特征。此外,每章都有一个小结,专门概括总结这一章所涉及的内容。
如何讲授本书
如果本书是作为UNIX介绍性课程的主要课本,那么所有的章节都应该讲到(第20章可以除外)。如果本书是和其他书一起作为操作系统概念和原理课程的课本,那么讲授的内容就应该根据有关的论题来决定,但应该包含第7章、12章和13章。
如果本书是用在C语言或shell编程的课程中,那么第7~20章和第3~6章中相关的部分将对学习有很大的帮助。至于第20章究竟要讲授多少,这取决于课程本身—介绍性的课程中可以只讲一部分,高级课程中可以全讲。
补充资料
在http://lhotse.up.edu/可以找到详细的相关信息,包括一些章节练习的解答、源代码、有关UNIX方面的详细参考资料和网站的链接。也可以从Addison Wesley的网站www.awl.com/cseng/titles/0-201-61260-7获得上述网站的链接。
我们将对本书中所有的错误负责。读者可以向sarwar@egr.up.edu(或者sarwar@up.edu)和bobk@egr.up.edu(或者bobk@up.edu)发送错误报告以及对我们的建议。我们将在随后的版本中吸纳这些反馈意见并纠正错误。