ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Linux宝典(第9版)

Linux宝典(第9版)

原创 Linux操作系统 作者:qinghuawenkang 时间:2018-10-30 10:11:38 0 删除 编辑


SQL Server 数据库经典译丛
Linux 宝典
( 9 )
[ ] Christopher Negus
王净 田洪 译
北 京

Christopher Negus
Linux Bible, Ninth Edition
EISBN
978-1-118-99987-5
Copyright © 2015 by John Wiley & Sons, Inc., Indianapolis, Indiana
All Rights Reserved. This translation published under license.
Trademarks: Wiley and the Wiley logo are trademarks or registered trademarks of John Wiley & Sons, Inc.
and/or its affiliates, in the United States and other countries, and may not be used without written permission.
Linux is a registered trademark of Linus Torvalds. All other trademarks are the property of their respective
owners. John Wiley & Sons, Inc. is not associated with any product or vendor mentioned in this book.
本书中文简体字版由 Wiley Publishing, Inc. 授权清华大学出版社出版。未经出版者书面许可,不得以任何方式
复制或抄袭本书内容。
北京市版权局著作权合同登记号 图字:
01-2015-3644
Copies of this book sold without a Wiley sticker on the cover are unauthorized and illegal.
本书封面贴有 Wiley 公司防伪标签,无标签者不得销售。
版权所有,侵权必究。侵权举报电话:
010-62782989 13701121933
图书在版编目 (CIP) 数据
Linux 宝典(第 9 版)/(美) 尼格斯 (Negus, C.) 著;王净,田洪译. —北京:清华大学出版社,2016
(2018.3 重印)
书名原文:Linux Bible, Ninth Editon
ISBN 978-7-302-43383-5
Ⅰ. ①L… Ⅱ. ①尼… ②王… ③田… Ⅲ. ①Linux 操作系统 Ⅳ. ①TP316.89
中国版本图书馆 CIP 数据核字(2016)第 069926 号
责任编辑:王 军 韩宏志
装帧设计:牛艳敏
责任校对:成凤进
责任印制:杨 艳
出版发行:清华大学出版社
网 址:http://www.tup.com.cn,http://www.wqbook.com
地 址:北京清华大学学研大厦 A 座 邮 编:100084
社 总 机:010-62770175 邮 购:010-62786544
投稿与读者服务:010-62776969,c-service@tup.tsinghua.edu.cn
质 量 反 馈:010-62772015,zhiliang@tup.tsinghua.edu.cn
印 刷 者:清华大学印刷厂
装 订 者:三河市少明印务有限公司
经 销:全国新华书店
开 本:185mm×260mm 印 张:43.5 字 数:1197 千字
版 次:2016 年 4 月第 1 版 印 次:2018 年 3 月第 2 次印刷
印 数:3001~4000
定 价:128.00 元
——————————————————————————————————————————————

读 者 推 荐
这是一本编排精当的优秀 Linux 教程和参考书。书中穿插大量示例,全面深入地讲述
Fedora、CentOS、Red Hat Enterprise Linux 和 Ubuntu。我通过在 Linux 系统上尝试书中的大量
示例,真正掌握了 Linux 技能。
当今的数据中心正在向云计算迁移,“云”成为热门流行语。最后两章将指导你设置一个
简单的云计算环境。无论如何,如果你准备从 Windows 迁移到 Linux,或想全面系统地了解
Linux,本书将是你的理想读物。
——Andrew Wilcox
本书循序渐进地阐释方法/概念,而这正是我苦苦追寻的。
本书讲解清晰;将深奥的技术娓娓道来,让我如浴春风,心旷神怡。我是一只 Linux 菜鸟,
以前,除了 Windows,我对其他操作系统一无所知;现在,通过阅读本书,我掌握了 Linux 操
作系统的基本设计原理。
不要因为这本书令人畏惧的重量而感到不安。Christopher 就是在力求尽可能地包罗广泛的
内容,尝试着预见系统管理的需要。
——JNutt
这是一本面向初中级读者的优秀书籍,就像一位和蔼的老师在为你授课。本书内容丰富,
行文优美,重点介绍 RHEL、Centos 和 Fedora 等常见标准。本书讲解非常透彻,对 Linux 新手
而言,本书可谓是宝贵财富。
——Man Lui
我想熟练地安装、配置和管理 Fedora Linux 工作站,本书帮我达到了目标。我以前只用过
Windows 操作系统,通过阅读本书,我顺利地将 Windows 经验和技能转变为 Linux 知识。现在,
我的工作站安装了开源软件包,可访问网络资源,可执行身份验证,可完美运行。在迁移到
Linux 环境的过程中,这本书功不可没。
——Patrick Cody
Christopher,我要向你脱帽致敬!我十分喜爱本书的编写风格,它将复杂的主题讲得简单
易懂,将枯燥的技术讲得活灵活现,它并不像是标准的技术文字,读起来更像是娓娓道来的动
人故事;例如书中对 cp 命令各种用法的讲解让我永生难忘。
——eugene brand
我今年才 18 岁,迫切想要汲取大量的知识营养。
再也找不到一本书能如此深刻地探讨这么多不同的主题。全书没有多余的空话,都是极有
用的信息。本书将指导我学习大量 IT 知识,精通掌握 CentOS 和 RH,助我茁壮成长!
——Alston

译 者 序
Linux 是一种能运行于多种平台、源代码公开、免费、功能强大、遵守 POSIX 标准且与
UNIX 兼容的操作系统。Linux 从 20 世纪中期一直发展到现在,前进的脚步从未停止过。如
今更是突飞猛进,发展迅速,一股 Linux 热潮正在席卷整个世界。由于 Linux 属于自由软件,
它的源代码是公开的,并遵循公共版权许可证(GPL),因此用户可以免费使用,使 Linux 在极
短时间内就成为了一套成熟而稳定的操作系统。
本书作者是著名的 Linux 专家 Christopher Negus,也是一位 Linux 教育专家,所出版的
很多专著都非常畅销,本书是他的代表作,目前最新版本是第 9 版。
本书覆盖了 Linux 的几乎所有内容,适用于所有 Linux 发行版本。深入和全面讨论主流
Linux 发行版本的所有主要特性、工具和实用工具。全书共分为七个部分,
第Ⅰ部分“入门”
包括两章,主要是帮助了解什么是 Linux,并从一个 Linux 桌面开始学习
第Ⅱ部分“成为
一名 Linux 高级用户”深入详细地介绍如何使用 Linux Shell、使用文件系统、操作文本文件、
管理进程以及使用 Shell 脚本;第 III 部分“成为一名 Linux 系统管理员”,将学习如何管理
Linux 系统;第Ⅳ部分“成为一名 Linux 服务器管理员”,将学习如何创建功能强大的网络服
务器以及用来管理这些服务器的工具;第Ⅴ部分“学习 Linux 安全技术”,将学习如何确保
Linux 系统和服务的安全;第Ⅵ部分“将 Linux 扩展到云”介绍了最前沿的云技术;第Ⅶ部
分包含了两个附录。附录 A“介质”提供了关于下载 Linux 发行版本的相关指导;附录 B“习
题答案”提供了从第 2~26 章所包括的所有习题的参考答案。
相对于之前的版本,本书中添加了更多作者实际教学经验,深入讨论 Linux 所有特性、
工具和程序,全面覆盖最新的平台,详细介绍大多数 Linux 发行版本中使用的 Debian (Ubuntu)
和 Red Hat/Fedora 软件安装和服务管理工具。总而言之,对于 Linux 用户而言,本书是必备
的,是 Linux 用户的最佳学习手册。
本书图文并茂,技术新,实用性强,以大量的实例对 Linux 命令做了详细的解释,是 Linux 用
户不可缺少的实用参考书籍。本书可用作 Linux 编程人员的参考手册,适合计算机技术人员使用。
本书主要由王净、田洪翻译,参加本次翻译的还有范园芳、范桢、胡训强、纪红、晏峰、
余佳隽、张洁、赵翊含、何远燕、任方燕、吴同菊、张忠磊、曹兵、朱婷婷、周志、蒋芬娇、
樊露停、王湘旭、李利利、朱月霞、朱荣玲、罗聪玉、戈毛毛。最终由王净负责统稿,在此
一并表示感谢。此外,还要感谢我的家人,她们总是无怨无悔地支持我的一切工作,我为有
这样的家庭而感到幸福。
译者在翻译过程中,尽量保持原书的特色,并对书中出现的术语和难词难句进行了仔细
推敲和研究。但毕竟有少量技术是译者在自己的研究领域中不曾遇到过的,所以疏漏和争议
之处在所难免,望广大读者提出宝贵意见。
最后,希望广大读者能多花些时间细细品味这本凝聚作者和译者大量心血的书籍,为将
来的职业生涯奠定良好的基础。
王净

作 者 简 介
Christopher Negus 是 Red Hat 公司的 RHCI(Red Hat Certified Instructor,Red Hat 认证讲
师)、RHCX(Red Hat Certified Examiner,Red Hat 认证考官)、RHCA(Red Hat Certified Architect,
Red Hat 认证架构师)以及首席技术撰稿人。在六年多的时间里,Chris 为数百名有志于成为
RHCE(Red Hat Certifier Engineer,Red Hat 认证工程师)的 IT 专业人士进行了授课。
目前,Christopher Negus 在 Red Hat 公司的主要工作是为 Red Hat 客户门户网站撰写技术
文章。他参与的项目包括 Red Hat Enterprise Linux 7、Red Hat Enterprise OpenStack Platform、
Red Hat Enterprise Virtualization 以及 Docker 格式的 Linux 容器。
除了 RHCA 认证外,Christopher 还是 RHCVA(Red Hat Certified Virtualization Administrator,
Red Hat 认证虚拟化管理员)以及 RHCDS(Red Hat Certified Datacenter Specialist,Red Hat 认证
数据中心专家)。此外,他还拥有部署和系统管理、群集和存储管理、云存储以及服务器强化
等方面的专业知识。
在加入 Red Hat 之前,Christopher 独自编写或者与他人合著了几十本关于 Linux 和 UNIX
的书籍,包括
Red Hat Linux Bible (所有版本)、 CentOS Bible Fedora Bible Linux Troubleshooting
Bible
Linux Toys Linux Toys 。此外,他还为高级用户合著了几本关于 Linux 工具箱系
列的书:
Fedora Linux Toolbox SUSE Linux Toolbox Ubuntu Linux Toolbox Mac OS X Toolbox
BSD UNIX Toolbox
在 20 世纪 90 年代初,Christopher 搬到犹他州帮助 Novell 开发 UnixWare 项目,在此之
前他在 AT&T 工作了 8 年。在业余时间,Christopher 喜欢踢足球以及和妻子 Sheree、儿子 Seth
在一起享受家庭的乐趣。
技术编辑简介
Richard Blum ,LPIC-1,在 IT 行业以系统和网络管理员的身份工作了 20 多年,出版了
许多有关 Linux 和开源技术的图书。他主要负责管理 UNIX、Linux、Novell 和 Microsoft 服务
器,同时还帮助设计和维护一个使用了 Cisco 交换机和路由器的 3500 名用户的网络。他曾经
使用 Linux 服务器和 Shell 脚本来执行自动化网络监控,并在大多数常见的 Linux Shell 环境
中编写过 Shell 脚本。Richard 还是一名在线讲师,为全美国的高校讲授 Linux 入门课程。
Richard 并不是工作狂,在业余时间,他担任了多个教堂礼拜乐队的贝斯手,并喜欢和妻子
Barbara 以及两个女儿 Katie Jane 和 Jessica 共度欢乐时光。

致 谢
自从我受雇于 Red Hat 公司 6 年以来,接触到世界上许多最优秀的 Linux 开发人员、测
试人员以及技术支持人员和教师。虽然无法单独感谢所有人,但我要向这种合作和卓越的文
化敬礼,正是这种文化环境,促使我的 Linux 技能逐日提升。
我不能称赞 Red Hat,因为我在该公司工作。但之所以在 Red Hat 公司工作,是因为它所
提倡的开源软件的理念与我的信念相符。在此我想要特别感谢 Red Hat 公司的一些人。与
Victor Costea、Andrew Blum 以及其他 Red Hat 技术人员的讨论帮助我调整了关于人们如何学
习 Linux 的思维方式。而我之所以能使用多种不同的技术,是因为得到上司 Adam Strong 以
及高级经理 Sam Knuth 给予的大力支持,他们总是支持我完成一些非常优秀的项目,并且从
来没有阻止过我。
在本版本的撰写过程中,还得到了来自 Ryan Sawhill Aroha 的帮助,他帮我简化了对加
密技术的编写。而对于本书中新添加的关于 Linux 云技术的内容,则要感谢 OpenStack、Docker
以及 RHEV 团队成员,他们帮助我每天学习最前沿的云技术。
至于 Wiley 出版社的工作人员,感谢他们多年来不断让我润色和改进这本书。其中 Marty
Minner 帮助我通过一个严格的日程安排完成了相关的任务。Mary Beth Wakefield 和 Ken
Brown 总是在我忘记的时候不断地提醒我严格执行日程安排。感谢 Richard Blum 透彻地、严
肃认真地完成了技术编辑工作。感谢来自 Waterside Production 的 Margot Maley Hutchision 代
表我与 Wiley 签约,并一直在维护我的最大利益。
最后,感谢妻子 Sheree 与我分享她的生活,并将 Seth 和 Caleb 养育成人。

前 言
“如果不使用 Linux,将无法真正学习 Linux。”
以上的结论是根据我十多年来教人们学习 Linux 总结出来的。要学好 Linux,不能仅靠
阅读一本书;也不能仅靠聆听一次讲座。需要有人进行引导,同时还需要亲手实践。
在 1999 年,Wiley 出版社出版了我的
Red Hat Linux Bible 一书。该书所取得的巨大成功
使我有机会成为一名全职的、独立的 Linux 作者。在大约十年的时间里,我在安静的家庭办
公室中编写了多本关于 Linux 方法的书籍,并用最好的方法来讲解 Linux。
在 2008 年,我开启了人生新的航程。我被 Red Hat 公司聘为一名专职讲师,为那些想要
获取 RHCE(Red Hat Certified Engineer)认证的专业系统管理员讲授 Linux。在担任 Linux 讲师
的 3 年里,我不断提升自己的教学技能,使那些没有任何 Linux 经验的学员逐步成为经验丰
富的专家。
在本书的上一版本中,我将这些教学经验转换为文字,从而使一些从未用过 Linux 的门
外汉成为拥有丰富经验的 Linux 专家。而在本次版本中,我准备将这些技能扩展至云端。
《Linux 宝典(第 9 版)》将重点关注以下内容:
使初学者成为一名认证的专家 :只要你使用过计算机、鼠标和键盘,就可以开始学习
本书。我将讲授如何获取和使用 Linux,并一步步介绍关键主题,最后学习如何管理
Linux 并确保其安全性。
以系统管理员为重点对象 :学完本书后,将会知道如何使用 Linux 以及如何修改和维
护 Linux。本书介绍的所有主题都是成为一名 RHCE 所需掌握的内容。此外,许多软件
开发人员也在使用本书,从而知道如何将 Linux 系统作为开发平台进行开发或者在
Linux 系统中运行自己的应用程序。
重点介绍命令行工具 :虽然在近几年,用来管理 Linux 的 point-and-click 接口得到了极
大的改进,但如果想要使用一些高级功能,则只能手动输入命令并编辑配置文件。我
将介绍如何熟练使用 Linux 命令行 Shell。此外,在必要时,还会使用图形工具完成相
同的任务,从而将 Shell 功能与图形工具进行比较。
旨在介绍更少的 Linux 发行版本 :在以前的版本中,大概介绍了 18 种不同的 Linux 发
行版本。除了少数的例外,大部分流行的 Linux 发行版本都基于 Red Hat(Red Hat
Enterprise Linux、Fedora、CentOS 等)或者基于 Debian(Ubuntu、Linux Mint、KNOPPIX
等)。虽然本书主要介绍了 Red Hat 发行版本,但在部分章节将会增加对 Ubuntu 的介绍,
因为许多 Linux 爱好者是从 Ubuntu 开始学习 Linux 的。
更多演示和练习 :首先,实际演示 Linux 能够做什么,而不是只告诉你 Linux 能够做
什么。其次,为了能够确保掌握所学的内容,你还有机会亲自完成相关练习。每个程

序和练习都将在 Red Hat Enterprise Linux 和 Fedora 中进行测试,以保证可以正常运行。
此外,大多数的程序和练习也可以在 Ubuntu 中运行。
引入云技术 :如今在云计算方面,Linux 是大多数技术进步的核心。这意味着需要深入
了解 Linux,从而在以后的数据中心中可以更有效地工作。首先,在本书的前几章学习
Linux 的基本知识,然后在最后几章学习如何尝试将 Linux 系统作为虚拟机管理程序、
云控制器和虚拟机,以及如何管理虚拟网络和网络存储空间。
本书组织结构
本书能够让你从基本的 Linux 基础开始学起,并逐步成为一个专业的 Linux 系统管理员
和高级用户。
第Ⅰ部分“入门”包括两章,主要帮助你了解什么是 Linux,并从一个 Linux 桌面开始
学习:
● 第 1 章“开始使用 Linux”介绍若干个主题,比如 Linux 操作系统是什么,Linux 的起
源以及如何开始使用 Linux。
● 第 2 章“创建完美的 Linux 桌面”提供关于如何创建一个桌面系统以及如何使用一些
最流行的桌面功能的相关内容。
第Ⅱ部分“成为一名 Linux 高级用户”深入详细地介绍如何使用 Linux Shell、使用文件
系统、操作文本文件、管理进程以及使用 Shell 脚本:
● 第 3 章“使用 Shell”介绍如何访问 Shell、运行命令、撤回命令(使用历史)以及完成标
记。此外,本章还描述了如何使用变量、别名以及 man 手册(即传统的 Linux 命令参考
手册)。
● 第 4 章“在文件系统中移动”包含用来列举、创建、复制和移动文件和目录的命令。
此外,本章还包括更高级的主题,比如文件系统安全性(文件的所有权、权限以及访问
控制列表等)。
● 第 5 章“使用文本文件”包含使用文本文件需要的所有知识,从基本的文本编辑器到
用来查找文件以及在文件中搜索文本所需的工具。
● 第 6 章“管理运行中的进程”描述如何查看正在系统上运行的进程以及如何更改这些
进程。其中,更改进程的方法包括终止、暂停以及发送其他类型的信号。
● 第 7 章“编写简单的 Shell 脚本”介绍一些 Shell 命令和函数,可以将它们放在一个文
件中并作为一个命令运行。
第Ⅲ部分“成为一名 Linux 系统管理员”,将学习如何管理 Linux 系统:
● 第 8 章“学习系统管理”提供关于基本图形工具、命令以及用来管理 Linux 系统的配
置文件的相关内容。
● 第 9 章“安装 Linux”介绍常见安装任务,如磁盘分区和初始软件包选择,以及更高级
的安装工具,比如从启动文件开始安装。
● 第 10 章“获取和管理软件”解释软件包的工作原理以及如何获取和管理软件包。

● 第 11 章“获取用户账户”讨论用来添加和删除用户和组的工具,以及如何集中管理用
户账户。
● 第 12 章“管理磁盘和文件系统”提供关于添加分区、创建文件系统、安装文件系统以
及使用逻辑卷管理的相关内容。
第Ⅳ部分“成为一名 Linux 服务器管理员”,将学习如何创建功能强大的网络服务器以及
用来管理这些服务器的工具。
● 第 13 章“了解服务器管理”介绍远程登录、监视工具以及 Linux 启动过程。
● 第 14 章“管理网络”讨论如何配置网络。
● 第 15 章“启动和停止服务”提供关于启动和停止服务的相关内容。
● 第 16 章“配置打印服务器”描述如何配置打印机,以便在 Linux 系统本地使用,或者
通过网络在另一台计算机上使用。
● 第 17 章“配置 Web 服务器”描述如何配置一个 Apache Web 服务器。
● 第 18 章“配置 FTP 服务器”介绍设置一个 vsftpd FTP 服务器所需的步骤。通过使用该
服务,可以让他人通过网络从你的 Linux 系统中下载文件。
● 第 19 章“配置 Windows 文件共享(Samba)服务器”介绍如何使用 Samba 进行 Windows
文件服务器配置。
● 第 20 章“配置 NFS 文件服务器”描述如何使用网络文件系统功能通过网络在不同系
统之间共享文件夹。
● 第 21 章“Linux 的故障排除”介绍用于 Linux 系统故障排除的流行工具。
第Ⅴ部分“学习 Linux 安全技术”,将学习如何确保 Linux 系统和服务的安全:
● 第 22 章“理解基本的 Linux 安全”介绍基本的安全概念和技术。
● 第 23 章“理解高级的 Linux 安全”介绍如何使用 PAM(pluggable authentication Modules,
可插拔验证模块)和密码工具来加强系统安全和验证。
● 第24章“使用SELinux增强Linux安全”演示如何使用SELinux(Security Enhanced Linux)
来确保系统服务的安全。
● 第 25 章“保护网络上的 Linux”介绍用来确保系统服务安全的网络安全功能,比如
firewalld 和 iptables 防火墙。
第Ⅵ部分“将 Linux 扩展到云”介绍最前沿的云技术:
● 第 26 章“使用 Linux 进行云计算”通过描述如何设置虚拟机管理程序、构建虚拟机以
及跨网络共享资源,介绍 Linux 系统中云计算的相关概念。
● 第 27 章“将 Linux 部署到云”描述如何将 Linux 镜像部署到不同的云环境,包括
IpenStack、Amazon EC2 或者进行了虚拟化配置的本地 Linux 系统。
第Ⅶ部分包含了两个附录,帮助你学习更多关于 Linux 的知识。附录 A“介质”提供了
关于下载 Linux 发行版本的相关指导。附录 B“习题答案”提供了从第 2~26 章所包括的所
有习题的参考答案。

本书的约定
在本书中使用了特殊的排版来表示代码和命令。命令和代码以等宽字体显示:
This is how code looks
在示例所包含的输入和输出事件中,仍然使用了等宽字体,但为了区分输入和输出字符,
输入字符还使用了粗体显示。比如:
$ ftp ftp.handsonhistory.com
Name (home:jake): jake
Password: ******
文本的其他样式如下所示:
● 当介绍新术语以及重要的单词时,以
斜体 的方式显示。
● 使用类似于 Ctrl+A 的样式显示键盘的敲击。这意味着在单击字母键“a”的同时按住
Ctrl 键。
● 文本中的文件名称、URL 以及代码按以下方式显示:persistence.properties.
下面所示的各项提醒你应该注意的重要知识点。
注意
注意框提供了需要额外注意的相关信息。
提示
提示框显示了执行某一特定任务的特殊方法。
警告
当执行某一程序时,警告框会提醒你特别注意,否则会对计算机硬件和软件造成损害。
进入
Linux
如果你是一名 Linux 的初学者,那么可能会对什么是 Linux 以及 Linux 的起源只具有模
糊的概念。你可能听说过 Linux 是免费的(在使用成本方面)或者开放的(可以按照自己的意愿
自由使用)。在开始学习 Linux 之前(后面,你将学习 Linux 方面的所有相关知识),第 1 章将
会回答关于 Linux 的起源以及特点的相关问题。
你需要多花些时间认真阅读本书,这样才可以加快学习 Linux 的进度,并使用它满足自
己的需求。这是进入 Linux 并成为一名 Linux 专家的第一步。
访问配书网站
如果想要查找不同的 Linux 发行版本,关于获取 Linux 认证的相关提示以及本书的更正信
息,可以访问
http://www.wiley.com/go/linuxbible9
目 录
第Ⅰ部分 入 门
第 1 章 开始使用 Linux............................3
1.1 理解什么是 Linux ......................... 4
1.2 了解如何区分 Linux 和其他操作
系统............................................... 5
1.3 探讨 Linux 历史............................ 5
1.3.1 Bell 实验室中自由流动的 UNIX
文化 ..............................................
6
1.3.2 商业化的 UNIX............................ 8
1.3.3 GNU 将 UNIX 转变为免费 ......... 9
1.3.4 BSD 失去了一些动力................ 10
1.3.5 Linus 弥补了缺失的部分........... 11
1.3.6 OSI 开源定义 ............................. 11
1.4 理解 Linux 发行版本是如何出
现的............................................. 12
1.4.1 选择 Red Hat 发行版本 ............. 13
1.4.2 选择 Ubuntu 或者其他 Debian
发行版本 ....................................
15
1.5 利用 Linux 找到职业机会........... 15
1.5.1 了解如何利用 Linux 挣钱 ......... 16
1.5.2 获得 Red Hat 认证 ..................... 17
1.6 小结............................................. 20
第 2 章 创建完美的 Linux 桌面 ..............21
2.1 了解 Linux 桌面技术 .................. 22
2.2 开始使用 Fedora GNOME 桌面
Live 镜像..................................... 23
2.3 使用 GNOME 3 桌面 .................. 24
2.3.1 计算机启动之后......................... 24
2.3.2 设置 GNOME 3 桌面 ................. 30
2.3.3 扩展 GNOME 3 桌面 ................. 31
2.3.4 启动桌面应用程序..................... 33
2.3.5 停止 GNOME 3 桌面 ................. 37
2.4 使用 GNOME 2 桌面...................37
2.4.1 使用 Metacity 窗口管理器......... 38
2.4.2 更改 GNOME 外观 .................... 39
2.4.3 使用 GNOME 面板 .................... 40
2.4.4 使用 AIGLX 添加 3D 效果 ....... 43
2.5 小结.............................................45
2.6 习题.............................................45
第Ⅱ部分 成为一名 Linux 高级用户
第 3 章 使用 Shell .................................49
3.1 Shell 和 Terminal 窗口.................50
3.1.1 使用 Shell 提示符 ...................... 50
3.1.2 使用 Terminal 窗口 .................... 51
3.1.3 使用虚拟控制台......................... 52
3.2 选择 Shell ....................................52
3.3 运行命令 .....................................53
3.3.1 了解命令语法............................. 53
3.3.2 查找命令 .................................... 56
3.4 使用命令历史记录重复执行
命令.............................................58
3.4.1 命令行编辑 ................................ 58
3.4.2 命令行补齐 ................................ 60
3.4.3 命令行重复执行......................... 61
3.5 连接和扩展命令.......................... 62
3.5.1 命令之间的管道......................... 62
3.5.2 连续命令 .................................... 63
3.5.3 后台命令 .................................... 63
3.5.4 扩展命令 .................................... 64
3.5.5 扩展算术表达式......................... 64
3.5.6 扩展变量 .................................... 64
3.6 使用 Shell 变量 ........................... 64
3.6.1 创建和使用别名......................... 66
3.6.2 退出 Shell ................................... 66
3.7 创建自己的 Shell 环境................ 67
3.7.1 配置 Shell ................................... 67
3.7.2 设置提示符 ................................ 68
3.7.3 添加环境变量............................. 69
3.8 获取关于命令的信息.................. 70
3.9 小结............................................. 71
3.10 习题........................................... 71
第 4 章 在文件系统中移动.....................73
4.1 使用基本的文件系统命令 .......... 75
4.2 使用元字符和运算符.................. 77
4.2.1 使用文件匹配元字符................. 77
4.2.2 使用文件重定向元字符............. 78
4.2.3 使用括号扩展字符..................... 79
4.3 列出文件和目录.......................... 80
4.4 了解文件权限和所有权 .............. 83
4.4.1 使用命令 chmod(数字)更改
权限 ............................................
84
4.4.2 使用 chmod(字母)更改权限 ...... 85
4.4.3 使用 umask 设置默认的文件
权限 ............................................
85
4.4.4 更改文件所有权......................... 86
4.5 移动、复制和删除文件 .............. 87
4.6 小结............................................. 88
4.7 习题............................................. 88
第 5 章 使用文本文件............................91
5.1 使用 vim 和 vi 编辑文件............. 91
5.1.1 开始使用 vi ................................ 92
5.1.2 在文件中跳过............................. 96
5.1.3 搜索文本 .................................... 96
5.1.4 使用 ex 模式............................... 96
5.1.5 学习更多关于 vi 和 vim 的
知识 ............................................
97
5.2 查找文件 .....................................97
5.2.1 使用 locate 命令根据名称查找
文件 ............................................
97
5.2.2 使用 find 命令搜索文件 ............ 98
5.2.3 使用 grep 命令在文件中搜索.... 103
5.3 小结........................................... 104
5.4 习题........................................... 104
第 6 章 管理运行中的进程................... 107
6.1 理解进程 ................................... 107
6.2 列出进程 ................................... 108
6.2.1 使用 ps 命令列出进程 ............. 108
6.2.2 使用 top 命令列出和更改
进程 ..........................................
109
6.2.3 使用 System Monitor 列出
进程 ..........................................
110
6.3 管理后台和前台进程 ................ 112
6.3.1 启动后台进程........................... 112
6.3.2 使用前台和后台命令............... 113
6.4 杀死和改变进程........................ 114
6.4.1 使用 kill 和 killall 命令杀死
进程 ..........................................
114
6.4.2 使用 nice 和 renice 命令设置
处理器优先级 ..........................
115
6.5 使用 cgroups 限制进程.............. 116
6.6 小结........................................... 118
6.7 习题........................................... 118
第 7 章 编写简单的 Shell 脚本.............119
7.1 理解 Shell 脚本.......................... 119
7.1.1 执行和调试 Shell 脚本 ............ 119
7.1.2 理解 Shell 变量 ........................ 120
7.1.3 在 Shell 脚本中执行算法......... 123
7.1.4 在 Shell 脚本中使用编程
结构 ..........................................
124
7.1.5 使用一些有用的文本操作
程序 ..........................................
129
7.1.6 使用简单的 Shell 脚本 ............ 130
7.2 小结........................................... 132
7.3 习题........................................... 132
第Ⅲ部分 成为一名Linux系统管理员
第 8 章 学习系统管理.......................... 137
8.1 理解系统管理 ........................... 137
8.2 使用图形化管理工具................ 138
8.2.1 使用 system-config-*工具........ 139
8.2.2 使用基于浏览器的管理工具..... 140
8.3 使用 root 用户账户 ................... 140
8.3.1 通过 Shell 成为 root 用户
(su 命令)...................................
141
8.3.2 通过 GUI 允许管理访问权限.... 142
8.3.3 使用 sudo 获取管理访问权限.... 142
8.4 探索管理命令、配置文件和日志
文件........................................... 143
8.4.1 管理命令 .................................. 144
8.4.2 管理配置文件........................... 144
8.4.3 管理日志文件和 Systemd
Journal ......................................
148
8.5 使用其他管理账号.................... 149
8.6 检查和配置硬件........................ 150
8.6.1 检查硬件 .................................. 150
8.6.2 管理可移动硬件....................... 153
8.6.3 使用可加载模块....................... 154
8.7 小结........................................... 156
8.8 习题........................................... 156
第 9 章 安装 Linux............................... 159
9.1 选择计算机 ............................... 160
9.2 从 Live 介质安装 Fedora........... 161
9.3 从安装介质安装 Red Hat
Enterprise Linux......................... 164
9.4 了解基于云的安装.................... 166
9.5 在企业中安装 Linux ................. 167
9.6 探索共同的安装主题................ 168
9.6.1 升级或者从头开始安装........... 168
9.6.2 双启动 ...................................... 169
9.6.3 安装 Linux 并以虚拟方式
运行 ..........................................
170
9.6.4 使用安装启动选项................... 170
9.6.5 使用专门的存储器................... 173
9.6.6 对硬盘进行分区....................... 174
9.6.7 使用 GRUB 启动加载程序...... 176
9.7 小结........................................... 182
9.8 习题........................................... 182
第 10 章 获取和管理软件 .................... 183
10.1 在桌面管理软件...................... 183
10.2 超越 Software 窗口.................. 184
10.3 了解 Linux RPM 和 DEB 软件
打包 ......................................... 185
10.3.1 理解 DEB 包......................... 186
10.3.2 理解 RPM 包 ........................ 187
10.4 使用 YUM 管理 RPM 软件包... 188
10.4.1 了解 yum 的工作原理.......... 189
10.4.2 借助于第三方的软件库使用
YUM.....................................
192
10.4.3 使用 YUM 命令管理软件 ..... 192
10.5 使用 rpm 命令安装、查询和验证
软件 ......................................... 198
10.5.1 使用 rpm 安装和删除
软件包 ..................................
199
10.5.2 查询 rpm 信息 ...................... 199
10.5.3 验证 RPM 软件包 ................ 201
10.6 在企业中管理软件.................. 202
10.7 小结......................................... 203
10.8 习题......................................... 203
第 11 章 获取用户账户........................ 205
11.1 创建用户账户.......................... 205
11.1.1 使用 useradd 命令添加
用户 ......................................
207
11.1.2 设置用户默认值................... 209
11.1.3 使用 usermod 修改用户 ....... 210
11.1.4 使用 userdel 删除用户 ......... 211
11.2 了解组账户 ............................. 212
11.2.1 使用组账户 .......................... 212
11.2.2 创建组账户 .......................... 213
11.3 在企业中管理用户.................. 214
11.3.1 使用 ACL 设置权限............. 214
11.3.2 为用户添加目录以便进行
协作 ......................................
218
11.4 集中用户账户.......................... 220
11.4.1 使用 Users 窗口 ................... 221
11.4.2 使用 Authentication
Configuration 窗口 ...............
221
11.5 小结......................................... 222
11.6 习题......................................... 222
第 12 章 管理磁盘和文件系统 .............225
12.1 了解磁盘存储器...................... 225
12.2 对硬盘进行分区...................... 227
12.2.1 理解分区表 .......................... 227
12.2.2 查看磁盘分区....................... 227
12.2.3 创建单分区磁盘................... 229
12.2.4 创建一个多分区磁盘........... 232
12.3 使用逻辑卷管理分区.............. 235
12.3.1 检查现有的 LVM................. 235
12.3.2 创建 LVM 逻辑卷................ 238
12.3.3 扩大 LVM 逻辑卷................ 239
12.4 挂载文件系统.......................... 240
12.4.1 被支持的文件系统............... 240
12.4.2 启用交换区 .......................... 242
12.4.3 禁用交换区 .......................... 243
12.4.4 使用 fstab 文件定义挂载文件
系统 ......................................
243
12.4.5 使用 mount 命令来挂载文件
系统 ......................................
245
12.4.6 以环回方式挂载磁盘镜像..... 246
12.4.7 使用 umount 命令 ................ 246
12.5 使用 mkfs 命令创建文件系统... 247
12.6 小结......................................... 248
12.7 习题......................................... 248
第Ⅳ部分 成为一名 Linux 服务器管理员
第 13 章 了解服务器管理 .................... 253
13.1 开始学习服务器管理 .............. 254
步骤 1:安装服务器.......................... 254
步骤 2:配置服务器.......................... 255
步骤 3:监视服务器.......................... 258
13.2 使用 Secure Shell 服务管理远程
访问 ......................................... 259
13.2.1 启动 openssh-server 服务..... 260
13.2.2 使用 SSH 客户端工具 ......... 261
13.2.3 使用基于密钥(无密码)的身份
验证 ......................................
266
13.3 配置系统日志.......................... 268
13.3.1 使用 rsyslog 启用系统日志.... 268
13.3.2 使用 logwatch 查看日志 ...... 271
13.4 使用 sar 检查系统资源............ 272
13.5 检查系统空间.......................... 274
13.5.1 使用 df 显示系统空间 ......... 274
13.5.2 使用 du 检查磁盘使用情况 ... 274
13.5.3 使用 find 确定磁盘消耗 ...... 275
13.6 管理企业中的服务器 .............. 275
13.7 小结......................................... 276
13.8 习题......................................... 276
第 14 章 管理网络............................... 279
14.1 配置桌面网络.......................... 280
14.1.1 检查网络接口....................... 281
14.1.2 配置网络接口....................... 285
14.1.3 配置网络代理连接............... 287
14.2 使用命令行配置网络 .............. 289
14.2.1 编辑连接 .............................. 289
14.2.2 了解网络配置文件............... 291
14.2.3 设置别名网络接口............... 295
14.2.4 设置 Ethernet 通道捆绑 ....... 295
14.2.5 设置自定义路由................... 296
14.3 配置企业中的网络.................. 297
14.3.1 将 Linux 配置为一个
路由器 ..................................
297
14.3.2 将 Linux 配置为 DHCP
服务器 ..................................
298
14.3.3 将 Linux 配置为 DNS
服务器 ..................................
298
14.3.4 将 Linux 配置为代理
服务器 ..................................
299
14.4 小结......................................... 299
14.5 习题......................................... 300
第 15 章 启动和停止服务 .................... 301
15.1 了解初始化守护进程(init 或者
systemd) ................................... 302
15.1.1 了解经典的 init 守护进程 .... 303
15.1.2 了解 Upstart int 守护进程..... 308
15.1.3 了解 systemd 初始化............ 313
15.2 检查服务的状态...................... 320
15.2.1 检查 SysVinit 系统的服务.... 320
15.2.2 检查 Upstart 系统的服务 ..... 321
15.2.3 检查 systemd 系统的服务..... 322
15.3 停止和启动服务...................... 323
15.3.1 停止和启动 SysVinit 服务.... 323
15.3.2 停止和启动 Upstart 服务 ..... 324
15.3.3 停止和启动 systemd 服务..... 325
15.4 启用持续性服务...................... 327
15.4.1 配置 SysVinit 的持续性
服务 ......................................
328
15.4.2 配置 Upstart 的持续性
服务 ......................................
329
15.4.3 配置 systemd 的持续性
服务 ......................................
329
15.5 配置默认的运行级别或者
目标单元.................................. 331
15.5.1 配置 SysVinit 默认运行
级别 ......................................
331
15.5.2 配置 Upstart 中的默认运行
级别 ......................................
331
15.5.3 为 systemd 配置默认目标
单元 ......................................
332
15.6 添加新的或自定义服务........... 333
15.6.1 向 SysVinit 添加新服务....... 333
15.6.2 向 Upstart 添加新服务......... 335
15.6.3 向 systemd 添加新服务........ 336
15.7 小结......................................... 339
15.8 习题......................................... 339
第 16 章 配置打印服务器 .................... 341
16.1 通用 UNIX 打印系统(CUPS) ... 341
16.2 设置打印机.............................. 343
16.2.1 自动添加打印机................... 343
16.2.2 使用基于 Web 的 CUPS
管理 ......................................
343
16.2.3 使用 Print Settings 窗口 ....... 345
16.3 使用 CUPS 打印...................... 351
16.3.1 配置 CUPS 服务器
(cupsd.conf) ..........................
351
16.3.2 启动 CUPS 服务器............... 352
16.3.3 手动配置 CUPS 打印机
选项 ......................................
352
16.4 使用打印命令.......................... 354
16.4.1 使用 lpr 进行打印 ................ 354
16.4.2 使用 lpc 命令列出状态........ 354
16.4.3 使用 lprm 命令删除打印
作业 ......................................
355
16.5 配置打印服务器...................... 355
16.5.1 配置共享的 CUPS 打印机.... 356
16.5.2 配置共享 Samba 打印机...... 357
16.6 小结......................................... 359
16.7 习题......................................... 359

第 17 章 配置 Web 服务器 .................. 361
17.1 了解 Apache Web 服务器 ........ 361
17.2 获取和安装 Web 服务器 ......... 362
17.2.1 了解 httpd 软件包 ................ 362
17.2.2 安装 Apache ......................... 365
17.3 启动 Apache ............................ 365
17.3.1 确保 Apache 安全 ................ 366
17.3.2 了解 Apache 配置文件 ........ 367
17.3.3 向 Apache 添加虚拟主机..... 371
17.3.4 允许用户发布自己的 Web
内容 ......................................
373
17.3.5 使用 SSL/TLS 保护 Web
流量 ......................................
374
17.4 对 Web 服务器进行故障排除 ... 378
17.4.1 检查配置错误....................... 378
17.4.2 禁止访问和服务器内部
错误 ......................................
380
17.5 小结......................................... 381
17.6 习题......................................... 381
第 18 章 配置 FTP 服务器 ................... 383
18.1 了解 FTP ................................. 383
18.2 安装 vsftpd FTP 服务器 .......... 384
18.3 启动 vsftpd 服务...................... 386
18.4 确保 FTP 服务器安全 ............. 388
18.4.1 为 FTP 打开防火墙.............. 388
18.4.2 在 TCP Wrappers 中允许
FTP 访问 ..............................
390
18.4.3 为 FTP 服务器配置
SELinux................................
390
18.4.4 使 Linux 文件权限与 vsftpd
相关联 ..................................
392
18.5 配置 FTP 服务器..................... 392
18.5.1 设置用户访问....................... 392
18.5.2 允许上传 .............................. 393
18.5.3 为 Internet 设置 vsftpd ......... 394
18.6 使用 FTP 客户端连接服务器.... 395
18.6.1 通过 Firefox 访问 FTP
服务器 ..................................
395
18.6.2 使用 lftp 命令访问 FTP
服务器 ..................................
396
18.6.3 使用 gFTP 客户端................ 397
18.7 小结......................................... 398
18.8 习题......................................... 399
第 19 章 配置 Windows 文件共享(Samba)
服务器..................................401
19.1 了解 Samba.............................. 401
19.2 安装 Samba.............................. 402
19.3 启动和停止 Samba .................. 404
19.3.1 启动 Samba(smb)服务 ......... 404
19.3.2 启动 NetBIOS(nmbd)名称
服务器 ..................................
406
19.3.3 停止 Samba(smb)和
NetBIOS(nmb)服务..............
406
19.4 确保 Samba 服务器的安全...... 407
19.4.1 为 Samba 配置防火墙.......... 407
19.4.2 为 Samba 配置 SELinux....... 408
19.4.3 配置 Samba 主机/用户
权限 ......................................
410
19.5 配置 Samba.............................. 410
19.5.1 使用 system-config-samba.... 411
19.5.2 在 smb.conf 文件中
配置 Samba ..........................
415
19.6 访问 Samba 共享..................... 419
19.6.1 在 Linux 中访问 Samba
共享 ......................................
419
19.6.2 在 Windows 中访问 Samba
共享 ......................................
421
19.7 在企业中使用 Samba .............. 422
19.8 小结......................................... 422
19.9 习题......................................... 422
第 20 章 配置 NFS 文件服务器............425
20.1 安装 NFS 服务器..................... 426

20.2 启动 NFS 服务 ........................ 427
20.3 共享 NFS 文件系统................. 428
20.3.1 配置/etc/exports 文件 ........... 429
20.3.2 导出共享文件系统............... 431
20.4 确保 NFS 服务器安全............. 432
20.4.1 为 NFS 打开防火墙 ............. 432
20.4.2 在 TCP Wrappers 中允许 NFS
访问 ......................................
434
20.4.3 为 NFS 服务器配置
SELinux ................................
434
20.5 使用 NFS 文件系统................. 435
20.5.1 查看 NFS 共享 ..................... 435
20.5.2 手动挂载 NFS 文件系统 ..... 436
20.5.3 在启动时挂载 NFS 文件
系统 ......................................
437
20.5.4 使用 autofs 按需挂载 NFS
文件系统 ..............................
439
20.6 卸载 NFS 文件系统................. 442
20.7 小结......................................... 442
20.8 习题......................................... 443
第 21 章 Linux 的故障排除 .................. 445
21.1 启动故障排除.......................... 445
21.1.1 了解启动方法....................... 446
21.1.2 从固件(BISO 或 UEFI)
开始 ......................................
447
21.1.3 为 GRUB 启动加载程序
进行故障排除 ......................
449
21.1.4 启动内核 .............................. 451
21.2 排除软件包的故障.................. 458
21.3 排除网络故障.......................... 461
21.3.1 排除传出连接的故障........... 461
21.3.2 排除传入连接的故障........... 464
21.4 解决内存问题.......................... 467
21.5 在救援模式中进行故障排除... 471
21.6 小结......................................... 472
21.7 习题......................................... 472
第Ⅴ部分 学习 Linux 安全技术
第 22 章 理解基本的 Linux 安全 ..........475
22.1 了解安全基本知识.................. 475
22.1.1 实现物理安全....................... 475
22.1.2 实现灾难恢复....................... 476
22.1.3 保护用户账户的安全........... 476
22.1.4 保护密码 .............................. 479
22.1.5 保护文件系统....................... 484
22.1.6 管理软件和服务................... 487
22.1.7 高级执行 .............................. 488
22.2 监视系统 ................................. 488
22.2.1 监视日志文件....................... 488
22.2.2 监视用户账户....................... 491
22.2.3 监视文件系统....................... 494
22.3 审核和审查 Linux ................... 500
22.3.1 进行合规审查....................... 500
22.3.2 进行安全审查....................... 500
22.4 小结......................................... 501
22.5 习题......................................... 501
第 23 章 理解高级的 Linux 安全 ..........503
23.1 利用加密实现 Linux 安全....... 503
23.1.1 理解哈希 .............................. 504
23.1.2 理解加密/解密 ..................... 505
23.1.3 实现 Linux 加密 ................... 513
23.2 使用 PAM 实现 Linux 安全..... 520
23.2.1 理解 PAM 身份验证过程 .... 521
23.2.2 在 Linux 系统上管理 PAM..... 524
23.2.3 获取更多关于 PAM 的
信息 ......................................
535
23.3 小结......................................... 535
23.4 习题......................................... 535
第 24 章 使用 SELinux 增强 Linux
安全 ......................................537
24.1 了解 SELinux 的优点.............. 537
24.2 了解 SELinux 的工作原理 ...... 538

24.2.1 了解类型强制....................... 538
24.2.2 了解多层次安全................... 539
24.2.3 实现 SELinux 安全模型....... 540
24.3 配置 SELinux .......................... 545
24.3.1 设置 SELinux 模式 .............. 545
24.3.2 设置 SELinux 策略类型....... 547
24.3.3 管理 SElinux 安全上下文.... 548
24.3.4 管理 SELinux 策略规则包..... 550
24.3.5 通过布尔值管理 SELinux...... 552
24.4 监视和排除 SELinux 故障 ...... 553
24.4.1 了解 SELinux 日志 .............. 553
24.4.2 排除 SELinux 日志记录
故障 ......................................
555
24.4.3 解决常见的 SELinux 问题 .... 555
24.5 全部放在一起.......................... 557
24.6 获取更多关于 SELinux 的
信息 ......................................... 557
24.7 小结......................................... 558
24.8 习题......................................... 558
第 25 章 保护网络上的 Linux...............561
25.1 审核网络服务.......................... 561
25.1.1 使用 nmap 评估对网络服务的
访问 ......................................
562
25.1.2 使用 nmap 审核网络服务
广告 ......................................
565
25.1.3 控制对网络服务的访问....... 568
25.2 使用防火墙 ............................. 570
25.2.1 了解防火墙 .......................... 570
25.2.2 实现防火墙 .......................... 571
25.3 小结......................................... 581
25.4 习题......................................... 581
第Ⅵ部分 将 Linux 扩展到云
第 26 章 使用 Linux 进行云计算 ..........585
26.1 Linux 和云计算概述................ 585
26.1.1 云虚拟机管理程序............... 586
26.1.2 云控制器 .............................. 586
26.1.3 云存储 .................................. 586
26.1.4 云身份验证 .......................... 587
26.1.5 云开发和配置....................... 587
26.1.6 云平台 .................................. 587
26.2 尝试基础的云技术.................. 587
26.3 建立一个小型的云.................. 589
26.3.1 配置虚拟机管理程序........... 589
26.3.2 配置存储 .............................. 592
26.3.3 创建虚拟机 .......................... 594
26.3.4 管理虚拟机 .......................... 597
26.3.5 迁移虚拟机 .......................... 597
26.4 小结......................................... 598
26.5 习题......................................... 599
第 27 章 将 Linux 部署到云 .................601
27.1 在云中运行 Linux ................... 601
27.2 创建 Linux 云镜像................... 602
27.2.1 配置和运行 cloud-init 云
实例 ......................................
603
27.2.2 对云实例进行研究............... 604
27.2.3 克隆云实例 .......................... 605
27.2.4 尝试 Ubuntu 云镜像............. 606
27.2.5 扩展 cloud-init 配置 ............. 607
27.2.6 在企业计算中使用
cloud-init...............................
609
27.3 使用 OpenStack 来部署云
镜像 ......................................... 610
27.4 使用 Amazon EC2 部署云
镜像 ......................................... 614
27.5 小结......................................... 614
第Ⅶ部分 附 录
附录 A 介质 ........................................617
附录 B 习题答案 .................................625

部分
入 门
本部分的主要内容:
第 1 章 开始使用 Linux
第 2 章 创建完美的 Linux 桌面

开始使用 Linux
本章主要内容:
● 学习什么是 Linux
● 学习 Linux 的起源
● 选择 Linux 的发布版本
● 利用 Linux 找到职业机会
● 获得 Linux 认证
Linux 是 21 世纪最重要的技术进步之一。除了在 Internet 发展过程中所起到的重要作用以及在
计算机驱动的设备中扮演着重要的技术角色外,Linux 开发还为合作项目提供了一种模型,从而超
越个人和公司可以完成的工作。
Google 运行了成千上万的 Linux 服务器来增强其搜索能力。此外,它的 Android 电话也是基于
Linux 的。同时,当下载并运行 Google 的 Chrome OS 时,会发现 Chrome OS 也是由 Linux 操作系统
在后台提供支持。
Facebook 使用了所谓的
LAMP 堆栈 (Linux、Apache、Web 服务器、MySQL 数据库和 PHP 网络
脚本语言,这些都是开源项目)构建和部署其网站。事实上,Facebook 自己也使用了一种开源的开发
模型,从而使应用程序的源代码以及驱动 Facebook 运行的工具向公众公开。该模型帮助 Facebook
快速地找出程序中的错误,并获得来自全世界的帮助,从而为 Facebook 的快速发展提供源源不断的
动力。
那些为了提高自身操作系统速度和安全性而花费数万亿美元的金融机构也依赖 Linux。其中包
括纽约股票交易所、芝加哥商品交易所以及东京股票交易所。
随着“云”逐步成为当今最热门的流行语之一,其中一部分是炒作而来的,但也有一部分并不
是炒作,因为如今快速发展的云创新是以 Linux 和其他开源技术为基础的。任何构建一个私有云或
者公共云所需的软件组件(如管理程序、云控制器、网络存储、虚拟网络和验证)都可以从开源世界
中免费获得。
Linux 在全世界的广泛采用创造了对 Linux 专业知识的巨大需求。本章将帮助你理解什么是
Linux、Linux 的起源以及如何才能熟练使用 Linux,从而在你成为一名 Linux 专家的道路上开一个
好头。本书的其他部分将会提供相关的实践活动,从而帮助你获得相关的知识。最后,还要演示如
何将所学到的专业知识应用到云技术中。
1
1.1 理解什么是 Linux
Linux 是一种计算机操作系统。一个操作系统由用来管理计算机的不同软件所组成,并且可以
在操作系统上运行应用程序。Linux 以及其他类似的计算机操作系统都包含了如下所示的功能:
● 检测和准备硬件——当启动 Linux 系统时(即当打开计算机时),Linux 将查看计算机中的组
件(CPU、硬盘驱动器、网卡等)并加载访问这些特定的硬件设备所需的软件(驱动程序和
模块)。
● 管理进程——操作系统必须同时跟踪正在运行的多个进程,并决定哪些进程访问 CPU 以及
何时进行访问。此外,该系统还必须提供启动、停止以及更改进程状态的相关方法。
● 管理内存——当应用程序需要使用内存时,必须向其分配 RAM 和交换空间(即扩展内存)。
操作系统决定如何处理对内存的请求。
● 提供用户界面——操作系统必须提供访问系统的相关方法。最初,主要是通过一个被称为
Shell 的命令行解释器来访问 Linux 系统。如今,图形桌面界面也被广泛使用。
● 控制文件系统——文件系统结构内置于操作系统之中(或者说作为模块加载到操作系统中)。
操作系统对文件系统中所包含的文件和目录(文件夹)的所有权和访问进行控制。
● 提供用户访问和身份验证——创建用户账户并在用户之间设置允许边界是 Linux 的一项基
本功能。分离用户账户和组账户能够让用户控制他们自己的文件和进程。
● 提供管理实用工具——在 Linux 中,可以使用成百甚至上千个命令和图形窗口来完成相关的
操作,比如添加用户、管理磁盘、监视网络、安装软件、管理计算机以及确保计算机安
全等。
● 启动服务——为了使用打印机、处理日志消息以及提供各种不同的系统和网络服务,需要
在后台运行被称为
守护进程 (daemon processes) 的进程,从而等待请求的到来。在 Linux 中可
以运行多种不同类型的服务。此外,Linux 还提供了不同的方法来启动和停止这些服务。换
句话说,当 Linux 包含了用来浏览 Web 页面的 Web 浏览器时,它也是一台可以向他人提供
Web 页面的计算机。比较流行的服务器功能包括 Web、电子邮件、数据库、打印机、文件、
DNS 以及 DHCP 服务器。
● 编程工具——在 Linux 中,可使用各种编程实用工具来创建应用程序,以及使用不同的库来
实现专业界面。
如果想要更好地管理 Linux 系统,则需要学习如何使用前面所描述的相关功能。虽然可以通过
使用图形界面来管理大部分功能,但对于负责管理 Linux 系统的人来说,理解 Shell 命令行是至关重
要的。
现代 Linux 系统的功能已经大大超越了最初的 UNIX 系统(Linux 是基于 UNIX 系统的)的功能。
在大型企业中,通常会使用 Linux 的一些高级功能,比如:
● 群集—— Linux 可被配置为在群集(cluster)中工作,从而使多个系统对外部世界表现为一个
系统。此外,还可以对服务进行相关配置,使其能够在群集节点之间来回传递,从而使这
些节点在使用相关服务时感觉不到任何服务运行的中断。
● 虚拟化——为更有效地管理计算资源,可以将 Linux 作为一个虚拟主机来运行。在该主机上,
可以将其他的 Linux 系统、Microsoft Windows、BSD 以及其他操作系统作为虚拟访客来运
行。而对于外部世界来说,每一个虚拟访客都表现为一个单独的计算机。而在 Linux 中,可
使用 KVM 和 Xen 技术来创建虚拟主机。

● 云计算——为管理大规模的虚拟化环境,可以使用基于 Linux 的成熟的云计算平台。诸如
OpenStack 和 Red Hat Enterprise Virtualization 之类的项目可以同时管理多个虚拟主机、虚拟
网络、用户和系统验证、虚拟访客以及网络存储空间。
● 实时计算——可以对 Linux 进行相关配置,以便进行实时计算,此时高优先级的进程可以得
到更快、可预测的关注。
● 专门的存储空间——在 Linux 中,除了在计算机的硬盘中存储数据之外,还可以使用许多专
门的本地和网络存储空间。Linux 中可用的共享存储设备包括 iSCSI、Fibre Channel 以及
Infiniband。而完全开源的存储平台包括诸如 Ceph(http://ceph.com)和 GlusterFS(http://gluster.org)
之类的项目。
本书并不会介绍所有这些高级主题。然而,对于那些使用 Shell、使用磁盘、启动和停止服务以
及为了使用这些高级功能而配置不同的服务器所需的相关功能,本书将会详细进行介绍。
1.2 了解如何区分 Linux 和其他操作系统
如果你是一名 Linux 的初学者,且使用过 Microsoft Windows 或者 Apple Mac OS 操作系统,那
么学习 Linux 是非常好的机会。虽然 Mac OS X 在免费软件操作系统中有一席之地,通常被称为
Berkeley Software Distribution,但 Microsoft 以及 Apple 的操作系统都被称为专有操作系统。这也就
意味着:
● 无法查看用来创建操作系统的代码。
● 对于无法满足需求的操作系统,不能在最基本层面对其进行更改。并且不能使用该操作系
统构建自己的操作系统。
● 不能对源代码进行检查,从而无法找到代码错误,发现安全漏洞,或者学习代码的工作
原理。
● 如果操作系统的开发者没有对外公开所需的编程接口,你将无法向操作系统中插入自己的
软件。
当你看到这些关于专有软件的相关陈述,可能会说:“我不在乎这些。我不是一名软件开发人员。
我并不想查看或者更改操作系统的构建机理。”
你的想法可能是对的。但事实上,很多其他软件已经成为免费的、开源的软件并被使用,从而
使 Internet(比如 Google)、移动电话(比如 Android)、特殊的计算设备(比如 Tivo)以及成百上千的技术
公司呈现爆炸式发展。免费软件不仅降低了计算成本,还有利于创新的爆发。
你可能并不希望像 Google、Facebook 以及其他公司那样使用 Linux 为一家数十亿美元的公司构
建基础程序。但那些已经使用 Linux 构建了计算机基础结构的公司则需要越来越多具备专业技能的
人来运行这些系统。
一个功能强大且灵活的计算机系统是如何免费的呢?要了解这一切,需要首先明白 Linux 的起
源。所以,本章的下一节将介绍导致 Linux 产生的免费软件运动的不寻常且曲折的发展道路。
1.3 探讨 Linux 历史
Linux 的历史起源于 1991 年 8 月 25 日 Linus Torvalds 向 comp.os.minix 新闻组张贴的一则消息
(http://groups.google.com/group/comp.os.minix/msg/b813d52cbc5a044b?pli=1):
Linus Benedict Torvalds
所有使用 Minix 的朋友们,大家好。
目前,我正在为 386(486)AT clones 编写一个免费的操作系统(这仅仅只是我的一个业余爱好,该
操作系统将不会是一个类似于 gnu 之类的大型、专业操作系统)。该想法从今年 4 月份开始酝酿,目
前已经开始准备编写了。由于我的操作系统与 Minix 类似(比如相同的文件系统物理布局(之所以这
么做,最主要是出于现实原因)),因此希望喜欢或者不喜欢 Minix 的人可以提出反馈意见,任何建
议都欢迎,但我不能保证会实现所有的意见。
Linus(torvalds@kruuna.helsinki.fi)
附注:当然,该操作系统不包含任何 Minix 代码,并且具有一个多线程的文件系统。该系统不
是便携式的(原文如此)(因为使用了 386 任务切换等功能),同时,它仅支持 AT-harddisks,这就是我
能够完成的全部功能。
Minix 是 90 年代初在 PC 上运行的类似于 UNIX 的一种操作系统。与 Minix 一样,Linux 也是
UNIX 操作系统的克隆。除了少数例外,比如 Microsoft Windows,大多数现代计算机系统(包括 Mac
OS X 和 Linux)都源自 UNIX 操作系统,而该系统最初由 AT&T 所创建。
如果你真正体会到了 AT&T Bell 实验室是如何根据一个专有系统创建出一个免费的操作系统,
那么将有助于理解创建 UNIX 时的文化背景以及使 UNIX 的精华部分重现的一系列事件。
注意
为学习更多关于 Linux 的创建原理,请参考以下书籍:Linus Torvalds 所著的
The Story of an
Accidental Revolutionary
(HarperCollins 出版社,2001)。
1.3.1 Bell 实验室中自由流动的 UNIX 文化
最初,UNIX 操作系统在一个公共社区中被创建并逐步发展。UNIX 的创建并不是受市场需求
所驱使的,而是用来克服生产程序中的障碍。而拥有 UNIX 商标的 AT&T 最终使 UNIX 成为了一个
商业产品,但在那时,许多使 UNIX 特殊化的概念(甚至很多早期的代码)都已经进入了公共领域。
如果你非常年轻无法回想起 1984 年 AT&T 分裂时的情景,那么可能也就不知道 AT&T 曾经是
一家电话公司。直到 20 世纪 80 年代初,AT&T 并没有过多地考虑竞争的问题,因为当时在美国如
果想要买一部电话,则必须去 AT&T 公司。所以它将大部分资金投入了纯理论的研究项目。而进行
这些研究项目的单位是位于 New Jersey 州 Murray Hill 的 Bell 实验室。
在 1969 年左右,一个被称为 Multics 的项目失败了,在此之后,Bell 实验室聘用了 Ken Thompson
和 Dennis Ritchie 开始创建一种新的操作系统,从而为软件的开发提供一种改进的环境。在那个时候,
大部分应用程序都是写在穿孔卡片上,并批量地输入到大型机中。在 1980 年的一次关于“UNIX 分
时系统的演变”的演讲中,Dennis Richie 总结了 UNIX 系统的灵魂:
我们想要开发的并不仅仅是一个能够进行编程的好环境,而是一个能够形成友谊的系统。根据
经验我们知道,公用计算的本质是通过远程访问提供的,分时系统并不仅仅是为了将程序输入一个
终端,而是鼓励大家进行密切的沟通。
从那时开始,UNIX 设计的简单性以及强大功能开始打破阻碍软件开发人员的种种障碍。而
UNIX 的基础由几个关键元素组成:

● UNIX 文件系统——因为 UNIX 包含了一个允许子目录级别的文件系统结构(对于当今桌面
用户而言,这种结构看起来类似于在文件夹中包含了文件夹),所以可以使用 UNIX 以一种
直观的方式组织文件和目录。此外,UNIX 将磁盘、磁带以及其他设备表示为单独的设备文
件,这样就能够将它们作为目录中的条目来进行访问,从而大大简化了访问这些设备的复
杂方法。
● 输入/输出重定向——早期的 UNIX 系统还包括了输入重定向和管道。通过一个命令行,
UNIX 用户能够使用右箭头键(>)将一条命令的输出定向到一个文件中。随后,UNIX 又引入
了管道(|)的概念,从而将一条命令的输出定向到另一条命令的输入中。例如,下面所示的命
令行首先将 file1 和 file2 连接起来(cat),然后按照字母顺序对文件中的代码行进行排序(sort),
紧接着对排好序的文本进行分页(pr),以便进行打印,最后将输出定向到计算机的默认打印
机上(lpr):
$ cat file1 file2 | sort | pr | lpr
这种对输入和输出进行定向的方法能够让开发人员创建自己专业的实用工具,并且能够与
现有的实用工具进行联接。这种模块化的方法能够让不同的开发人员编写不同的代码,并
且在用户需要的时候将这些代码片段组合起来。
● 可移植性——简化使用 UNIX 的体验能够使其更具可移植性,从而在不同的计算机上运行。
通过使用设备驱动程序(表示为在文件系统树中的若干个文件),UNIX 只需向应用程序提供
一个接口即可,而应用程序则无须知道底层硬件的详细信息。如果日后想要从 UNIX 移植
到另一个系统,开发人员只需更改驱动程序即可,而应用程序并不需要针对不同的硬件进
行修改。
然而,为了使可移植性成为现实,还需要使用一种高级编程语言来实现所需的软件。为此,Brian
Kernighan 和 Dennis Ritchie 创建了 C 编程语言。在 1973 年,使用 C 语言重新编写了 UNIX。如今,
C 语言仍然是创建 UNIX(以及 Linux)操作系统内核所使用的主要语言。
在 1979 年的一次演讲中,Ritchie 接着说(http://cm.bell-labs.com/who/dmr/hist.html):
如今,仍然使用汇编程序编写的重要的 UNIX 程序就只剩汇编程序自己了;实际上,所有的实
用工具都已经使用 C 语言进行编写,而大部分应用程序也都是使用 C 语言编写的,虽然仍然有许多
介绍 Fortran、Pascal 和 Algol 68 的网站。似乎可以肯定的是,UNIX 的成功很大程度上取决于其软
件的可读性、可修改性以及可移植性,而这三性又取决于 UNIX 在高级语言中的表达。
如果你是一名 Linux 爱好者,并且有兴趣想知道早期的 Linux 中哪些功能被保留下来,那么不
妨读一下 Dennis Ritchie 再版的第一个 UNIX 程序员手册(1971 年 11 月 3 日)。可以在 Dennis Ritchie
的网站中找到该手册:http://cm.bell-labs.com/cm/cs/who/dmr/lstEdman.html。该文档的形式是 UNIX
手册页(man pages),如今,UNIX 手册页仍然是介绍 UNIX 和 Linux 操作系统命令和编程工具的主
要形式。
通过阅读 UNIX 系统的早期文档和说明,可以清楚地看到 UNIX 的开发是一个自由流动的过程,
从而使 UNIX 变得更加优秀。而该过程还导致了代码的共享(包括 Bell 实验室内部的共享以及外部的
共享),从而能够快速地开发高质量的 UNIX 操作系统。此外,还可以产生一个 AT&T 日后难以回滚
的操作系统。

1.3.2 商业化的 UNIX
在 1984 年 AT&T 资产剥离之前(当时,AT&T 被分为 AT&T 以及七个“Baby Bell”公司),AT&T
被禁止出售计算机系统。而日后成为 Verizon、Qwest 和 Alcatel-Lucent 的公司也都是 AT&T 的一部
分。由于 AT&T 对电话系统的垄断,美国政府开始担心一个不受限制的 AT&T 可能会主导新兴的计
算机产业。
因为在资产剥离之前 AT&T 被禁止直接向客户出售计算机,所以 AT&T 将 UNIX 源代码授权给
各大学并且只收取象征性的费用。此时,AT&T 所出售的 UNIX 操作系统都需要用户自己进行编译。
1. Berkeley 软件发行版的产生
到了 1975 年,UNIX V6 成为在 Bell 实验室之外被广泛使用的 UNIX 的第一个版本。根据该版
本的 UNIX 源代码,位于 Berkeley 的 California 大学创建了 UNIX 的第一个主要变异版本,该版本
被称为 BSD(Berkeley Software Distribution,Berkeley 软件发行版)。
在接下来的 10 年里,UNIX 的 BSD 版本和 Bell Labs 版本在各自不同的方向得到了迅速发展。
其中 BSD 继续以自由流动、代码共享的方式(这也是早前 Bell Labs UNIX 的主要特点)向前发展,而
AT&T 则开始使 UNIX 转向商业化。随着一个独立的 UNIX 实验室的产生(该实验室从 Murray Hill
搬出,搬到了 New Jersey的 Summit),AT&T 开始尝试对 UNIX 进行商业化。到了 1984 年,资产剥
离后的 AT&T 开始准备真正出售 UNIX 了。
2. UNIX 实验室和商业化
UNIX 实验室被视为一个无法找到其产地或者找到一种方法来赚钱的宝石。由于它在 Bell 实验
室和 AT&T 的其他部门之间来回迁移,因此它的名称被改了多次。其中给人影响最深的名字是其作
为 AT&T 的剥离资产时的名称:USL(UNIX System Laboratories,UNIX 系统实验室)。
来自 USL 的 UNIX 源代码被部分卖给了 SCO(Santa Cruz Operation),因此曾经一段时间 SCO 使
用这部分代码作为诉讼依据与主要的 Linux 供应商(比如 IBM 和 Red Hat 公司)打官司。所以,我认
为大部分人已经遗忘了 USL 对 Linux 的成功所做的贡献。
当然,在 20 世纪 80 年代,许多计算机公司担心相对于一家位于华盛顿,Redmond 地区的新崛
起的公司,完成资产剥离的 AT&T 将可能对计算机产业产生更大的威胁。为了消除 IBM、Intel、Digital
Equipment Corporation 以及其他计算机公司的担心,UNIX 实验室做出以下承诺,以确保一个平等的
游戏规则:
● 仅出售源代码—— AT&T 将继续只出售源代码,并且对所有的许可证持有人都平等可用,
而不会生产自己的 UNIX 套装。此外,每一家公司还可以将 UNIX 植入到自己的设备中。
直到 1992 年,为了与 Novell 组建合资企业(被称为 Univel)而将该实验室拆分出来,并最终
卖给了 Novell。随后,Novell 根据源代码直接生产了 UNIX 的商业套装。
● 发布的接口——为了在 OEM(Original Equipment Manufacturers,原始设备制造商)之间创建
一个公平的社会环境,同时也为了保证 UNIX 的本质内容不变,AT&T 开始对 UNIX 的不
同端口进行标准化。为此,UNIX 供应商可以使用诸如 POSIX(Portable Operating System
Interface)标准以及 SVID(AT&T UNIX System V Interface Definition)之类的规范来创建兼容
UNIX 系统。同样,这些文档也为 Linux 的创建提供了线路图。

注意
在早前的电子邮件新闻组帖子中,Linus Torvalds 曾经请求获取一份 POSIX 标准的副本(更确切
地讲是在线文档)。我想 AT&T 可能会认为如果不使用任何 UNIX 源代码,没有人能够仅通过这些接
口就可以编写出自己的 UNIX 克隆版本。
● 技术方法——直到 USL 结束时为止,关于 UNIX 发展方向的大多数决定都是基于技术上的
考虑而做出的。通过技术等级的划分,使管理得到了极大提升。据我所知,从来没有任何
人说过所编写的软件破坏了其他公司的软件,或者限制了 USL 合伙人的成功。
当 USL 最终开始雇佣市场营销专家并为终端用户创建桌面 UNIX 产品时,Microsoft Windows
已经牢牢把握了桌面市场。同时,由于 UNIX 的营销方向是为大型计算机系统指定源代码许可,因
此 USL 很难为其产品定价。例如,对于包含了 UNIX 的软件,USL 必须根据主机的价格$100 000
支付每台计算机的许可费用,而不是根据 PC 的价格$2000。再加上没有适用于 UnixWare 的应用程
序,所以你就会明白 USL 努力失败的原因了。
然而,当时其他计算机公司却成功地实现了对 UNIX 系统的营销。其中 SCO 发现了一个利基市
场,主要销售在小型办公室中运行哑终端的 UNIX 的 PC 版本。Sun Microsystems 则针对程序员以及
高端技术应用程序(比如股票交易)出售大量的 UNIX 工作站(该工作站最初是基于 BSD 开发出来的,
但最终在 SVR4 内核标准下与 UNIX 合并)。
20 世纪 80 年代,还出现了其他的商业 UNIX 系统。这种新的 UNIX 所有权声明违背了开放贡
献的精神。为此产生了诉讼案件来保护 UNIX 源代码和商标。在 1984 年,这种新的、受限制的 UNIX
促使了一个新组织的诞生,而该组织最终促使了 Linux 的诞生:Free Software Foundation。
1.3.3 GNU 将 UNIX 转变为免费
在 1984 年,Richard M. Stallman 启动了 GNU 项目(http://www.gnu.org),短语 GNU is Not UNIX
的缩写。作为 FSF(Free Software Foundation)的一个项目,其主要目的是重新编写整个 UNIX 操作系
统,从而可以自由地进行分发。
GNU 项目页面(http://www.gnu.org/gnu/thegnuproject.html)以 Stallman 自己的话讲述了项目名称
的由来。此外,该页面还列举了专有软件公司给那些希望共享、创建和创新的软件开发人员所带来
的问题。
虽然由一两个人重新编写数百万行代码似乎是不可能的,但如果有几十甚至上百个程序员共同
努力,那么该项目就是可能的。请记住,设计 UNIX 的目的就是可以分别构建并在需要时连接在一
起。因为是使用知名且已发布的接口重新编写命令和实用工具,所以可以非常容易地在许多开发人
员中分配任务。
事实证明,全新代码不仅可以获得相同的结果,甚至在某些方面比原始的 UNIX 版本更好。因
为每个人都可以看到该项目所编写的代码,所以随着时间的流逝,不完善的代码可以被快速更改或
者替换。
如果你非常熟悉 UNIX,可以尝试从 Free Software Directory(http://directory.fsf.org/wiki/GNU)中搜
索数以千计的 GNU 软件包,从而找到你所喜欢的 UNIX 命令。除此之外,还可以找到许多其他可
用的软件项目。
随着时间的流逝,术语
免费软件 逐步被术语 开源软件 所取代。虽然开源软件被 Open Source
Initiative(http://www.opensource.org)所大力提倡,但 Free Software Foundation 仍然喜欢使用术语“

费软件 ”。
为了调节两个阵营的矛盾,一些人使用术语免费和开源软件(Free and Open Source Software,
FOSS)来代替。然而,虽然可以免费使用所喜欢的软件,但 FOSS 的基本原则规定使用者有义务将
对所使用软件的改进编写成代码,并供其他人使用。也就是说,当你从别人的工作中受益的同时,
别人也可以从你的工作中受益。
为清晰地定义应该如何处理开源软件,GNU软件项目创建了 GNU Public License,或者简称为
GPL。虽然许多其他的软件许可证在保护免费软件方面使用了不同的方法,但 GPL 是最知名的,且
自身包含了 Linux 内核。GNU Public License 的基本功能如下所示:
● 作者权利——原始作者保留对其软件的所有权利。
● 免费分发——人们可以在自己的软件中使用 GNU 软件,修改以及重新分发软件。然而,在
分发时必须包括源代码(或者可以使他人非常容易地获得源代码)。
● 版权维护——即使对软件进行重新封装和转售,该软件中也必须维护原始的 GNU 协议,这
意味着该软件未来的使用者可以像你一样有机会更改源代码。
在 GNU 软件上没有保修的义务。如果软件出现错误,该软件的原始开发人员没有义务解决该
问题。然而,当有问题的软件包含在他们自己的 Linux 系统或者其他开源软件发布版本中时,许多
大型和小型的公司都提供了付费技术支持((如果想了解更多关于开源软件的详细信息,请参阅本章
后面的“OSI 开源定义”一节)。
尽管在创建成百上千的 UNIX 实用工具方面取得了成功,但 GNU 项目仍然无法创建一段关键
的代码:即内核代码。起初,尝试使用 GNU Hurd 项目(http://www.gnu.org/software/hurd)构建开源内
核,但没有成功,所以 GNU Hurd 项目无法成为主要的开源内核。
1.3.4 BSD 失去了一些动力
一个有机会击败 Linux 并成为主要开源内核的软件项目是 BSD 项目。在 20 世纪 80 年代末期,
位于伯克利的加利福尼亚大学的 BSD 开发人员意识到他们已经重新编写了十年前获得的大部分
UNIX 源代码。
在 1989 年,加利福尼亚大学发布了与 UNIX 类似的代码 Net/1,随后在 1991 年又发布了 Net/2。
正当加利福尼亚大学准备编写完整的类似于 UNIX的操作系统(该系统对所有的 AT&T代码免费)时,
1992 年,AT&T 一纸诉状打断了编写进程。该诉讼声称加利福尼亚大学使用了来自 AT&T UNIX 系
统中的商业秘密编写了该软件。
需要重点注意的是,BSD 开发人员已经对来自 AT&T 的版权保护代码进行了重新编写。而版权
是 AT&T 用来保护其对 UNIX 代码权利的主要手段。一些人相信,如果 AT&T 取得了 UNIX 代码中
所包含概念的专利权,就不会有如今的 Linux 操作系统(或者任何 UNIX 克隆版本)。
当 1994 年 Novel 从 AT&T 买下了 UNIX System Laboratories 之后,该诉讼才尘埃落定。但在此
关键时期,人们开始担心和怀疑 BSD 代码的合法性,同时 BSD 在新兴的开源社区所取得的动力也
在逐步消失。许多人开始寻找其他的开源替代产品。此时,对于一名一直在编写自己内核的芬兰大
学生而言,时机已经到来。
注意
如今,可以从三个主要项目中获取不同的 BSD 版本:FreeBSD、NetBSD 以及 OpenBSD。人们
通常认为 FreeBSD 是最易于使用的,而 NetBSD 主要用于大多数的计算机硬件平台,OpenBSD 则

侧重于安全性。许多注重安全性的人仍然更喜欢使用 BSD 而不是 Linux。此外,由于其许可功能,
BSD 还可以被专有软件供应商所使用,比如 Microsoft 和 Apple,因为它们都不希望其他人共享自己
的操作系统代码。其中,Mac OS X 就是基于一个 BSD 派生产品而构建的。
1.3.5 Linus 弥补了缺失的部分
Linus Torvalds 于 1991 开始从事 Linux 方面的工作,当时他还是芬兰赫尔辛基(Helsinki)大学的
一名学生。最初,他想要创建类似于 UNIX 内核的目的是能够在学校以及家用计算机上使用相同类
型的操作系统。当时,Linus 正在使用 Minix,但他想要超越 Minix 标准所许可的范围。
如前所述,Linus 于 1991 年 8 月 25 日向 comp.OS.minix 新闻组宣布了 Linux 内核的第一个公共
版本,虽然 Torvalds 推测第一个版本直到该年 9 月中旬才会真正出来。
虽然 Torvalds 声明 Linux 是针对 386 处理器编写的,并且可能不具有可移植性,但其他开发人
员一直坚持提倡(以及致力于)使 Linux 的早期版本具有可移植性。1991 年 10 月 5 日,Linux 0.02 版
本发布,其中使用了 C 编程语言重新编写了大部分的原始汇编代码,从而可以将该版本的 Linux 移
植到其他计算机中。
Linux 内核是在 GPL 下完成一个完整的、类似于 UNIX 操作系统所需的最后且最重要的代码片
段。所以,当人们开始将各种发行版本放在一起时,会将 Linux 和 GNU 联系在一起。一些诸如 Debian
之类的发行版本将自己称为 GNU/Linux 发行版本((在 Linux 操作系统的标题或者子标题中不包括
GNU 也是 GNU 项目中一些成员常抱怨的事情。参见 http://gnu.org)。
如今,可将 Linux 描述为一个开源的、类似于 UNIX 的操作系统,它符合 SVID、POSIX 和 BSD
标准。同时,Linux 一直在努力符合 POSIX 以及 UNIX 商标所有人 Open Group(http://www.unix.org)
所设定的标准。
Open Source Development Labs 负责管理 Linux 发展努力的方向。当它与 Free Standards Group
(http://www.linuxfoundation.org)合并后,被重命名为 Linux Foundation,并且聘用了 Linus Torvalds。
其赞助商包括商业 Linux 系统 Who’s Who 以及应用程序供应商,比如 IBM、Red Hat、SUSE、Oracle、
HP、Dell、Computer Asscociates、Intel、Cisco Systems 等。Linux Foundation 的宗旨是通过为 Linux
开发人员提供法律保护和软件开发标准,保护和加快 Linux 的发展。
虽然大部分 Linux 努力主要在企业计算方面,但在桌面舞台也得到了巨大的提高。KDE 和
GNOME 桌面环境不断提升了临时用户的 Linux 体验。而诸如 Xfce 和 LXDE 之类最新轻量级的桌面
环境也为用户提供了有效的替换产品,从而将数以千计的上网本用户带入了 Linux 世界。
Linus Torvalds 目前仍在继续维护和改善 Linux 内核。
注意
如果想了解更多关于 Linux历史的详细信息,可以参阅
Open Sources Voices from the Open Source
Revolution
一书(O’Reily,1999)。可从 http://oreilly.com/catalog/opensources/book/toc.html 在线获取该
书完整的第一个版本。
1.3.6 OSI 开源定义
Linux 提供了一种平台,通过该平台,软件开发人员可以按照自己的意愿修改操作系统,并且
可以在创建应用程序的过程中得到所需的帮助。开源运动的其中一个监视者就是 Open Source
Initiative(OSI,http://www.opensource.org)。

虽然开源软件的主要目的是使源代码可用,但 OSI 在其开源定义中还定义了开源软件的其他目
的。下列针对可接受的开放源码许可证所指定的规则主要是为了保护开源代码的自由性和完整性:
● 免费发布——一个开源许可证不能向那些转售软件的人收取任何费用。
● 源代码——源代码必须包括在软件中,并且在重新发布时不能对源代码有任何限制。
● 派生的作品——许可证必须允许在相同的条件下对代码进行修改和再分发。
● 保持作者源代码的完整性——如果使用源代码的人更改了源代码,许可证可以要求他们删
除原始项目的名称或者版本。
● 不能针对个人或者团体进行区别对待——许可证必须允许所有的人平等合法地使用源
代码。
● 不能针对不同活动领域进行区别对待——许可证不能因为某项目具有商业化特征,或者因
为某项目与软件提供商所不喜欢的活动领域相关联而限制该项目使用源代码。
● 许可证的分发——使用和重新分发软件不应该需要额外的许可证。
● 许可证不能只针对某一产品——许可证不能将源代码限制为某一特殊的软件发行版本。
● 许可证不能限制其他软件——许可证不能够阻碍人们在相同的介质上将开源软件作为非开
源软件来使用。
● 许可证必须在技术上是中立的——许可证不能够限制可以重新分发源代码所使用的方法。
软件开发项目所使用的开源许可证必须满足这些标准,以便被 OSI 接受为一个开源软件。大约
有 70 种不同的许可证被 OSI 所接受,并被用来将软件标记为“OSI 认证开源软件”。除了 GPL 之外,
其他被 OSI 所批准的常用许可证还包括:
● LGPL——GNU LGPL(Lesser General Public License)通常被用来分发其他应用程序所依赖
的库。
● BSD——Berkeley Software Distribution License 允许对源代码进行重新分发,但有两点要求:
1、重新分发的源代码必须保留 BSD 版权声明;2、在没有征得书面允许的情况下,不能使
用贡献者的名字来宣传或者推广衍生软件。然而,BSD 与 GPL 主要的一个区别是 BSD 不
要求修改代码的开发人员将其所做的修改传到社区中。这样做的结果是诸如 Apple 和
Microsoft 之类的专有软件供应商也可以在它们自己的操作系统中使用 BSD 代码。
● MIT——MIT 许可与 BSD 许可类似,但它不包括对宣传和推广的要求。
● Mozilla—— Mozilla 许可包含了 Firefox Web 浏览器源代码以及其他与 Mozilla 项目
(http://www.mozilla.org)相关的软件源代码的使用和重新分发。相对于前面所提到的许可,
Mozilla 许可内容更长,因为它就贡献者以及重复使用源代码的开发人员应该如何行为进行
了更详细的定义。其中包括提交修改时应该提交更改文件,同时,那些为了重新分发而向
源代码中添加了额外代码的开发人员应该知道专利问题以及其他与代码相关联的限制。
开源代码的最终结果是软件可以加快发展,同时在使用方式上也有了更大的灵活性。很多人相
信这么一个事实,如果许多人对同一个项目的源代码进行检查,那么将会产生高质量的软件。就如
开源提倡者 Eric S. Raymond 经常所引用的那样“给予足够多的眼球,所有的错误都是肤浅的”。
1.4 理解 Linux 发行版本是如何出现的
如今在 Internet 上充斥着大量源代码,可以对这些源代码进行编译并封装到 Linux 系统中。然而,
对于大多数临时 Linux 用户而言,需要一种更简单的方法来组成 Linux 系统。为了满足这种需求,
一些最优秀的极客开始构建他们自己的 Linux 发行版本。
Linux 发行版本由用来创建正常工作的 Linux 系统所需的组件以及用来安装并运行这些组件的
程序所组成。从技术角度看,Linux 其实就是所谓的内核。但在使用该内核之前,还必须安装一些
诸如基本命令(比如 GNU 实用工具)之类的其他软件以及需要提供的相关服务(比如远程登录或者
Web服务器),有时可能还需要一个桌面界面和图形应用程序。因此,需要收集这些软件并将它们安
装到计算机的硬盘中。
Slackware(http://www.slackware.com)是如今仍在被持续开发的历史最悠久的 Linux 发行版本之
一。它通过分发已经完成编译的软件并组成软件包(这些软件组件包以一种被称为
tarballs 的形式存
在),从而使 Linux 对于那些非技术用户更加友好。用户只需使用基本的 Linux 命令就可以完成相关
操作,比如格式化磁盘、启动交换以及创建用户账户等。
不久后,许多其他的 Linux 发行版本也陆续出现。而其中一些 Linux 发行版本是为了满足特殊
需要而创建的,比如 KNOPPIX(一个光盘启动的 Linux)、Gentoo(一个很酷的自定义 Linux)以及
Mandrake(日后也称为 Mandriva,它是多个桌面 Linux 发行版本的一种)。但有两种主要的发行版本
逐步成为其他发行版本的基础:即 Red Hat Linux 和 Debian。
1.4.1 选择 Red Hat 发行版本
当 Red Hat 在 20 世纪 90 年代末出现之后,由于多种原因,它很快成为最受欢迎的 Linux 发行
版本:
● RPM 包管理——如果需要对计算机上的软件进行解压缩,tarballs 是非常好用的。但如果想
要更新、删除甚至查找软件,tarballs 则望尘莫及。为此,Red Hat 创建了 RPM 封装格式,
通过使用该格式,一个软件包不仅可以包含共享的文件,还可以包含包版本的相关信息,
比如谁是创建者,哪些文件是文档或是配置文件以及何时被创建。通过安装以 RPM 格式封
装的软件,可以在本地的 RPM 数据库中存储每个软件包相关的上述信息,从而便于查找安
装了什么软件以及更新或者删除软件。
● 简单的安装过程—— Anaconda 安装程序使安装 Linux 变得更加简单。用户只需要完成一些
简单的问题(大部分情况下接受默认值即可)就可以安装 Red Hat Linux。
● 图形化管理——Red Hat 添加了一些简单的图形化工具来配置打印机、添加用户、设置时间
和日期以及完成其他基本的管理任务。这样,桌面用户就可以非常容易地使用 Linux 系统,
而不必运行命令。
多年来,对于 Linux 专业人士和爱好者来说,Red Hat Linux 都是比较受欢迎的 Linux 发行版本。
Red Hat, Inc.除了分发 Red Hat Linux 已编译且可随时运行的版本(被称为二进制版本)之外,还分发了
源代码。但随着 Linux社区用户需求和大客户需求开始逐步出现分歧,Red Hat 放弃了 Red Hat Linux,
转而开始开发两个新的操作系统:Red Hat Enterprise Linux 和 Fedora。
1. 使用 Red Hat Enterprise Linux
到了 2012 年 3 月,Red Hat 公司成为全世界第一家年收入超过十亿美元的开源软件公司。而完
成该目标的途径主要是通过围绕 Red Hat Enterprise Linux(RHEL)开发了一组满足最苛刻的企业计算
环境需求的产品。
当其他 Linux 发行版本还在关注桌面系统或者小型商业计算时,RHEL 已经在为商业和政府开

发处理任务关键性应用程序所需的相关功能。它所构建的系统能够加快世界上最大的金融交易所的
交易速度,同时还能够作为群集和虚拟工具进行部署。
除了出售 RHEL 之外,Red Hat 还为 Linux 用户提供了一个有益的生态环境。如果想要使用
RHEL,客户需要购买订阅,从而可以部署任何所希望的版本。如果退出了 RHEL 系统,还可以使
用该订阅部署其他系统。
根据客户的不同需求,可以使用 RHEL 不同级别的支持。除了相关的支持之外,客户可以获取
硬件以及被认证使用 RHEL 的第三方软件。可以咨询 Red Hat 顾问和工程师,以便帮助他们组成所
需要的计算环境。同时,还可以为他们的雇员进行培训和认证考试(请参阅本章后面对 RHCE 认证
的详细讨论)。
Red Hat 还向 Red Hat Enterprise Linux 添加了其他的产品作为对 Red Hat Enterprise Linux 的自然
延伸。JBoss 是一个中间件产品,主要用来将基于 Java 的应用程序部署到 Internet 或者公司内部互联
网。而 Red Hat Enterprise Virtualiztion 由虚拟主机、管理员以及允许安装、运行、管理、迁移和退出
大型虚拟计算环境的客户计算机组成。
近几年,Red Hat 将其项目组合扩展到云计算。RHEL OpenStack Platform 和 Red Hat Enterprise
Virtualization 为运行和管理虚拟机提供了完整的平台。Red Hat Cloudforms 是一个云管理平台。而
RHEL Atomic 以及 Docker 格式的 Linux 容器为云提供了对应用程序进行集装箱化操作的方法。
很多人尝试通过使用免费获得的 RHEL 源代码并对其进行重建和更名来克隆 RHEL。其中,
Orcale Linux 就是根据 RHEL 源代码构建的,但目前只提供了一个无法兼容的内核。此外,CentOS
也是一个根据 RHEL 源代码构建的社区赞助的 Linux 发行版本。目前,Red Hat 接管了对 CentOS 项
目的支持。
针对本书中的许多示例,选择了使用 Red Hat Enterprise Linux,因为如果想要从事关于 Linux 系
统方面的工作,就需要学会管理 RHEL 系统。然而,如果你刚开始学习 Linux,也可以使用 Fedora
作为一个比较好的入口点来学习使用和管理 RHEL 系统所需的相同技能。
2. 使用 Fedora
RHEL 是商业化、稳定且受支持的 Linux 发行版本。而 Fedora 却是由 Red Hat 公司所发起的免
费且先进的 Linux 发行版本。Fedora 是 Red Hat 用来创建 Linux 开发社区并鼓励那些想要免费的
Linux 用于个人使用以及快速开发的人而开发的一款 Linux 系统。
Fedora 包括 16 000 多个软件包,其中大部分使用了最新的可用开源技术。作为一名用户,可以
免费试用 Fedora 中最新的 Linux 桌面、服务器以及管理界面。而作为一名软件开发人员,则可以使
用最新的 Linux内核和开发工具来创建和测试自己的应用程序。因为 Fedora主要关注的是最新技术,
所以很少关注稳定性。因此如果想要一切工作正常,可能还需要完成一些额外的工作,此外,并不
是所有的软件都完全成熟。
然而,我建议针对本书的大多数示例使用 Fedora,主要理由如下:
● 可以使用 Fedora 作为 Red Hat Enterprise Linux 的一个试验场。Red Hat 在将新的应用程序移
植到 RHEL 之前,都会在 Fedora 上进行测试。通过使用 Fedora,可以学习使用为 Red Hat
Enterprise Linux 所开发的功能所需的技能。
● Fedora 比 RHEL 更便于学习 Linux,此外,它也包括 RHEL 中许多更先进且为企业准备的
工具。
● Fedora 是免费的,不仅在于可以“自由使用”,而且“不需要支付费用”。

Fedora 在那些开发开源软件的开发人员中非常受欢迎。然而,在过去几年里,另一个 Linux 发
行版本吸引了许多初学者的注意:即 Ubuntu。
1.4.2 选择 Ubuntu 或者其他 Debian 发行版本
与 Red Hat Linux 类似,Debian GNU/Linux 发行版本也是一个擅长包装和管理软件的早期 Linux
发行版本。Debian 使用了 deb 包装格式和工具来管理系统中的所有软件包。此外,Debian 还因为稳
定性而名声在外。
许多 Linux 发行版本的根源都可以追溯到 Debian。根据 distrowatch 网站(http://distrowatch.com)
的调查,大约 130 多个现有的 Linux 发行版本可以追溯到 Debian。如今流行的、基于 Debian 的发行
版本包括 Linux Mint、elementary OS、Zorin OS、LXLE、Kali Linux 等。然而,在众多派生自 Debian
的发行版本中,取得最大成功的当属 Ubuntu(http://www.ubuntu.com)。
通过依赖稳定的 Debian 软件开发和包装技术,Ubuntu Linux 发行版本不断发展并添加了 Debian
所不具备的相关功能。在吸引新用户方面,Ubuntu 项目增加了一个简单的图形化安装程序以及易于
使用的图形化工具。此外,Ubuntu 项目还重点关注全功能的桌面系统,并仍然提供了流行的服务器
软件包。
在创建运行 Linux 的新方法方面,Ubuntu 也是一个改革者。通过使用 Ubuntu 所提供的 CD 或
者 USB 驱动器,可以在几分钟之内安装并运行 Ubuntu。通常,CD 中包括的内容是可以在 Windows
中运行的开源应用程序,比如 Web 浏览器和文字处理软件。对于某些人来说,可以非常容易地从
Linux 转换到 Windows。
如果你正在使用 Ubuntu,请不要担心。本书中所包含的大部分主题都可以像在 Fedora 或 RHEL
中那样在 Ubuntu 中正常工作。本书中增加了对 Ubuntu 的介绍内容。
1.5 利用 Linux 找到职业机会
如果想要为一个与计算机相关的研究项目或者技术公司创造一种理念,那么应该从什么地方开
始呢?首先应该有一个想法。然后寻找所需的工具来探究并最终实现自己的想法。此外,在创建过
程中,还可以寻求他人的帮助。
如今,创办一个类似于 Google 或者 Facebook 之类的公司的硬成本仅仅包括一台计算机、连接
到 Internet 以及用来保持整晚编写代码所需的足够的含咖啡因的饮料。如果你拥有改变世界的想法,
那么可以使用 Linux 以及数以千计的软件包来帮助实现自己的梦想。开源世界还包括可以帮助你的
开发人员、管理人员以及用户社区。
如果想要加入一个现有的开源项目,那么有很多的项目可以参加,这些项目通常需要寻找相关
人员来编写代码、测试软件或者编写文档。在这些项目中,你会找到使用软件的人,改进软件的人,
而这些人通常愿意分享他们的专业知识来帮助你。
但不管你是寻求开发下一个伟大的开源软件项目,还是只想获取所需的技能来争取高薪的
Linux 管理员或者开发工作,知道如何安装和维护 Linux 系统以及如何确保系统安全都是大有裨
益的。
Linux 职业的前途如何呢?来自 Linux Foundation(http://www.linuxfoundation.org/publications/
linux-foundation/linux-adoption-trends-end-user-report-2014)的“2014 年 Linux 工作报告”对 1100 多位

招聘经理以及 4000 多名 Linux 专业人员进行了问卷调查。Linux Foundation 的调查结果是:
● 当务之急急需的是 Linux人才——77%的招聘经理认为,招聘具有 Linux 专业知识的人是当
务之急。
● 职业发展——就职业发展机会来说,86%的 Linux 专业人员认为 Linux 知识增加了职业发展
机会。
● 更多的 Linux 招聘——对招聘经理的调查发现,46%的人说他们计划比上一年增加 Linux
人才的招聘数量(比上一年提高 3 个百分点)。
从这份调查报告中可以看出,Linux 正在持续发展,并且增加了对 Linux 专业技术的需求。那
些已经开始使用 Linux 的公司继续向前发展。它们扩大了 Linux 的使用范围,并且发现 Linux 所提
供的节约成本、安全性以及灵活性使其成为一个非常好的投资。
1.5.1 了解如何利用 Linux 挣钱
开源爱好者相信,相对于专有开发模型,开源软件开发模型可以创建更好的软件。从理论上讲,
对于那些想要开发自用软件的公司来说,可以在其他公司的贡献的基础之上作出自己的贡献,从而
得到一个更好的最终产品,同时还节约了开发费用。
与从前相比,那些想要通过出售软件挣钱的公司需要更具有创造性。虽然可以出售自己所创建
的包含了 GPL 软件的软件,但必须向前传递该软件的源代码。当然,其他人可以重新编译产品,使
用甚至转售你的产品,而不必付费。下面列举了不同公司用来处理该问题的不同方法:
● 软件订阅——Red Hat 公司在订阅的基础上出售它的 Red Hat Enterprise Linux 产品。用户每
年只需支付一定数量的费用,就可以获得运行 Linux 所需的二进制码(因此用户不必自己进
行编译),此外,还可以获取有保障的支持,用来跟踪计算机中硬件和软件的工具,访问公
司知识库以及其他资源。
虽然 Red Hat 的 Fedora 项目包含了许多相同的软件,并且也是以二进制的形式提供,但却
无法保证这些软件的可用性以及软件未来的更新。对于小公司或者个人用户来说,可以冒
险使用 Fedora(当然 Fedora 本身也是一个非常出色的操作系统),但对于那些需要运行任务
关键性应用程序的大公司来说,还是会为 RHEL 支付相关费用。
● 培训和认证——随着 Linux 系统在政府和大企业中的广泛采用,需要大量的专业人员来支持
这些系统。为此,Red Hat 提供了培训课程和认证考试来帮助系统管理员熟练使用 Red Hat
Enterprise Linux 系统。特别是 RHCE(Red Hat Certified Engineer)和 RHCSA(Red Hat Certified
System Administrator)已经变得非常流行(http://www.redhat.com/certification)。稍后将更详细
地介绍 RHCE/RHCSA。
此外,Linux Professional Institute(http://www.lpi.org)、CompTIA(http://www.comptia.org)以及
Novell(https://training.novell.com/)也推出了自己的认证程序。其中 LPI 和 CompTIA 是专业计
算机行业协会。而 Novell 则主要以 SUSE 上的培训和认证为中心。
● 赏金——软件赏金是开源软件公司非常喜欢使用的一种挣钱方式。假设你正在使用 XYZ 软
件包并且马上需要使用一个新功能,那么通过向项目或者其他软件开发人员支付一笔软件
赏金,就可以将所需的改进移到队列的前头。而所支付的软件将继续拥有开源许可证,相
对于从零开始创建项目所需的费用,软件赏金只是很少的一部分。
● 捐款——很多开源项目接收来自使用了它们项目代码的个人或开源公司的捐款。令人惊讶
的是,许多开源项目支持一两个开发人员,并且完全依赖捐款来运行。

● 盒装套装、马克杯和 T 恤——一些开源项目拥有在线商店。在该商店中,可以购买盒装的
套装(但有些人仍然喜欢物理 DVD 和文档的硬盘拷贝)以及各种马克杯、T 恤、鼠标垫和其
他物品。如果你非常喜欢某一个项目,看在上帝的份上,请购买一件 T 恤吧!
在此无法完全列举出所有的相关举措,因为每天都有更多富有创造性的方法被创造出来,以支
持那些创建了开源软件的人。但请记住,有许许多多的人已经成为开源软件的贡献者和维护者,因
为他们自己也需要开源软件。每个人为开源软件所做的贡献可以从他人所做的贡献中得到回报。
1.5.2 获得 Red Hat 认证
虽然本书并不会重点介绍如何获得 Linux 认证,但会讲授通过流行的 Linux 认证考试所需要掌
握的一些知识。特别是重点介绍针对 Red Hat Enterprise Linux 7 的 RHCE 和 RHCSA 考试。
如果你正在寻找一份 Linux IT 专业方面的工作,那么通过 RHCSA 或者 RHCE 认证已经成为应
聘成功的必要条件或者优先选择的条件。其中,RHCSA 考试(EX200)提供了基本的认证,相关的内
容包括配置磁盘和文件系统、添加用户、设置一个简单的 Web和 FTP 服务器以及添加交换空间等。
而 RHCE(EX300)则对更高级的服务器配置以及安全功能的高级内容进行测试,比如 SELinux 和防
火墙等。
虽然那些讲授 RHCE/RHCSA 课程和特定考试的人(就像我在过去的三年里所做的那样)并不允
许介绍考试到底考什么,但 Red Hat 介绍了该考试是如何进行的,同时还列举了考试中可能涉及的
相关主题。可以通过下面的网址找到这些考试目标:
● RHSCA—— http://www.redhat.com/en/services/training/ex200-red-hat-certified-system-administratorrhcsa-exam
● RHCE——http://www.redhat.com/en/services/training/ex300-red-hat-certified-engineer-rhce-exam
如考试目标所述,RHCSA 和 RHCE 考试是基于实际表现的,这也就意味着应试者被给定某些
任务,并且必须在实际的 Red Hat Enterprise Linux 系统上完成这些任务,就像在完成某些工作一样。
然后再根据所获得的这些任务的结果进行评分。
如果要参加考试,请经常核对一下这些考试目标,因为它们有时会发生变化。此外,还需要记
住的是,RHCSA 是一个独立的认证;但只有通过 RHCSA 和 RHCE 考试,才可以获得 RHCE 认证。
通常,这两门考试在同一天举行。
可以在 http://training.redhat.com 上报名参加 RHCSA 和 RHCE 培训和考试。全美国以及全球的
重要城市都提供了培训和考试服务。下一节将介绍完成这些考试所需掌握的技能。
1. RHCSA 主题
如前所述,RHCSA 考试主题包括了基本的系统管理技能。在 RHCSA 考试目标网站中已经列举
了当前针对 Red Hat Enterprise Linux 7 的考试主题(为了防止考试主题发生变化,请再次检查考试目
标网站),并且在本书中可以学习这些内容:
● 了解基本工具——需要全面了解命令 Shell(bash)的应用知识,包括如何使用正确的命令语法
以及完成输入/输出重定向(< > >>)。需要知道如何登录到远程和本地系统以及如何创建、编
辑、移动、复制、链接、删除和更改文件许可和所有者。此外,还应该知道如何在手册页
和/usr/share/doc 中查找信息。这些内容将在本书的第 3 章和第 4 章详细介绍。而第 5 章则讲
述如何编辑和查找文件。

● 操作运行系统——在该部分中,必须了解 Linux 启动过程、进入单用户模式、关闭、重启和
更改不同的目标(以前被称为
运行级别 )。你需要识别进程并根据需要更改 nice 值或者终止进
程。此外,还必须能够启动和终止虚拟机和网络服务,以及找到并解释日志文件。第 15 章
描述如何更改目标和运行级别以及管理系统服务。第 6 章介绍管理和更改进程的相关信息。
第 26 章描述如何管理虚拟机。日志记录的相关内容则在第 13 章介绍。
● 配置本地存储—— 设置磁盘分区包括创建物理卷并进行配置,以便用于 LVM(Logical
Volumn Management,逻辑卷管理)或者加密(LUKS)。此外,还可以将这些分区设置为文件
系统或者可以在启动时挂载或启用的交换空间。第 12 章将详细介绍磁盘分区和 LVM,而
LUKS 以及其他加密主题则在第 23 章中介绍。
● 创建和配置文件系统——创建和自动挂载不同类型的文件系统,包括常见的 Linux 文件系统
(ext2、ext3 或者 ext4),LUKS 加密文件系统以及网络文件系统(NFS 和 CIFS)。使用设置组
ID 位功能和 ACL(Access Control List,访问控制列表)创建协作目录。此外,还必须能够使
用 LVM 扩展逻辑卷的大小。文件系统主题将在第 12 章介绍。而 CIFS 和 NFS 则分别在第
19 章和第 20 章介绍。
● 部署、配置和维护系统——该部分包含了一系列主题,包括配置网络、创建 cron 任务、设
置默认的运行级别以及安装 RHEL 系统。此外,必须能够配置一个简单的 HTTP 和 FT 服务
器。而对于软件包,则能够从 Red Hat 网络、远程存储库或者本地文件系统中安装程序包。
最后,还必须可以正确地安装新的内核,并在系统开始时正确选择需要启动的内核。第 13
章将描述 cron 工具。而 Web 服务器(HTTP)和 FTP 服务器则分别在第 17 章和第 18 章介绍。
● 管理用户和组——必须知道如何添加、删除和更改用户账户和组账户,以及什么是密码老
化并学会使用 change 命令。还必须知道如何配置一个系统,从而通过连接一个 LDAP 目录
服务器进行身份验证。第 11 章将介绍配置用户和组的相关内容。
● 管理安全性——必须基本了解如何设置一个防火墙(firewalld、system-config-firewall 或者
iptables)以及如何使用 SELinux。必须能设置 SSH 来完成基于密钥的身份验证。可以在第 24
章学习 SELinux 的相关内容,而防火墙则在第 25 章介绍。第 13 章将讲述基于密钥的身份
验证。
本书将介绍其中的大部分主题。对于本书中没有介绍的功能,可以参阅 Red Hat Enterprise Linux
标题下的 Red Hat 相关文档(http://access.redhat.com/documentation/)。特别是系统管理员指南(System
Administrators’s Guide)中包含了许多与 RHCSA 相关主题的介绍。
2. RHCE 主题
RHCE 考试主题包含了更高级的服务器配置,以及各种用来确保 Red Hat Enterprise Linux 7 中服
务器安全的安全功能。此外,还需要检查一下 RHCE 考试目标网站,以便确定考试所需要学习主题
的最新信息。
系统配置和管理
RHCE 考试中针对系统配置和管理的需求包含了一系列主题,包括:
● 绑定——设置绑定以聚合网络链接。第 14 章将介绍绑定。
● 路由 ID 流量——为特定的网络地址设置静态路由。第 14 章将介绍如何设置自定义路由。

● 防火墙——允许或者阻止系统中选定端口的流量,这些端口提供了诸如 Web、FTP 和 NFS
之类的服务,此外还可以根据发起人的 IP 地址允许或者阻止访问相关服务。第 25 章将介绍
防火墙的相关内容。
● 内核可调参数——学会使用/etc/sysctl.conf文件和 sysctl 命令设置内核可调参数。第 14 章将
简要描述一下如何使用/etc/sysctl.conf 文件更改/proc/system 中的 IP 转发设置。
● Kerberos 身份验证——使用 Kerberos 对 RHEL 系统中的用户进行身份验证。第 11 章将介
绍如何将一个系统的身份验证添加到一个 Kerberos 服务器中。
● 配置 iSCSI——将系统设置为一个 iSCSI 目标和发起人,并在启动时挂载一个 iSCSI 目标。
如果想了解更多信息,请参阅 Red Hat Storage Administrator Guide(https://access.redhat.com/
documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Storage_Administration_Guide/ch-iscsi.
html)。
● 系统报告——使用诸如 sar 之类的功能来报告关于内存的系统使用情况、磁盘访问、网络流
量以及处理器利用率。第 13 章将介绍如何使用 sar 命令。
● Shell 脚本——创建一个简单的 Shell 脚本,以便以不同的方式获取输入和生成输出。第 7
章将介绍 Shell 脚本。
● 远程日志——通过配置 rsyslogd 设备来收集日志消息,并将它们分发到一个远程的日志服务
器中。此外,配置一个远程日志服务器设备,以便收集来自登录客户端的日志消息。第 13
章将讲述如何使用 rsyslogd 实现远程日志。
● SELinux——通过在执行模式中使用安全性增强的 Linux,可以确保下一节所介绍的所有服
务器配置的安全。第 24 章将介绍 SELinux。
安装和配置网络服务
针对下面所列举的每一个网络服务,都需要确保正确完成以下工作:安装服务所需的程序包;
设置 SELinux 从而允许访问服务;对服务进行设置,以便在系统启动时启动;确保主机或用户所使
用的服务的安全(使用 iptables、TCP Wrappers 或者服务本身所提供的相关功能);进行相关配置以便
完成基本操作。所包含的服务如下所示:
● Web 服务器——配置一个 Apache(HTTP/HTTPS)服务器。必须能够设置一个虚拟主机,部
署一段 CGI 脚本,使用私有目录以及允许一个特定的 Linux 组来管理内容。第 17 章将描述
如何配置一个 Web 服务器。
● DNS 服务器——设置一个 DNS 服务器(绑定包),以便充当一个可以将 DNS 查询转发到另一
台 DNS 服务器的缓存域名服务器。不必配置主从区。第 14 章将从客户端的角度来描述 DNS。
如果想要了解更多关于使用 Bind 配置 DNS 服务器的信息,请参阅 RHEL Networking
Guide(https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html-single/
Networking_Guide)。
● NFS 服务器——配置一个 NFS 服务器,以便与特定的客户端系统共享特定目录,从而使这
些目录用于团队协作。第 20 章将介绍 NFS。
● Windows 文件共享服务器——设置 Linux(Samba)向特定的主机和用户提供 SMB 共享。同时
为团队协作配置该共享。第 19 章将讲解如何配置 Samba。
● Mail 服务器——对后缀或者 Sendmail 进行配置,从而接收来自本地主机之外的电子邮件,
并将其转发到一个智能主机。本书将不会讲授 Mail 服务器配置的相关问题(并且也不应该轻

率地进行讲授)。如果想要了解更多这方面的相关信息,可以参阅 RHEL 系统管理员指南
(https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html-single/System
_Administrators_Guide/index.html#ch-Mail_Servers)。
● 安全 Shell 服务器——配置 SSH 服务(sshd),从而允许远程登录到本地系统以及进行基于密
钥的身份验证。另外,还需要配置 sshd.conf 文件。第 13 章将介绍如何配置 sshd 服务。
● 网络时间服务器——配置一个网络时间协议服务器(Net Time Protocol server,ntpd),从而与
其他 NTP 服务器保持时间同步。关于配置 ntpd 服务的相关信息,请参阅第 26 章。
● 数据库服务器——使用不同的方法配置并管理 MariaDB 数据库。可以从 MariaDB.org 网站
学习如何配置 MariaDB(https://mariadb.com/kb/en/mariadb/documentation/)。
如前所述,虽然在 RHCE 考试中还包括其他任务,但是请记住,大部分的任务都是配置服务器,
然后使用任何需要的技术确保这些服务器的安全。这些技术包括防火墙规则(iptables)、SELinux、TCP
Wrappers 或者任何针对特定服务而内置于配置文件中的功能。
1.6 小结
Linux是一种由来自全世界软件开发人员的社区所构建并且由其创建者 Linus Torvalds所领导的
操作系统。它最初源自 UNIX 操作系统,但多年来,在普及程度以及功能方面已经远远超过了 UNIX。
Linux 操作系统的历史可以追溯到早期的 UNIX 系统,当时该系统免费向大学分发,并且由诸
如 BSD 之类的创始人不断提高。Free Software Foundation 开发了许多创建一个完全免费的、类似于
UNIX 的操作系统所需的组件。而 Linux 内核本身就是完成该工作所需的主要组件。
大多数 Linux 软件项目都被一组许可证所保护,而这些许可证则属于 Open Source Initiative。其
中最卓越的许可证是 GNU Public License(GPL)。诸如 Linux Standard Base 之类的标准以及世界级的
组织和企业(比如 Canonical 公司和 Red Hat 公司)使 Linux 在未来成为一款稳定且生产性操作系统。
学习关于如何使用和管理 Linux 系统的基础知识将有助于胜任与 Linux 工作相关的各个方面。
后续每一章都会提供一系列练习,可以通过这些练习检验自己所学到的知识。这也就是为什么要更
好地学习 Linux 系统,以便可以顺利地完成每一章的示例以及习题。
下一章将通过介绍如何获取和使用一个 Linux 桌面系统来学习如何开始使用 Linux。

购买地址:

https://item.jd.com/12369982.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26421423/viewspace-2218006/,如需转载,请注明出处,否则将追究法律责任。

下一篇: CoreOS实战
请登录后发表评论 登录
全部评论
分享计算机前沿技术和国外计算机先进技术书籍。

注册时间:2011-11-08

  • 博文量
    54
  • 访问量
    104952