前 言 Linux 《Linux命令、编辑器与shell编程(第2版)》阐述了如何通过命令行方式使用Linux操作系统。本书前几章面向没有计算机使用经验的读者,阅读这部分内容将能够使其快速上手。剩余部分则主要针对经验丰富的计算机用户。本书并不针对特定的Linux版本或者某个发布版,而是适用于所有近期发布的Linux版本。 Mac OS X 本书还解释了如何使用Mac OS X的UNIX/Linux基本功能。这部分内容“直指核心”,跳过了大多数人以为是Macintosh的传统图形用户界面(GUI),讨论了如何使用与OS X直接相连的强大的命令行界面(CLI)。与Linux版本一样,本书也不针对OS X的特定版本,而是适用于所有近期发布的OS X版本。在本书中主要指Linux,但它也隐含了Mac OS X,并指出了这两种操作系统之间的区别。 命令行界面 在计算机刚诞生的时候,只有命令行(文本)界面(Command Line Interface,CLI),可以通过命令行向Linux输入命令。那时还没有鼠标和图标,也就不能通过拖放方式进行操作。某些程序(如emacs)使用ASCII字符集中非常有限的图形字符实现了基本的窗口。反白显示技术可将计算机屏幕分割成几个区域。 Linux就是在这样的环境中诞生和发展起来的。很自然地,早期的所有Linux实用程序都通过命令行方式调用。Linux的真正功能还体现在这样的环境中,这也是很多Linux专家非命令行不用的原因。本书通过清晰的阐述和详实的示例,向读者展示了如何通过命令行方式最有效地使用Linux系统。 Linux发布版 Linux发布版包括了Linux内核、实用程序以及应用程序。目前已有多个发布版,包括Ubuntu、Fedora、Red Hat、Mint、OpenSUSE、Mandriva、CentOS和Debian等。尽管这些发布版之间有着各种各样的差别,但它们都依赖于Linux内核、实用程序和应用程序。本书阐述的内容将基于那些在绝大多数发布版上通用的代码。因此,无论使用的Linux发布版是什么,读者都可以使用这些程序。 第2版的新内容 第2版包含许多全新和更新的内容: ● 全书涵盖了Mac OS X命令行界面。第V部分介绍了Mac OS X的实用程序,突出了Linux和Mac OS X下的实用程序选项之间的区别。 ● 新增了一章介绍Perl脚本语言(第11章)。 ● 新增了一章介绍rsync安全复制实用程序(第14章)。 ● 第V部分多了至少15个新实用程序,包括一些只在Mac OS X下可用的实用程序。 内容重叠 如果读者读过A Practical Guide to Red Hat® Linux®: FedoraTM and Red Hat Enterprise Linux(第4版)或者A Practical Guide to Ubuntu® Linux(第2版),或者这两本书的后续版本,就会发现该书的内容和本书有所交叠。它们的简介、关于正则表达式的附录以及关于实用程序的章节(第3章,而不是第Ⅴ部分)、文件系统、Bourne Against Shell(bash)和Perl非常类似。本书还包括了上述两本书中没有的几章:vim和emacs编辑器、TC Shell(tcsh)、AWK和sed脚本语言、rsync实用程序以及第Ⅴ部分。其中第Ⅴ部分详细描述了最常用的Linux和Mac OS X实用程序。 面向读者 本书适合于不同层次的读者。尽管具备一些使用计算机的经验将有助于读者更好地理解本书的内容,但本书不要求读者具备编程经验。本书适合于下列读者: ● 学生 上课时要用到Linux或Mac OS X。 ● 高级用户 希望学习如何通过命令行探究Linux或Mac OS X的功能。 ● 专家 日常工作中使用Linux或Mac OS X。 ● Macintosh新用户 希望了解UNIX/Linux是什么,为什么每个人都说它很重要,以及如何使用它。 ● 有经验的Macintosh用户 希望知道如何利用作为Mac OS X的基础的UNIX/Linux功能。 ● UNIX用户 希望把他们的UNIX技巧应用于Linux或Mac OS X环境。 ● 系统管理员 需要对Linux或Mac OS X和可用的实用程序进行更深入的理解,包括bash和Perl脚本语言。 ● 计算机系的学生 学习Linux或Mac OS X操作系统。 ● 程序员 需要理解Linux或Mac OS X编程环境。 ● 技术主管 需要学习Linux或Mac OS X基础知识。 优势 《Linux命令、编辑器与shell编程(第2版)》将使读者对如何通过命令行使用Linux和Mac OS X有深入的认识。无论读者的背景如何,本书都将为读者提供工作中将会用到的知识:通过本书,读者将学会如何使用Linux/OS X,并且在未来数年中,本书都将是一本有用的参考书。 Macintosh系统有大量可用的免费软件。另外,Macintosh共享软件社区也非常活跃。本书介绍了Mac OS X的UNIX/Linux方面,为Macintosh用户使用可用于Linux和其他类UNIX系统的大量免费或低成本软件铺平了道路。 本书中的Linux表示Linux和Mac OS X 提示 UNIX操作系统是Linux和Mac OS X的共同祖先,尽管这两种操作系统的图形用户界面(GUI)显著不同,但命令行界面(CLI)非常类似,在许多方面都相同。本书描述了Linux和Mac OS X的CLI。为了便于阅读,本书使用Linux表示Linux和Mac OS X,并明确标注出这两种操作系统不同的地方。 本书特色 本书经过精心组织,以便读者在不同的条件下都可以方便地阅读。例如,读者可以逐页地阅读本书,从基本内容开始学习Linux命令行。此外,一旦读者能够熟练地使用Linux,本书就会成为一本参考书:从目录中或者通过索引查找感兴趣的部分,然后开始阅读。又或者,可以查阅本书第Ⅴ部分包含的实用程序。读者还可以将本书作为Linux主题的目录:翻阅本书,直到找到想看的主题。本书还给出了很多Web站点的链接,读者可以获取其他信息:可以将Internet视为本书内容的延伸。 《Linux命令、编辑器与shell编程(第2版)》具备以下特色: ● 可选章节允许读者在不同阶段阅读本书,当读者可以解决更加复杂的问题时再回过头来阅读它。 ● 针对那些容易出错的地方,本书将突出显示警告框,这样就可以在读者遇到麻烦之前给予指导。 ● 本书中一些突出的提示框将提示读者可以使用不同的方式更加高效地完成某个任务;或者这些内容很有用,或者仅仅为读者提供一些有趣的信息。 ● 安全提示框指出可以使系统更加安全的方法。 ● Web网站支持:包括了本书的勘误表、书中可下载的示例、一些有用的Web网站的链接以及偶数编号题目的答案。 ● 整本书通过实例讲解各种概念。 ● 书中包含了许多有用的URL(Internet地址),从这些网站中读者可以找到软件和相关信息。 ● 每章都有一个“本章小结”,用于回顾本章包含的重要知识点。 ● 每章末尾都有练习题,读者可用来巩固所学技能。在网站上有偶数编号练习题的答案。 ● 本书详细描述了一些重要的GNU实用程序,如gcc、GNU配置和构建系统、make、gzip和很多其他实用程序。 ● 本书还包含了一些有用的链接,有助于读者从很多资源(包括本地系统和Internet)获取联机文档。 ● 详细介绍了苹果公司专门为Mac OS X开发的重要命令行实用程序,包括diskutil、ditto、dscl、GetFileInfo、launchctl、otool、plutil和SetFile。 ● 描述了Mac OS X的一些扩展属性,包括文件派生、文件属性、属性标记和访问控制列表(Access Control List,ACL)。 ● 附录D列出了Mac OS X和Linux的一些区别。 本书内容 本节将描述每章包含的内容,并解释这些信息如何有助于利用Linux的功能。可以浏览目录以获取更加详细的信息。 第1章 欢迎进入Linux和世界 第1章介绍了Linux和Mac OS X的背景知识。本章包括Linux的历史,描述了OS X的Mach内核,阐述了GNU项目如何帮助启动了Linux,并讨论了Linux区别于其他操作系统的一些重要特性。 第Ⅰ部分:Linux操作系统 熟练的用户可能希望跳过第Ⅰ部分 提示 如果读者以前使用过UNIX或Linux系统,可能想直接跳过第Ⅰ部分的部分章节或者全部章节。所有读者都应该看一下“本书约定”(这部分解释了本书使用的排版约定)以及2.5节(可以找到Linux文档的本地资源和远程资源)。 第Ⅰ部分介绍了Linux并教读者如何开始使用它。 第2章 入门 第2章解释了本书使用的版式约定。这些版式使得描述更加清晰,更加便于读者阅读。该章给出了一些基本知识,并解释了如何登录系统和修改密码,还讲述了在shell中输入Linux命令以及查找系统文档的方法。 第3章 实用程序 第3章讲解了命令行界面(CLI),并简要介绍了超过30个命令行实用程序。阅读本章,读者将对Linux有一个认识,同时该章还介绍了日常使用的一些实用程序。本章介绍的实用程序包括: ● grep 在文件中搜索字符串。 ● unix2dos 将Linux文本文件转换成Windows格式。 ● tar 创建包含多个文件的存档文件。 ● bzip2和gzip 压缩文件以节省磁盘空间,并且可以在网络上更加快速地传输。 ● diff 显示两个文本文件的差异。 第4章 Linux文件系统 第4章讨论了Linux层次结构的文件系统,包括文件、文件名、路径名、使用目录、访问权限、硬链接和符号连接。理解文件系统将有助于组织数据,以便快速地查找信息。还可以与其他用户共享某些文件,同时保持其他文件为私有文件。 第5章 shell 第5章阐述了如何使用shell的特性,以更加高效、方便地工作。本章讲述的所有功能可用于bash和tcsh。本章将讨论: ● 使用命令行选项改变某条命令的工作方式。 ● 如何在一个命令行中进行少量修改就可以将一条命令的输入从键盘输入重定向到文件。 ● 如何将命令行的输出从屏幕重定向到文件。 ● 使用管道将一个实用程序的输出直接发送到另一个实用程序,这样就可以用命令行解决问题了。 ● 在后台运行程序,这样Linux可以在执行一个任务的情况下,同时执行另一个任务。 ● 使用shell自动生成文件名,以节省输入时间,同时在用户不记得文件的精确文件名时也非常有用。 第Ⅱ部分:编辑器 第Ⅱ部分包括两个经典的强大的Linux命令行文本编辑器。绝大多数Linux发布版均包含vim文本编辑器,它是广泛使用的vi编辑器和同样流行的GNU emacs编辑器的“增强”版。使用文本编辑器可创建和修改文本文件,这些文本文件包括程序、shell脚本、备忘录以及文本格式化程序的输入数据。因为Linux系统管理涉及编辑基于文本的配置文件,所以有经验的Linux管理员应很熟练地使用文本编辑器。 第6章 vim编辑器 第6章首先介绍vim编辑器的使用手册,然后阐述了如何使用vim的许多高级功能,包括搜索字符串中的特殊字符、通用缓冲区和命名缓冲区、参数、标记以及在vim中执行命令。该章末尾总结了vim的命令。 第7章 emacs编辑器 第7章首先介绍emacs的使用手册,然后介绍emacs编辑器的很多高级功能,还包括META、ALT和ESCAPE键的使用。本章还包括键绑定、缓冲区以及字符串和正则表达式的增量搜索和完全搜索。另外,本章还详细讲解了指针、光标、标记和区域的关系。同时还介绍了如何利用emacs的大量在线帮助功能。其他主题包括剪切和粘贴、多窗口和多帧的使用以及emacs模式的使用(特别是C模式,可以辅助程序员编写和调试C代码)。第7章末尾总结了emacs的命令。 第Ⅲ部分:shell 第Ⅲ部分更加详细地讲解了bash的用法和TC Shell(tcsh)。 第8章 Bourne Again Shell 第8章承接第5章,内容包括shell更高级的用法。例如,本章使用Bourne Again Shell即bash,系统shell脚本几乎只使用这种shell。第8章的内容包括: ● 使用shell启动文件、shell选项和shell特性来定制shell。 ● 使用作业控制机制停止作业,将作业从前台转移到后台执行,或者是将其从后台转移到前台执行。 ● 使用shell历史列表来修改和重新执行命令。 ● 创建别名以定制命令。 ● 在shell脚本中使用用户创建的变量和关键字变量。 ● 创建函数,该函数类似于shell脚本,但执行得更快。 ● 编写并执行简单的shell脚本。 ● 重定向错误消息,将错误消息输出到文件中而不是输出到屏幕上。 第9章 TC shell 第9章描述了tcsh,并讨论了bash和tcsh的异同点。本章将描述: ● 运行tcsh并将默认的shell修改为tcsh。 ● 重定向错误消息,将错误消息输出到文件中而不是输出到屏幕上。 ● 使用控制结构来改变shell脚本中的控制流。 ● 使用tcsh的数组和数值变量。 ● 使用shell的内置命令。 第Ⅳ部分:编程工具 第Ⅳ部分涵盖了Linux和Mac OS X系统管理中广泛使用的编程实用程序和一般用途的编程。 第10章 Bash程序设计 第10章承接第8章,给出了使用bash编写高级shell脚本的用法,并通过详实的示例来讨论。该章将讨论: ● 控制结构,如if…then…else和case。 ● 变量,包括变量的局部性。 ● 算法和逻辑(布尔)表达式。 ● 一些最有用的shell内置命令,包括exec、trap和getopts。 一旦读者掌握了Linux的基础,就可以使用已有的知识,采用shell作为编程语言来构建更加复杂和专业的程序。 第10章首先提出了两个完整的shell编程问题,然后说明如何一步步地解决这些问题。第1个问题使用递归来创建一个目录层次结构。第2个问题开发一个迷宫程序,并介绍如何创建shell脚本与用户进行交互,以及脚本如何处理数据(第Ⅴ部分的例子也揭示了在shell脚本中用到的实用程序的很多功能)。 第11章 Perl脚本语言 介绍流行的、功能丰富的Perl编程语言,内容包括: ● Perl帮助实用程序,包括perldoc。 ● Perl变量和控制结构。 ● 文件处理。 ● 正则表达式。 ● CPAN模块的安装和使用。 许多Linux管理脚本都是用Perl编写的。阅读了第11章后,读者就可以更好地理解这些脚本,并可以开始编写自己的脚本。该章还包含Perl脚本的许多示例。 第12章 AWK模式处理语言 第12章描述了如何使用强大的AWK语言编写程序,这些程序可以过滤数据、撰写报告并从Internet上获取数据。12.7节描述了如何使用coprocess与另一个程序建立双向通信,以及如何通过网络而不是从本地文件获取数据。 第13章 sed编辑器 第13章描述了sed,它是一个非交互式的流编辑器,很多应用程序在shell脚本中作为过滤器。该章将讨论如何使用sed的缓冲区来编写简单但功能强大的程序,同时还给出了很多例子。 第14章 rsync安全复制实用程序 第14章描述了rsync实用程序,这是一个安全实用程序,它可以在本地系统上复制普通文件或目录层次结构,也可以在本地系统和网络上的另一个系统之间复制普通文件或目录层次。编写程序时,可以使用这个实用程序把文件或目录备份到另一个系统上。 第Ⅴ部分:命令参考 Linux包含了数以百计的实用程序。第12~14章以及第Ⅴ部分给出了最重要的100个实用程序的使用范例,使用这些实用程序,用户在解决问题时就不必使用C语言编程。如果读者已经熟悉UNIX/Linux,该部分就是一个有价值且易用的参考手册。如果读者并不是一个非常有经验的用户,那么在掌握本书前面的章节时,这部分可以作为一个有用的补充。 尽管第12~14章以及第Ⅴ部分描述实用程序采用的格式类似于Linux手册(man)页,但这部分内容更易于阅读和理解。这些实用程序是经过挑选的,因为它们是日常工作中经常使用的(如ls和cp),或者因为它们是shell脚本中特别有用的工具(如sort、paste和test),或者因为它们有助于使用Linux系统(如ps、kill和fsck),或者因为它们可用来与其他系统进行通信(如ssh、scp和ftp)。每个实用程序的描述均包括其最有用的选项的完整描述,并指出Mac OS X和Linux所支持选项的区别。“讨论”和“注意”部分为充分利用该实用程序的一些提示和技巧。“示例”部分说明了如何在实际工作中使用这些实用程序,单独用一个程序或者与其他实用程序一起,完成诸如生成报告、摘要数据以及提取信息等任务。看看AWK、ftp和sort 3个实用程序的“示例”部分,就可以看出这些部分的信息非常丰富。 第Ⅵ部分:附录 第Ⅵ部分为附录、术语表,本部分内容和相关源代码见随书附赠光盘。 附录A 正则表达式 讲解如何使用正则表达式以充分利用Linux的潜在功能。很多实用程序,包括grep、sed、vim、AWK和Perl等,可以接受正则表达式来代替简单的字符串。单个正则表达式可以匹配很多简单的字符串。 附录B 获取帮助 详细描述了在使用Linux系统时遇到的问题的典型解决步骤。该附录还包括了很多Web站点的链接,这些站点提供了文档、有用的Linux和Mac OS X信息、邮件列表和软件。 附录C 更新系统 讲解如何使用实用程序下载软件并更新系统。该附录包括: ● yum 从Internet上下载软件,更新系统并可以自动解决软件依赖性问题。 ● apt-get yum的一个替代品,同样用于系统更新。 ● BitTorrent 适合于发布大量数据,如Linux的安装CD。 附录D Mac OS X注意事项 为一直使用Linux或其他类UNIX系统且不熟悉Mac OS X的用户简要介绍了Mac OS X的功能和特点。 附录E 术语表 定义了与使用Linux和Mac OS X相关的500多个术语。 补充 本书作者的网站主页包含了书中一些可以下载的较长程序列表,还有很多有趣和有用的与Linux和OS X相关的万维网站点的链接,本书的勘误表、偶数编号习题的答案以及恳请指正、意见和建议。