内容简介
本书是目前所能找到的最实用、最全面的Linux指南和参考手册,也是唯一一本提供以下全部内容的书籍:
更好更实用的示例覆盖了实际工作中需要执行的任务;基于作者对Linux的渊博知识,本书提供了更加深入的理解;为从aspell到xargs等80多个工具提供了更加实用的讲解;使用ssh和scp的安全通信实现技术,以及多处让系统更加安全的提示;很好地介绍了Linux编程环境,包括make、gcc、gdb、CVS等;关于使用bash和tcsh进行基本的和高级的shell编程的专家指南;定制shell以及在命令行上交互使用shell的提示和技巧;提供了vim和emacs的详细指南,目的是为了帮助读者提高编辑效率;大量练习将有助于提高读者的动手能力并获得自信心;介绍了如何使用Apt、yum和BitTorrent自动更新系统;还介绍了gawk、sed、find、sort、bzip2和正则表达式等内容。
本书阐述了如何通过命令行方式使用Linux操作系统。本书前几章面向没有计算机使用经验的读者,阅读这部分内容将能够使其快速上手。剩余部分则主要针对熟练的计算机用户。本书并不针对特定的Linux版本或者某个发行版本,而是适用于所有近期发布的Linux版本。 命令行接口 在计算机刚诞生的时候,只有命令行(文本)界面(Command Line Interface,CLI),可以通过命令行向Linux输入命令。那时还没有鼠标和图标,也就不能通过拖放方式进行操作。某些程序(像emacs)使用ASCII字符集中非常有限的图形字符实现了基本的窗口。反白显示技术可将计算机屏幕分割成几个区域。Linux就是在这样的环境中诞生和发展起来的。 很自然地,早期的Linux工具都通过命令行方式调用。Linux的真正威力还是体现在这样的环境中,这也是很多Linux专家非命令行不用的原因。本书通过清晰的阐述和详实的示例,向读者展示了如何通过命令行方式最有效地使用Linux系统。 Linux发行版 Linux发行版包括了Linux内核、工具以及应用程序。目前已有多个发行版,包括Debian、Red Hat、Fedora Core、SUSE、Mandriva(前身为Mandrake)、KNOPPIX和Slackware等。尽管这些发行版之间有着各种各样的差别,但它们都依赖于Linux内核、工具和应用程序。本书阐述的内容将基于那些在绝大多数发行版上通用的程序。因此,无论使用的Linux发行版是什么,读者都可以使用这些程序。 内容重叠 如果读者读过A Practical Guide to Red Hat Linux: Fedora Core and Red Hat Enterprise Linux第2版或者后续版本,那么将会发现该书的内容和本书有所交叠。两本书的简介、正则表达式附录以及关于工具的章节(本书第3章,而不是第Ⅴ部分)、文件系统和编程工具非常类似。本书扩展并重写了Bourne Against Shell(bash),还包括了A Practical Guide to Red Hat Linux第2版中没有的几章:关于vim和emacs编辑器、TC Shell(tcsh)、gawk和sed脚本语言,以及第Ⅴ部分。其中第Ⅴ部分详细描述了80多个最常用的Linux工具。 面向读者 本书适合于不同层次的读者。尽管具备一些使用通用计算机的经验将有助于读者更好地理解本书内容,但本书不要求读者具备编程能力。本书适合于下列读者: ● 学生 上课时要用到Linux。 ● 高级用户 希望学习如何通过命令行使用Linux。 ● 专家 日常工作中使用Linux。 ● 系统管理员 需要对Linux和用到的工具进行深入的理解。 ● 计算机系的学生 学习Linux操作系统。 ● 程序员 需要了解Linux编程环境。 ● 技术主管 需要Linux基础知识。 优势 本书将使读者对如何使用Linux命令行有一个深入的认识。无论读者的背景如何,本书都将为读者提供工作中将会用到的知识:脱离本书,读者将知道如何使用Linux,并且在未来数年中,本书都将是一本有用的参考书。 本书特色 本书经过精心组织,以便读者在不同的条件下都可以方便地阅读。举例来说,读者可以逐页地阅读本书,从基本内容开始学习Linux命令行。此外,一旦读者能够熟练地使用Linux,本书将会成为一本参考书:从目录中或者通过索引查找感兴趣的部分,然后开始阅读。又或者,可以查阅本书第Ⅴ部分中所包含的工具。读者还可以将本书作为Linux主题目录:翻开本书直到找到自己想看到的主题。本书还给出了很多Web站点的链接,读者可以获取其他信息:可以将Web视为本书内容的延伸。 本书具备以下特色: ● 可选章节:读者可以在不同阶段阅读本书,当读者可以应付那些更加复杂的内容时再回过头来阅读。 ● 警告框:针对那些容易出错的地方,本书将突出显示,这样就可以在读者遇到麻烦之前给予指导。 ● 提示框:本书中一些被突出的内容将提示读者可以使用不同的方式更加高效地完成某个任务;或者这些内容很有用,或者仅仅为读者提供一些有趣的信息。 ● 安全提示框:指出可以使系统更加安全的方法。 ● Web网站支持:包括了本书的勘误表、书中可下载的示例、一些有用的Web网站的链接以及偶数编号题目的解答。 ● 整本书通过实例讲解各种概念。 ● 书中包含了许多有用的URL(Internet地址),从这些网站中读者可以找到软件和相关信息。 ● 每章都有一个“本章小结”,用于回顾该章包含的重要知识点。 ● 每章后面都有练习题,读者可用来巩固所学技能。网站上有偶数编号练习题的解答。 ● 本书详细描述了一些重要的GNU工具,如gcc、gdb、GNU配置和构建系统、make、gzip和很多其他工具。 ● 书中还包含了一些有用的知识,有助于读者从很多资源(包括本地系统和Internet)获取在线文档。 本书内容 本节将描述每章所包含的内容,并解释这些信息如何有助于发挥Linux的威力。可以浏览目录以获取更加详细的信息。 第Ⅰ部分:Linux操作系统 熟练的用户可能希望跳过第Ⅰ部分 提示 如果读者以前使用过UNIX或Linux系统,可能想直接跳过第Ⅰ部分的部分章节或者全部章节。所有读者都应该看一下“本书约定”(这部分解释了本书使用的排版约定)以及第2.5节(可以找到Linux文档的本地资源和远程资源)。 第Ⅰ部分介绍了Linux并教读者如何开始使用它。 第1章 欢迎进入Linux世界 第1章介绍了Linux的背景知识。该章包括Linux的历史,阐述了GNU项目如何帮助启动了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下的编程。这部分将描述C编程环境,将bash作为编程语言使用,以及讲述使用gawk和sed编写程序的方法。 第10章 C的编程 介绍Linux的编程环境,内容包括: ● 解释如何调用GNU gcc编译器。 ● 描述如何使用make来更新一组程序。 ● 解释如何使用gdb调试C程序。 ● 描述如何使用共享库。 ● 解释如何建立并使用CVS,在软件开发项目中管理和跟踪程序模块。 ● 讨论系统调用并解释如何使用系统调用进行内核操作。 一旦读者掌握了Linux基础,就可以使用已有的知识,采用shell作为编程语言来构建更加复杂和专用的程序。 第11章 Bash(Bourne Again Shell)程序设计 第11章给出了使用bash编写高级shell脚本的用法。该章将讨论: ● 控制结构,如if…then…else和case。 ● 变量,包括变量的局部性。 ● 算法和逻辑(布尔)表达式。 ● 一些最有用的shell内置命令,包括exec、trap和getopts。 第11章首先提出了两个完整的shell脚本编程问题,然后给出了如何一步步地解决这些问题。第1个问题是使用递归来创建一个目录层次。第2个问题是开发一个迷宫程序,并介绍如何建立一个脚本与用户进行交互以及脚本如何处理数据(第Ⅴ部分的例子也演示了在shell脚本中用到的工具的很多功能)。 第12章 gawk模式处理语言 第12章描述了如何使用强大的gawk语言编写程序,这些程序可以过滤数据、撰写报告并从Internet上获取数据。第12.7节描述了如何使用coprocess与另一个程序建立双向通信,以及如何通过网络而不是从本地文件获取数据。 第13章 sed编辑器 第13章描述了sed,它是一个非交互式的流编辑器,很多应用程序在shell脚本中作为过滤器。该章将讨论如何使用sed的缓冲区来编写简单但功能强大的程序,同时还给出了很多例子。 第Ⅴ部分:命令参考 Linux包含了数以百计的工具。第11章和第12章和第Ⅴ部分一样,给出了最重要的80个工具的使用范例,使用这些工具,用户可以不必使用C语言编程就可以解决问题。如果读者已经熟悉了UNIX/Linux,本书这部分将是一个有价值且易用的参考手册。如果读者并不是一个非常有经验的用户,那么在掌握本书较容易章节的同时,这部分可以作为一个有用的补充。 尽管第11章和第12章和第Ⅴ部分中工具的描述内容采用的格式类似于Linux手册页(man),但这部分内容将要更加易于阅读和理解。这些工具是经过挑选的,因为它们是日常工作中要用到的(比如ls和cp),或者因为它们在shell脚本中特别有用(如sort、paste和test),又或者因为它们有助于使用Linux系统(如ps、kill和fsck),还因为它们可用来与其他系统进行通信(如ssh、scp和ftp)。每个工具的描述均包括它的最有用的选项的完整描述。“讨论”和“注意”段落为充分利用该工具的一些提示和技巧。“示例”段落演示了如何在实际工作中使用这些工具,单独用一个程序或者与其他工具一起,完成诸如产生报告、摘要数据以及提取信息等任务。看看gawk(数十页内容)、ftp和sort三个工具的“示例”段落,就可以知道这些章节里面的信息非常丰富。 第Ⅵ部分:附录 第Ⅵ部分为附录和术语表。 附录A 正则表达式 讲解如何使用正则表达式以充分利用Linux的潜在威力。很多工具,包括grep、sed、vim和gawk等,可以接受正则表达式来代替简单的字符串。单个的正则表达式可以匹配很多简单的字符串。 附录B 获取帮助 详细描述了在使用Linux系统时遇到的问题的典型解决步骤。该附录还包括了很多Web站点的链接,这些站点提供了文档资料、有用的Linux信息、邮件列表和软件。 附录C 更新系统 讲解如何使用工具下载软件并更新系统。该附录内容包括: ● yum 从Internet上下载软件,更新系统并可以自动解决软件相关性。 ● Apt yum的一个替代品,同样用于系统更新。 ● BitTorrent 适合于发布大量数据,比如Linux的安装CD。 附录D 术语表 定义了与Linux使用相关的五百多条术语。 补充 本书作者的网站主页包含了一些可以下载的书中的较长程序列表,还有很多有趣和有用的与Linux相关的www站点的链接,本书的勘误表、偶数编号习题的解答以及恳请指正、意见和建议。 致谢 首先我想感谢Prentice Hall出版社的Mark L. Taub编辑,感谢他鼓励和鞭策我。Mark是我遇到的很特别的一个人:他是一个正在使用我这本书中介绍的这些工具的编辑。因为Mark在他自己家里的PC上运行Linux,因此在编写这本书时我们可以交流使用经验。他的意见和指导非常有用,再次对他表示感谢。 非常感谢那些通读本书初稿的人们,他们给我提出了很多宝贵的意见,使得我关注书中那些不够清晰的部分或者被遗漏的部分,他们是:哈佛大学的Lars Kellogg-Stedman、Principal Systems Consultant, Privateer Systems, LLC的Jim A. Lola、Open Source Initiative的共同创始人Eric S. Raymond、Independent Computer Consultant的Scott Mann、Randall Lechlitner、Montgomery郡社区学院计算机教员 Jason Wertz、Solano社区学院的Justin Howell、加速学习中心的Ed Sawicki、Contechst的David Mercer、Jeffrey Bianchine(律师、作家兼记者)John Kennedy、Chris Karr以及Starshine技术服务公司的Jim Dennis。 感谢ContentWorks的产品经理Molly Sharp,是他确保本书能够如期出版。同时感谢审稿人Jill Hobbs,他使得本书符合英语语言规范。在此还要感谢Prentice Hall出版社那些帮助本书问世的人们:宣传员Heather Fox、市场经理Suzette Ciancio、执行市场经理Robin O’Brien、全职产品经理Julie Nahil、编辑助理Noreen Regina以及为本书问世付出辛勤劳动的每个幕后人员。 在此还要感谢The Free On-Line Dictionary of Computing(FOLDOC)的编辑Dennis Howe。Dennis允许我使用他的编纂中的条目。请一定要访问该字典。 感谢Brian Kernighan博士和Rob Pike,他们允许我再版他们UNIX Programming Environment(Prentice Hall出版社1984年出版)一书中的脚本包。 《Linux命令、编辑器与Shell编程》中的部分章节来自于我以前写的一本Linux书籍,在此也要感谢为那本书出版付出努力的人们。 感谢杰出的计算机科学家David Chisnall、软件工程师和KDE开发者Carsten Pfeiffer、Ximian公司的Aaron Weber、Boston大学的Matthew Miller、CritterDesign公司的Cristof Falk、IBM公司的系统管理和集成专家Scott Mann、Princeton大学的Steven Elgersma、Minnesota 大学的Scott Dier、Computer Net Works公司的Robert Haskins。 还要感谢Puryear 信息技术公司的Dustin Puryear、独立咨询专家Gabor Lipak、iPost首席技术官Bart Schaefer、Linux在线公司的Web开发者Michael J. Jordan、网站所有者Steven Gibson、Security Software公司创始人和首席科学家John Viega、Global Crossing公司的Internet安全分析专家K. Rachael Treu、K&S Pritchard Enterprises公司的Kara Pritchard、Captitol One Finances公司的Glen Wiley、Looksmart公司的资深软件工程师Karel Baloun、MatthewWhitworth、Nokia系统公司的Dameon D. Welch-Abernathy、咨询专家Josh Simon、Stan Isaacs、Herrin软件开发公司的副总裁Eric H. Herrin II博士。同时感谢Doug Hughes,他长期作为系统设计者和管理员,在系统管理、网络、Internet和编程等章节给予了我很大帮助。 更要感谢咨询专家Lorraine Callahan和Steve Wampler、Graburn技术公司的Ronald Hiller、Wayne州立大学的Charles A. Plater、Bob Palowoda、Sun Microsystems公司的Tom Bialaski、Network Associates公司的TIS实验室的Roger Hartmuller、Kaowen Liu、Andy Spitzer、Rik Schneider、Jesse St. Laurent、Steve Bellenot、Ray W. Hiltbrand、Jennifer Witham、Gert-Jan Hagenaars和Casper Dik。 《Linux命令、编辑器与Shell编程》部分基于我写的前两本书:UNIX System V: A Practical Guide和A Practical Guide to UNIX System。这些书的出版得到了很多人的帮助,我在这里感谢:Pat Parseghian、Kathleen Hemenway博士、Brian LaRose、Clark Atlanta大学的Byron A. Jeff、Charles Stross、Lucent Technologies公司的Jeff Gitlin、Kurt Hockenbury、Intel Israel公司的Maury Bach、Peter H. Salus、Pennsylvania大学的Rahul Dave、Intelligent Algorithmic Solutions公司的Sean Walton、Computer Sciences公司的Tim Segall、DeAnza大学的Behrouz Forozan、Virginia Polytechnic Institute and State University的Mike Keenan、Oregon州立大学的Mike Johnson、Maryland大学的Jandelyn Plane、Georgia技术研究所的Arnold Robbins和Sathis Menon、Virginia Polytechnic Institute and State University的Cliff Shaffer,California州立大学Northridge分校的Steven Stepanek评论了本书。 在此还要继续感谢许多为我早期的UNIX书籍出版给与过帮助的人们。特别要感谢:Roger Sippl、Laura King和Roy Harrington,是他们将我引入UNIX系统。我的母亲Helen Sobell博士多次给我的原始手稿提出过宝贵的意见和建议。另外,感谢Isaac Rabinovitch、Raogael Finkel教授、Randolph Bentson教授、Bob Greenberg、Udo Pooch教授、Judy Ross、Robert Veroff博士、Mike Denny博士、Joe DiMartino、John Mashey博士、Diane Schulz、Robert Jung、Charles Whitaker、Don Cragun、Brian Dougherty、Robert Fish博士、Guy Harris、Ping Liao、Gary Lindgren、Jarrett Rosenberg博士、Peter Smith博士、Bill Weber、Mike Bianchi、Scooter Morris、Clarke Echols、Oliver Grillmeyer、David Korn博士、Scott Weikart博士和Richard Curtis博士。 本书中出现的任何错误和纰漏都是我的责任。如果读者发现错误之处或者有什么意见和建议,请告诉我(mgs@sobell.com)。我将在下次印刷时更正。我的主页中包括一个错误列表和发现这些错误的人员列表。这个网站上还有本书中比较长的脚本以及许多其他有趣的Linux网页的链接。 Mark G. Sobell San Francisco, Californ