01 / 導讀
導讀
引用
Ward, B. (2021). How Linux Works: What Every Superuser Should Know (3rd ed.). No Starch Press.
章節概要
第3版共十七章,另有參考文獻和索引(索引從第423頁開始)。序言說明了本書的讀者物件、先修知識、閱讀方法、關於動手實踐的說明以及全書結構。據出版社介紹,本版新增了邏輯卷管理器(LVM)、journald日誌系統和IPv6的內容,擴充了對systemd的討論,並新增了一章講虛擬化,包括容器和cgroups。各章從系統各層的概覽出發,經過命令列、裝置、磁碟和啟動,再到程序、網路、使用者環境、開發工具和虛擬化,許多小節都展示了能揭示系統執行情況的命令和檔案。
第1章:全域性概覽
講Linux系統中抽象的層次和分層:硬體與主存、核心、使用者空間以及使用者。這一章給出一幅地圖,全書其餘部分逐一填充。
第2章:基礎命令和目錄層次結構
一份實用的shell入門:基礎和中級命令、目錄導航、環境變數與命令路徑、特殊字元、編輯器、線上幫助、輸入輸出重定向、錯誤資訊、程序、檔案許可權、歸檔、目錄層次結構以及以超級使用者身份執行命令。
第3–4章:裝置;磁碟和檔案系統
講裝置檔案、sysfs裝置路徑、dd、裝置命名和udev,還有一節深入介紹核心中的SCSI。第4章講分割區、檔案系統、交換空間和邏輯卷管理器,最後深入傳統檔案系統的內部。
第5–6章:Linux核心如何啟動;使用者空間如何啟動
免費的樣章從如何檢視啟動資訊(例如用journalctl -k)講起,接著講核心初始化與參數、引導載入程式、GRUB、UEFI安全啟動問題以及鏈式載入。第6章介紹init、systemd的細節、System V執行級別與init、關機、初始RAM檔案系統以及緊急啟動。
第7章:系統配置:日誌、系統時間、批處理任務和使用者
講系統日誌、/etc的結構、使用者管理檔案、getty與login、設定時間、用cron、systemd定時器單元和at排程任務、使用者訪問相關主題以及可插拔認證模組(PAM)。
第8章:深入瞭解程序和資源利用
講跟蹤程序、用lsof查詢開啟的檔案、跟蹤程式執行和系統呼叫、執行緒、資源監控以及控制組(cgroups)。
第9–10章:理解網路及其配置;網路應用和服務
第9章從分層和封包講起,經過IP路由、IPv6、ICMP和DNS工具、核心網路介面、配置管理器、主機名解析、TCP與UDP、DHCP、把Linux配置為路由器、NAT、防火牆、ARP與NDP,一直講到無線網路。第10章上升到服務層面:網路伺服器、較早的inetd/xinetd、診斷工具、遠端過程呼叫、網路安全和socket。
第11章:shell指令碼入門
講指令碼基礎、引號、特殊變數、退出碼、條件判斷、迴圈、命令替換、臨時檔案、here文件、常用工具、子shell和讀取輸入,最後討論何時不應使用shell指令碼。
第12–14章:網路檔案傳輸與共享;使用者環境;Linux桌面和列印概覽
用rsync複製檔案,用Samba、SSHFS、NFS和雲端儲存共享檔案;shell啟動檔案及其陷阱;以及桌面元件,比較Wayland與X Window系統,並介紹D-Bus和列印。
第15–16章:開發工具;從C原始碼編譯軟體入門
講C編譯器、make、lex與yacc、指令碼語言和Java,然後講從原始碼構建軟體:構建系統、GNU Autoconf、安裝實踐、打補丁以及故障排查。
第17章:虛擬化
本版新增的一章:虛擬機器、容器以及基於執行時的虛擬化。
核心概念
第1–4章:分層、shell與儲存
- 核心與使用者空間:享有特權的核心與它所管理的程序之間的劃分。
- 裝置檔案與udev:核心如何把硬體呈現為檔案,以及裝置名如何生成。
- 檔案系統、交換空間與LVM:磁碟如何分割區、格式化並彙集成邏輯卷。
第5–8章:啟動與程序
- 啟動順序:韌體和引導載入程式(GRUB),核心初始化與參數,然後是init。
- systemd:啟動並管理服務、定時器和日誌的init系統。
- 系統呼叫與跟蹤:觀察程序如何向核心請求服務。
- 控制組:限制和統計程序資源的核心機制。
第9–12章:網路
- 網路分層:物理層、網際層和傳輸層,以及Linux如何配置每一層。
- 路由、NAT與防火牆:封包如何被轉發、轉換和過濾。
- socket:程式在網路上或本機內通訊所使用的介面。
第13–17章:使用者、開發與虛擬化
- 啟動檔案:塑造每個使用者環境的shell配置。
- 從原始碼構建:編譯器、
make、Autoconf和補丁。 - 容器與虛擬機器:透過模擬整臺機器或共享宿主核心來隔離工作負載。
評析
優點
- 直接考察真實的系統。 樣章展示了這種方法:啟動的每個階段都配有命令和日誌輸出加以說明,讀者可以在自己的機器上觀察。這使核心、init、系統呼叫等抽象概念變得具體。
- 覆蓋現代Linux的組成部分。 systemd、journald、cgroups、LVM、IPv6、Wayland和容器都有專門的小節,體現了出版社列出的更新內容。出版社引用的Sandra Henry-Stocker指出,這些變化正是需要第3版的原因,並稱本書全面而新穎。
- 可作參考書使用。 出版社引用的Lee Teschler(Microcontroller Tips)認為,本書的組織方式讓讀者可以在某個主題上只深入到所需的程度;Ian Bruntlett在 C Vu(ACCU,第33卷第4期)上推薦本書時,稱它是一份附有深入線索的概覽。
局限
- 講的是Linux,而不是一般的作業系統。 本書說明一個系統如何組成和管理;排程演算法、記憶體管理理論、同步以及檔案系統設計原理都不是章節主題,因此它不能代替作業系統教材。
- 實踐細節會過時。 本書的價值很大程度上在於具體的命令、檔案和工具,而這些會隨發行版和版本變化;出版社維護著勘誤表,讀者應核對最新文件。
- 部分主題重廣度而輕深度。 桌面概覽和虛擬化等章節相對於其主題篇幅較短,正如其標題(「概覽」)和小節數(虛擬化只有三節)所示。
在課程中的定位
本書是作業系統課程中的實踐伴讀。Silberschatz、Galvin和Gagne的 Operating System Concepts、Tanenbaum和Bos的 Modern Operating Systems,以及Arpaci-Dusseau夫婦免費提供的 Operating Systems: Three Easy Pieces 以一般化的方式講授概念(程序、排程、記憶體、併發、檔案系統);Ward則展示這些概念在一臺執行中的Linux機器上出現在哪裡、如何檢視。最好與其中一本同時閱讀:教材講到程序或檔案系統時,就用本書第4章和第8章在實踐中加以印證。
Saltzer和Kaashoek的 Principles of Computer System Design 在更一般的層面上,把抽象、模組化、命名、保護和通訊作為計算機系統的設計原理來討論;Ward關於分層、網路和虛擬化的章節為這些思想提供了具體的Linux例項。
如何使用本書
本書適合需要Linux實際操作經驗來配合作業系統或網路課程的學生、新入行的系統管理員,以及想了解自己所部署機器的開發者。具備基本的計算機常識並願意使用命令列就可以開始;第15–16章需要一些程式設計經驗。
實用閱讀計畫:
- 核心: 先讀第1–2章,再按順序讀第3–8章。這部分從硬體開始,經啟動、配置一直講到程序,與作業系統課程的主題對應最直接。
- 網路: 第9–10章,對需要執行伺服器的人必不可少;第12章以它們為基礎。
- 技能: 講shell指令碼的第11章和講使用者環境的第13章,最好開啟終端邊讀邊練。
- 按興趣選讀: 第14章(桌面)、第15–16章(開發與構建軟體)和第17章(虛擬化),最後一章是通向容器的有益橋梁。
在一臺可以放心折騰的Linux機器或虛擬機器上讀這本書。執行每節給出的命令,把輸出與書中對照;出現差異時,查閱發行版文件和出版社的勘誤表。把每一章與作業系統教材中對應的概念章節配合閱讀。
