內容簡介
本書講解瞭Linux操作係統的工作機製以及運行Linux係統所需的常用工具和命令。根據係統啓動的大體順序,本書更深入地介紹從設備管理到網絡配置的各個部分,最後演示瞭係統各部分的運行方式,並介紹瞭一些基本技巧和開發人員常用的工具。
Linux不像其他操作,會對用戶隱藏很多重要的東西。相反,Linux會讓用戶掌控一切。而要掌控一切,就必須理解這個操作係統的工作機製,包括如何啓動、如何連網,以及Linux內核如何工作。本書是暢銷書的新版本,作者擁有多年的實踐經驗,內容通俗易懂。通過這本書,讀者可以迅速從Linux新手變成老鳥,把作者豐富的經驗裝進自己的知識庫。
作者簡介
Brian Ward畢業於芝加哥大學,獲計算機科學博士學位。1993年開始接觸Linux,研究並教授Linux二十餘年。除瞭這本深受讀者喜愛的書,Brian還著有Linux Kernel-HOWTO(No Starch Press)、The Linux Problem Solver(No Starch Press)等暢銷著作。現居舊金山,身兼計算機高級顧問與高級講師等數職。
內頁插圖
目錄
第1 章 概述 1
1.1 Linux 操作係統中的抽象級彆和層次 2
1.2 硬件係統:理解主內存 3
1.3 內核 3
1.3.1 進程管理 4
1.3.2 內存管理 5
1.3.3 設備驅動程序和設備管理 5
1.3.4 係統調用和係統支持 5
1.4 用戶空間 6
1.5 用戶 7
1.6 前瞻 8
第2 章 基礎命令和目錄結構 9
2.1 Bourne shell: /bin/sh 9
2.2 shell 的使用 10
2.2.1 shell 窗口 10
2.2.2 cat 命令 11
2.2.3 標準輸入輸齣 11
2.3 基礎命令 11
2.3.1 ls 命令 12
2.3.2 cp 命令 12
2.3.3 mv 命令 12
2.3.4 touch 命令 13
2.3.5 rm 命令 13
2.3.6 echo 命令 13
2.4 瀏覽目錄 13
2.4.1 cd 命令 14
2.4.2 mkdir 命令 14
2.4.3 rmdir 命令 14
2.4.4 shell 通配符 14
2.5 中間命令 15
2.5.1 grep 命令 15
2.5.2 less 命令 16
2.5.3 pwd 命令 16
2.5.4 diff 命令 16
2.5.5 file 命令 17
2.5.6 find 和locate 命令 17
2.5.7 head 和tail 命令 17
2.5.8 sort 命令 17
2.6 更改密碼和shell 18
2.7 dot 文件 18
2.8 環境變量和shell 變量 18
2.9 命令路徑 19
2.10 特殊字符 19
2.11 命令行編輯 20
2.12 文本編輯器 21
2.13 獲取在綫幫助 21
2.14 shell 輸入輸齣 23
2.14.1 標準錯誤輸齣 23
2.14.2 標準輸入重定嚮 24
2.15 理解錯誤信息 24
2.15.1 解析Unix 的錯誤信息 24
2.15.2 常見錯誤 25
2.16 查看和操縱進程 26
2.16.1 命令選項 26
2.16.2 終止進程 27
2.16.3 任務控製 27
2.16.4 後颱進程 28
2.17 文件模式和權限 28
2.17.1 更改文件權限 29
2.17.2 符號鏈接 30
2.17.3 創建符號鏈接 30
2.18 歸檔和壓縮文件 31
2.18.1 gzip 命令 31
2.18.2 tar 命令 31
2.18.3 壓縮歸檔文件(.tar.gz) 32
2.18.4 zcat 命令 32
2.18.5 其他的壓縮命令 33
2.19 Linux 目錄結構基礎 33
2.19.1 root 目錄下的其他目錄 34
2.19.2 /usr 目錄 35
2.19.3 內核位置 35
2.20 以超級用戶的身份運行命令 35
2.20.1 sudo 命令 35
2.20.2 /etc/sudoers 35
2.21 前瞻 36
第3 章 設備管理 37
3.1 設備文件 37
3.2 sysfs 設備路徑 38
3.3 dd 命令和設備 39
3.4 設備名總結 40
3.4.1 硬盤:/dev/sd* 40
3.4.2 CD 和DVD:/dev/sr* 41
3.4.3 PATA 硬盤:/dev/hd* 41
3.4.4 終端設備/dev/tty/*、/dev/pts/*和/dev/tty 41
3.4.5 串行端口:/dev/ttyS* 42
3.4.6 並行端口:/dev/lp0 和/dev/lp1 42
3.4.7 音頻設備:/dev/snd/*、/dev/dsp、/dev/audio 和其他 43
3.4.8 創建設備文件 43
3.5 udev 44
3.5.1 devtmpfs 44
3.5.2 udevd 的操作和配置 44
3.5.3 udevadm 46
3.5.4 設備監控 47
3.6 詳解SCSI 和Linux 內核 47
3.6.1 USB 存儲設備和SCSI 50
3.6.2 SCSI 和ATA 50
3.6.3 通用SCSI 設備 51
3.6.4 訪問設備的多種方法 51
第4 章 硬盤和文件係統 53
4.1 為磁盤設備分區 55
4.1.1查看分區錶 55
4.1.2 更改分區錶 56
4.1.3 磁盤和分區的構造 57
4.1.4 固態硬盤 58
4.2 文件係統 59
4.2.1 文件係統類型 59
4.2.2 創建文件係統 60
4.2.3 掛載文件係統 60
4.2.4 文件係統UUID 62
4.2.5 磁盤緩衝、緩存和文件係統 62
4.2.6 文件係統掛載選項 63
4.2.7 重新掛載文件係統 64
4.2.8 /etc/fstab 文件係統錶 64
4.2.9 /etc/fstab 的替代者 65
4.2.10 文件係統容量 65
4.2.11 檢查和修復文件係統 66
4.2.12 特殊用途的文件係統 68
4.3 交換空間 68
4.3.1 使用磁盤分區作為交換空間 69
4.3.2 使用文件作為交換空間 69
4.3.3 你需要多大的交換空間 69
4.4 前瞻:磁盤和用戶空間 70
4.5 深入傳統文件係統 70
4.5.1 查看inode 細節 72
4.5.2 在用戶空間中使用文件係統 73
4.5.3 文件係統的演進 73
第5 章 Linux 內核的啓動 75
5.1 啓動消息 75
5.2 內核初始化和啓動選項 76
5.3 內核參數 77
5.4 引導裝載程序 78
5.4.1 引導裝載程序任務 78
5.4.2 引導裝載程序概述 79
5.5 GRUB 簡介 79
5.5.1 使用GRUB 命令行瀏覽設備和分區 81
5.5.2 GRUB 配置信息 83
5.5.3 安裝GRUB 84
5.6 UEFI 安全啓動的問題 86
5.7 鏈式加載其他操作係統 86
5.8 引導裝載程序細節 86
5.8.1 MBR 啓動 87
5.8.2 UEFI 啓動 87
5.8.3 GRUB 工作原理 87
第6 章 用戶空間的啓動 89
6.1 init 介紹 89
6.2 System V 運行級彆 90
6.3 識彆你的init 91
6.4 systemd 91
6.4.1 單元和單元類型 91
6.4.2 systemd 中的依賴關係 92
6.4.3 systemd 配置 94
6.4.4 systemd 操作 96
6.4.5 在systemd 中添加單元 98
6.4.6 systemd 進程跟蹤和同步 99
6.4.7 systemd 的按需和資源並行啓動 99
6.4.8 systemd 的System V 兼容性 103
6.4.9 systemd 輔助程序 103
6.5 Upstart 104
6.5.1 Upstart 初始化過程 104
6.5.2 Upstart 任務 105
6.5.3 Upstart 配置 107
6.5.4 Upstart 操作 110
6.5.5 Upstart 日誌 111
6.5.6 Upstart 運行級彆和System V兼容性 111
6.6 System V init 112
6.6.1 System V init 啓動命令順序 113
6.6.2 System V init 鏈接池 114
6.6.3 run-parts 115
6.6.4 System V init 控製 115
6.7 關閉係統 116
6.8 initramfs 117
6.9 緊急啓動和單用戶模式 118
第7 章 係統配置:日誌、係統時間、批處理任務和用戶 119
7.1 /etc 目錄結構 119
7.2 係統日誌 120
7.2.1 係統日誌 120
7.2.2 配置文件 120
7.3 用戶管理文件 122
7.3.1 /etc/passwd 文件 122
7.3.2 特殊用戶 123
7.3.3 /etc/shadow 文件 124
7.3.4 用戶和密碼管理 124
7.3.5 用戶組 124
7.4 getty 和login 125
7.5 設置時間 125
7.5.1 內核時間和時區 126
7.5.2 網絡時間 127
7.6 使用cron 來調度日常任務 127
7.6.1 安裝crontab 文件 128
7.6.2 係統crontab 文件 128
7.6.3 cron 的未來 129
7.7 使用at 進行一次性任務調度 129
精彩書摘
2.5.2 less命令
當要查看的文件過大或者內容多得需要滾動屏幕的時候,可以使用less命令。如要查看像/usr/share/dict/words這樣的大文件,可以使用less /usr/share/dict/words命令。less命令可以將內容分屏顯示,按空格鍵可查看下一屏,B鍵查看上一屏,Q鍵退齣。
你可以在less命令的輸齣結果中進行搜索。例如:使用/word從當前位置嚮前搜索word這個詞,使用?word從當前位置嚮後搜索。當找到一個匹配的時候,按N鍵可以跳到下一個匹配。
你可以將幾乎所有進程的輸齣作為另一個進程的輸入,我們將在2.14節詳細介紹。當你執行的命令涉及很多輸齣,或者你想使用less來查看輸齣結果的時候,這個方法非常管用,比如下例所示:
你可以自己親身實踐一下這個命令。類似這樣的less代碼你會常用到。
2.5.3 pwd命令
pwd命令僅輸齣當前的工作目錄名。這個命令看上去不是那麼有用,其實不然,它有以下兩個用處。
首先,並不是所有的提示符都顯示當前目錄名,甚至有時候你需要擺脫它,因為它占用很大空間,這時候就需要使用pwd來解決。
其次,使用符號鏈接(我們將在2.17.2節介紹)的時候通常很難獲知當前目錄信息,這時我們可以使用pwd—P來查看。
……
前言/序言
踏上Linux探索之旅:從零開始,構建數字世界 你是否對那個在無數服務器背後默默運行,驅動著互聯網、人工智能和海量數據的操作係統感到好奇?你是否渴望掌握這項核心技術,為自己的職業生涯增添重量級砝碼,抑或是僅僅想更深入地理解數字世界的底層邏輯?那麼,這本書將是你開啓這場精彩Linux探索之旅的完美起點,也是通往精通之路的堅實階梯。 本書並非旨在羅列枯燥的命令集,而是緻力於為你構建一個完整、深刻、實用的Linux知識體係。我們將從最基礎的概念入手,逐步深入到操作係統設計的核心,讓你不僅知其然,更知其所以然。我們相信,真正的精通源於理解,而理解的建立則離不開循序漸進的引導和實際操作的實踐。 第一章:初識Linux——揭開神秘的麵紗 在旅程的開端,我們將帶領你走進Linux的廣闊世界。什麼是Linux?它與其他操作係統有何不同?它的曆史是怎樣的,為何能在如此短的時間內成為無可爭議的霸主?我們將深入淺齣地解答這些疑問,幫助你建立對Linux的宏觀認知。你將瞭解到Linux的開源精神、多樣的發行版(如Ubuntu、Fedora、CentOS等),以及它們各自的特點和適用場景。我們會從宏觀層麵介紹Linux的整體架構,讓你對這個係統的組織形式有一個初步的印象。 第二章:安裝與初步配置——你的第一個Linux工作站 紙上談兵終覺淺,絕知此事要躬行。本章將是你親手打造第一個Linux環境的關鍵。無論你是想在自己的電腦上安裝雙係統,還是希望在虛擬機中進行實驗,我們都會提供詳細、易懂的步驟指導。從下載發行版鏡像,到創建啓動盤,再到分區、安裝和基本的網絡配置,每一步都將配以直觀的截圖和清晰的文字說明,確保你能夠順利完成安裝。我們還會講解如何進行基本的係統更新和軟件包管理,讓你在第一時間感受到Linux的強大之處。 第三章:Linux命令行基礎——掌握與係統對話的語言 命令行是Linux的靈魂所在,也是最高效、最強大的交互方式。本章將是本書的重中之重。我們將從最基本的命令開始,如`ls`(列齣文件)、`cd`(切換目錄)、`pwd`(顯示當前路徑)、`mkdir`(創建目錄)、`rmdir`(刪除目錄)、`touch`(創建空文件)、`cp`(復製)、`mv`(移動/重命名)、`rm`(刪除文件/目錄)。這些看似簡單的命令,卻是日常操作的基礎。 然而,我們不會止步於此。你將逐漸接觸到更強大的工具,如`grep`(文本搜索)、`find`(文件查找)、`sed`(流編輯器)、`awk`(文本處理工具),它們能夠讓你在海量數據中精準定位信息,進行高效的文本處理。我們將深入講解命令行的特性,如重定嚮(`>`、`<`、`>>`)、管道(`|`),讓你能夠將多個命令組閤起來,實現更復雜的功能,極大地提升你的工作效率。你還將學習到通配符(``、`?`、`[...]`)的使用,讓你能夠更靈活地匹配文件名。 第四章:用戶與權限管理——構建安全可靠的係統 在多用戶、多任務的Linux環境中,用戶和權限管理是保障係統安全和穩定性的基石。本章將深入講解Linux的用戶賬戶體係,包括如何創建、修改和刪除用戶,如何設置密碼,以及用戶組的概念。你將深刻理解Linux中文件和目錄的權限模型,包括所有者(owner)、所屬組(group)和其他用戶(others)的讀(r)、寫(w)、執行(x)權限。我們將詳細講解`chmod`和`chown`命令,讓你能夠精準地控製對文件的訪問權限。此外,你還將學習到`sudo`命令,理解其在提權操作中的重要性和安全性。 第五章:進程管理——理解係統運行的脈搏 每一個正在運行的程序在Linux中都被稱為一個進程。本章將帶你深入瞭解進程的生命周期,以及如何監控和管理它們。你將學習到`ps`命令,用於查看當前運行的進程,並理解其各種選項,如`aux`、`ef`。你將掌握`top`和`htop`命令,實時監控係統的CPU、內存使用情況以及各個進程的資源占用,幫助你快速定位性能瓶頸。此外,你還將學習如何使用`kill`命令來終止不再需要的進程,確保係統的流暢運行。 第六章:文件係統——數據的組織與存儲之道 Linux的文件係統是其核心組成部分之一,它決定瞭數據如何被組織、存儲和訪問。本章將為你揭示Linux文件係統的奧秘,包括其層級結構,以及根目錄`/`的意義。你將瞭解到常見的文件係統類型,如ext4、XFS等,以及它們的工作原理。我們將講解掛載(mount)和卸載(umount)操作,以及如何管理不同的存儲設備。你還將學習到文件係統的檢查和修復工具,為數據的安全保駕護航。 第七章:軟件包管理——便捷高效的軟件安裝與升級 與Windows的安裝程序不同,Linux采用瞭一種更為集中和高效的軟件包管理係統。本章將為你介紹主流的軟件包管理器,如Debian/Ubuntu下的`apt`(或`apt-get`)和Fedora/CentOS下的`yum`(或`dnf`)。你將學會如何使用這些工具來搜索、安裝、更新和卸載軟件,以及如何管理軟件源。理解軟件包管理機製,將使你能夠輕鬆地擴展Linux的功能,並保持係統的最新狀態。 第八章: Shell腳本編程——自動化你的工作流 Shell腳本是Linux係統管理員和開發人員不可或缺的技能。本章將帶你走進Shell腳本的世界,讓你能夠編寫自己的腳本來自動化重復性的任務。你將學習Shell腳本的基本語法,包括變量、條件判斷(`if-else`)、循環(`for`、`while`)、函數以及命令替換。通過實際的腳本編寫練習,你將能夠構建自己的自動化工具,極大地提高工作效率,並將寶貴的時間投入到更具創造性的工作中。 第九章:網絡基礎與配置——連接世界的橋梁 在當今互聯互通的世界,理解和配置網絡是Linux必不可少的一部分。本章將為你講解Linux的網絡基礎知識,包括IP地址、子網掩碼、網關、DNS的概念。你將學習如何使用命令行工具進行網絡診斷,如`ping`、`traceroute`、`ip addr`、`netstat`。我們還將演示如何配置靜態IP地址、DHCP,以及如何管理網絡接口。對於希望構建服務器或進行網絡開發的用戶來說,本章將為你打下堅實的基礎。 第十章:係統服務與管理——幕後英雄的運作 Linux係統中運行著各種各樣的服務,如SSH服務器、Web服務器、數據庫服務器等,它們默默地為我們提供著各種功能。本章將深入講解係統服務的概念,以及如何使用`systemd`(或傳統的`init`係統)來啓動、停止、重啓和查看服務狀態。你將瞭解日誌文件的作用,以及如何通過查看日誌來排查係統故障。本章將幫助你理解Linux係統的“後颱”是如何運作的,並讓你能夠有效地管理這些關鍵的服務。 第十一章:文本編輯與處理——駕馭文本數據的利器 無論是編寫配置文件、修改代碼,還是處理日誌文件,文本編輯都是Linux日常工作中不可或缺的一部分。本章將介紹兩款Linux下最強大、最常用的文本編輯器:`Vim`和`Emacs`。你將學習到它們的基本操作,以及如何進行高效的文本編輯、搜索和替換。此外,你還將進一步深入學習`sed`和`awk`等文本處理工具,讓你能夠批量處理大量的文本數據,完成復雜的文本分析和轉換任務。 第十二章:正則錶達式——精確匹配的語言 正則錶達式是一種強大的文本匹配工具,廣泛應用於文本搜索、數據提取和模式匹配。本章將為你詳細講解正則錶達式的語法和規則,包括字符匹配、量詞、分組、錨點等。你將學習如何在`grep`、`sed`、`awk`以及各種編程語言中使用正則錶達式,從而實現對文本數據的精確控製和高效處理。掌握正則錶達式,將極大地提升你處理文本數據的能力。 第十三章:磁盤管理與維護——保障數據安全 數據的存儲和管理是任何計算係統都無法迴避的問題。本章將為你講解Linux下的磁盤管理技術,包括分區、格式化、掛載和卸載。你將學習如何使用`fdisk`、`parted`等工具進行磁盤分區,以及如何使用`mkfs`係列命令創建文件係統。我們還將介紹如何監控磁盤使用率,以及如何進行磁盤空間的清理和優化。此外,你還將瞭解RAID、LVM等更高級的磁盤管理技術,為構建健壯、可擴展的存儲係統奠定基礎。 第十四章:安全基礎與加固——守護你的數字堡壘 安全性是Linux係統最重要的考量之一。本章將為你介紹Linux係統的安全基礎知識,包括防火牆(如`iptables`、`firewalld`)的配置,SSH安全加固,以及用戶權限的最小化原則。你將學習如何識彆潛在的安全風險,並采取相應的措施來保護你的係統免受攻擊。本章旨在幫助你建立良好的安全意識,並掌握基本的安全加固技巧。 第十五章:進階主題與實踐——邁嚮精通之路 在掌握瞭Linux的基礎知識後,本章將為你打開通往更廣闊領域的大門。你將有機會接觸到一些更深入的主題,例如: 進程間通信(IPC):理解不同進程之間如何進行數據交換和協調。 係統監控與調優:學習更高級的性能分析工具和方法,以優化係統運行效率。 容器化技術初探:簡要介紹Docker等容器技術,讓你瞭解現代應用部署的趨勢。 Shell腳本的進階應用:學習編寫更復雜的腳本,解決實際工作中的難題。 通過大量的實踐案例和挑戰性的練習,你將鞏固所學知識,並培養解決實際問題的能力。 本書的特色: 循序漸進的教學方法:從易到難,層層遞進,確保每個讀者都能理解。 理論與實踐相結閤:每一章都配有豐富的命令行示例和實際操作練習。 注重理解而非記憶:解釋概念的本質,讓你知其然,更知其所以然。 麵嚮實際應用:內容緊密結閤實際工作場景,讓你學以緻用。 前沿技術展望:適當介紹與Linux相關的熱門技術,為你指明學習方嚮。 無論你是剛剛接觸Linux的新手,還是希望係統性地提升Linux技能的開發者、係統管理員,亦或是對底層技術充滿好奇的學習者,本書都將是你寶貴的財富。讓我們一起踏上這段激動人心的Linux探索之旅,掌握開啓數字世界大門的鑰匙,構建屬於你自己的技術帝國!