Linux寶典(第9版)

qinghuawenkang發表於2018-10-30


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 號
責任編輯:王 軍 韓宏志
裝幀設計:牛豔敏
責任校對:成鳳進
責任印製:楊 豔
出版發行:清華大學出版社
網 址:,
地 址:北京清華大學學研大廈 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 認證的相關提示以及本書的更正信
息,可以訪問

目 錄
第Ⅰ部分 入 門
第 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()和 GlusterFS()
之類的專案。
本書並不會介紹所有這些高階主題。然而,對於那些使用 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 新聞組張貼的一則訊息
():
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 接著說():
如今,仍然使用匯程式設計序編寫的重要的 UNIX 程式就只剩彙編程式自己了;實際上,所有的實
用工具都已經使用 C 語言進行編寫,而大部分應用程式也都是使用 C 語言編寫的,雖然仍然有許多
介紹 Fortran、Pascal 和 Algol 68 的網站。似乎可以肯定的是,UNIX 的成功很大程度上取決於其軟
件的可讀性、可修改性以及可移植性,而這三性又取決於 UNIX 在高階語言中的表達。
如果你是一名 Linux 愛好者,並且有興趣想知道早期的 Linux 中哪些功能被保留下來,那麼不
妨讀一下 Dennis Ritchie 再版的第一個 UNIX 程式設計師手冊(1971 年 11 月 3 日)。可以在 Dennis Ritchie
的網站中找到該手冊:。該文件的形式是 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 專案(),短語 GNU is Not UNIX
的縮寫。作為 FSF(Free Software Foundation)的一個專案,其主要目的是重新編寫整個 UNIX 操作系
統,從而可以自由地進行分發。
GNU 專案頁面(/gnu/thegnuproject.html)以 Stallman 自己的話講述了專案名稱
的由來。此外,該頁面還列舉了專有軟體公司給那些希望共享、建立和創新的軟體開發人員所帶來
的問題。
雖然由一兩個人重新編寫數百萬行程式碼似乎是不可能的,但如果有幾十甚至上百個程式設計師共同
努力,那麼該專案就是可能的。請記住,設計 UNIX 的目的就是可以分別構建並在需要時連線在一
起。因為是使用知名且已釋出的介面重新編寫命令和實用工具,所以可以非常容易地在許多開發人
員中分配任務。
事實證明,全新程式碼不僅可以獲得相同的結果,甚至在某些方面比原始的 UNIX 版本更好。因
為每個人都可以看到該專案所編寫的程式碼,所以隨著時間的流逝,不完善的程式碼可以被快速更改或
者替換。
如果你非常熟悉 UNIX,可以嘗試從 Free Software Directory()中搜
索數以千計的 GNU 軟體包,從而找到你所喜歡的 UNIX 命令。除此之外,還可以找到許多其他可
用的軟體專案。
隨著時間的流逝,術語
免費軟體 逐步被術語 開源軟體 所取代。雖然開源軟體被 Open Source
Initiative()所大力提倡,但 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 專案(/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 專案中一些成員常抱怨的事情。參見 )。
如今,可將 Linux 描述為一個開源的、類似於 UNIX 的作業系統,它符合 SVID、POSIX 和 BSD
標準。同時,Linux 一直在努力符合 POSIX 以及 UNIX 商標所有人 Open Group()
所設定的標準。
Open Source Development Labs 負責管理 Linux 發展努力的方向。當它與 Free Standards Group
()合併後,被重新命名為 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)。可從 線上獲取該
書完整的第一個版本。
1.3.6 OSI 開源定義
Linux 提供了一種平臺,透過該平臺,軟體開發人員可以按照自己的意願修改作業系統,並且
可以在建立應用程式的過程中得到所需的幫助。開源運動的其中一個監視者就是 Open Source
Initiative(OSI,)。

雖然開源軟體的主要目的是使原始碼可用,但 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 專案
()相關的軟體原始碼的使用和重新分發。相對於前面所提到的許可,
Mozilla 許可內容更長,因為它就貢獻者以及重複使用原始碼的開發人員應該如何行為進行
了更詳細的定義。其中包括提交修改時應該提交更改檔案,同時,那些為了重新分發而向
原始碼中新增了額外程式碼的開發人員應該知道專利問題以及其他與程式碼相關聯的限制。
開原始碼的最終結果是軟體可以加快發展,同時在使用方式上也有了更大的靈活性。很多人相
信這麼一個事實,如果許多人對同一個專案的原始碼進行檢查,那麼將會產生高質量的軟體。就如
開源提倡者 Eric S. Raymond 經常所引用的那樣“給予足夠多的眼球,所有的錯誤都是膚淺的”。
1.4 理解 Linux 發行版本是如何出現的
如今在 Internet 上充斥著大量原始碼,可以對這些原始碼進行編譯並封裝到 Linux 系統中。然而,
對於大多數臨時 Linux 使用者而言,需要一種更簡單的方法來組成 Linux 系統。為了滿足這種需求,
一些最優秀的極客開始構建他們自己的 Linux 發行版本。
Linux 發行版本由用來建立正常工作的 Linux 系統所需的元件以及用來安裝並執行這些元件的
程式所組成。從技術角度看,Linux 其實就是所謂的核心。但在使用該核心之前,還必須安裝一些
諸如基本命令(比如 GNU 實用工具)之類的其他軟體以及需要提供的相關服務(比如遠端登入或者
Web伺服器),有時可能還需要一個桌面介面和圖形應用程式。因此,需要收集這些軟體並將它們安
裝到計算機的硬碟中。
Slackware()是如今仍在被持續開發的歷史最悠久的 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 網站()
的調查,大約 130 多個現有的 Linux 發行版本可以追溯到 Debian。如今流行的、基於 Debian 的發行
版本包括 Linux Mint、elementary OS、Zorin OS、LXLE、Kali Linux 等。然而,在眾多派生自 Debian
的發行版本中,取得最大成功的當屬 Ubuntu()。
透過依賴穩定的 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(/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)已經變得非常流行()。稍後將更詳細
地介紹 RHCE/RHCSA。
此外,Linux Professional Institute()、CompTIA()以及
Novell()也推出了自己的認證程式。其中 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——
● RHCE——
如考試目標所述,RHCSA 和 RHCE 考試是基於實際表現的,這也就意味著應試者被給定某些
任務,並且必須在實際的 Red Hat Enterprise Linux 系統上完成這些任務,就像在完成某些工作一樣。
然後再根據所獲得的這些任務的結果進行評分。
如果要參加考試,請經常核對一下這些考試目標,因為它們有時會發生變化。此外,還需要記
住的是,RHCSA 是一個獨立的認證;但只有透過 RHCSA 和 RHCE 考試,才可以獲得 RHCE 認證。
通常,這兩門考試在同一天舉行。
可以在 上報名參加 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(
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(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 系統管理員指南
(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。

購買地址:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26421423/viewspace-2218006/,如需轉載,請註明出處,否則將追究法律責任。

相關文章