第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
7.8 瞭解用戶ID和用戶切換 129
7.9 用戶標識和認證 131
7.10 PAM 132
7.10.1 PAM配置 133
7.10.2 關於PAM的一些注解 135
7.10.3 PAM和密碼 136
7.11 前瞻 136
第8章 進程與資源利用詳解 137
8.1 進程跟蹤 137
8.2 使用lsof 查看打開的文件 138
8.2.1 lsof輸齣 138
8.2.2 lsof的使用 139
8.3 跟蹤程序執行和係統調用 139
8.3.1 strace命令 139
8.3.2 ltrace命令 141
8.4 綫程 141
8.4.1 單綫程進程和多綫程進程 141
8.4.2 查看綫程 142
8.5 資源監控簡介 143
8.6 測量CPU時間 143
8.7 調整進程優先級 144
8.8 平均負載 145
8.8.1 uptime的使用 145
8.8.2 高負載 145
8.9 內存 146
8.9.1 內存工作原理 146
8.9.2 內存頁麵錯誤 146
8.10 使用vmstat監控CPU和內存性能 147
8.11 I/O監控 149
8.11.1 使用iostat 149
8.11.2 使用iotop查看進程的I/O使用和監控 150
8.12 使用pidstat監控進程 151
8.13 更深入的主題 151
第9章 網絡與配置 153
9.1 網絡基礎 153
9.2 網絡層次 154
9.3 網際層 155
9.3.1 查看自己計算機的IP 地址 156
9.3.2 子網 157
9.3.3 共用子網掩碼與無類域內路由選擇 157
9.4 路由和內核路由錶 158
9.5 基本ICMP和DNS工具 159
9.5.1 ping 159
9.5.2 traceroute 160
9.5.3 DNS與host 160
9.6 物理層與以太網 161
9.7 理解內核網絡接口 161
9.8 配置網絡接口 162
9.9 開機啓動的網絡配置 163
9.10 手動和開機啓動的網絡配置帶來的問題 163
9.11 一些網絡配置管理器 164
9.11.1 NetworkManager的操作 164
9.11.2 與NetworkManager交互 164
9.11.3 NetworkManager的配置 165
9.12 解析主機名 166
9.12.1 /etc/hosts 167
9.12.2 resolv.conf 文件 167
9.12.3 緩存和零配置DNS 167
9.12.4 /etc/nsswitch.conf文件 168
9.13 Localhost 168
9.14 傳輸層:TCP、UDP和Service 169
9.14.1 TCP 端口與連接 169
9.14.2 建立TCP連接 169
9.14.3 端口的數字和/etc/services 170
9.14.4 TCP的特點 171
9.14.5 UDP 171
9.15 普通本地網絡 172
9.16 理解DHCP 173
9.16.1 Linux的DHCP客戶端 173
9.16.2 Linux的DHCP服務器 173
9.17 將Linux配置成路由器 174
9.18 私有網絡 175
9.19 網絡地址轉換(IP僞裝) 176
9.20 路由器與Linux 177
9.21 防火牆 177
9.21.1 Linux防火牆基礎 178
9.21.2 設置防火牆規則 179
9.21.3 防火牆策略 181
9.22 以太網、IP和ARP 182
9.23 無綫以太網 183
9.23.1 iw 184
9.23.2 無綫網絡安全 184
9.24 小結 185
第10章 網絡應用與服務 186
10.1 服務的基本概念 186
10.2 網絡服務器 188
10.3 SSH 189
10.3.1 SSHD服務器 190
10.3.2 SSH客戶端 191
10.4 守護進程inetd和xinetd 193
10.5 診斷工具 193
10.5.1 lsof194
10.5.2 tcpdump 195
10.5.3 netcat 196
10.5.4 掃描端口 197
10.6 遠程程序調用 198
10.7 網絡安全 198
10.7.1 典型漏洞 199
10.7.2 安全資源 199
10.8 前瞻 200
10.9 套接字:進程與網絡的通信方式 200
10.10 Unix域套接字 201
10.10.1 對開發者的好處.201
10.10.2 列齣Unix域套接字 202
第11章 shell腳本 203
11.1 shell腳本基礎 203
11.2 引號與字麵量 204
11.2.1 字麵量 205
11.2.2 單引號 205
11.2.3 雙引號 205
11.2.4 單引號的字麵義 206
11.3 特殊變量 206
11.3.1 單個參數:$1,$2,…… 207
11.3.2 參數的數量:$# 207
11.3.3 所有參數:$@ 207
11.3.4 腳本名:$0 208
11.3.5 進程號:$$ 208
11.3.6 退齣碼:$? 208
11.4 退齣碼 208
11.5 條件判斷 209
11.5.1 防範空參數 209
11.5.2 使用其他命令來測試 210
11.5.3 elif 210
11.5.4 邏輯結構&&和|| 210
11.5.5 測試條件 211
11.5.6 用case進行字符串匹配 213
11.6 循環 214
11.6.1 for循環 214
11.6.2 while循環 214
11.7 命令替換 215
11.8 管理臨時文件 216
11.9 here文檔 216
11.10 重要的shell腳本工具 217
11.10.1 basename 217
11.10.2 awk 218
11.10.3 sed 218
11.10.4 xargs 219
11.10.5 expr 219
11.10.6 exec 219
11.11 子shell 220
11.12 在腳本中包含其他文件 220
11.13 讀取用戶輸入 221
11.14 什麼時候(不)應該使用shell腳本 221
第12章 在網絡上傳輸文件 222
12.1 快速復製 222
12.2 rsync 222
12.2.1 rsync基礎 223
12.2.2 準確復製目錄結構 224
12.2.3 以斜杠結尾 224
12.2.4 排除文件與目錄 226
12.2.5 閤並、檢查及冗長模式 226
12.2.6 壓縮 227
12.2.7 限製帶寬 227
12.2.8 傳文件到你的計算機 227
12.2.9 更多有關rsync的話題 227
12.3 文件共享 228
12.4 用Samba分享文件 228
12.4.1 配置服務器 228
12.4.2 服務器訪問控製 229
12.4.3 密碼 229
12.4.4 啓動服務器 231
12.4.5 診斷和日誌文件 231
12.4.6 配置文件共享 231
12.4.7 home目錄 232
12.4.8 共享打印機 232
12.4.9 使用Samba客戶端 232
12.4.10 作為客戶去訪問文件 233
12.5 NFS 客戶端 234
12.6 有關網絡文件服務的選擇與局限的更多內容 234
第13章 用戶環境 235
13.1 創建啓動文件的規則 235
13.2 何時需要修改啓動文件 236
13.3 shell啓動文件的元素 236
13.3.1 命令路徑 236
13.3.2 幫助手冊的路徑 237
13.3.3 提示符 237
13.3.4 彆名 238
13.3.5 權限掩碼 238
13.4 啓動文件的順序及例子 238
13.4.1 bash shell 239
13.4.2 tcsh shell 241
13.5 用戶默認設置 241
13.5.1 shell默認設置 242
13.5.2 編輯器 242
13.5.3 翻頁器 242
13.6 啓動文件的一些陷阱 242
13.7 前瞻 243
第14章 Linux 桌麵概覽 244
14.1 桌麵組件 244
14.1.1 窗口管理器 245
14.1.2 工具包 245
14.1.3 桌麵環境 245
14.1.4 應用 245
14.2 近觀X Window係統 245
14.2.1 顯示管理器 246
14.2.2 網絡透明性 246
14.3 探索X客戶端 247
14.3.1 X事件 247
14.3.2 理解X輸入以及偏好設定 248
14.4 X的未來 250
14.5 D-Bus 250
14.5.1 係統和會話實例 251
14.5.2 監視D-Bus消息 251
14.6 打印 251
14.6.1 CUPS 252
14.6.2 格式轉換與打印過濾器 252
14.7 其他有關桌麵的話題 253
第15章 開發工具 254
15.1 C 編譯器 254
15.1.1 多個源碼文件 255
15.1.2 頭(include)文件和目錄 256
15.1.3 連接庫 257
15.1.4 共享庫 258
15.2 make 261
15.2.1 一個Makefile實例 261
15.2.2 內置規則 262
15.2.3 最終的程序構建 262
15.2.4 保持更新 263
15.2.5 命令行參數與選項263
15.2.6 標準宏和變量 264
15.2.7 常規的目標 264
15.2.8 組織一個Makefile.265
15.3 調試器 266
15.4 Lex和Yacc.267
15.5 腳本語言 267
15.5.1 Python 268
15.5.2 Perl 268
15.5.3 其他腳本語言 268
15.6 Java 269
15.7 展望:編譯包 270
第16章 從C代碼編譯齣軟件.271
16.1 軟件的構建係統 271
16.2 解開C源碼包 272
16.3 GNU autoconf 273
16.3.1 一個autoconf的例子 274
16.3.2 使用打包工具來安裝 275
16.3.3 configure腳本的選項 275
16.3.4 環境變量 276
16.3.5 autoconf的目標 277
16.3.6 autoconf的日誌文件 277
16.3.7 pkg-config 277
16.4 實踐安裝 278
16.5 打補丁 279
16.6 編譯和安裝的問題排查 280
16.7 前瞻 282
第17章 在基礎上搭建 284
17.1 Web服務器與應用 284
17.2 數據庫 285
17.3 虛擬化 285
17.4 分布式計算與實時計算 286
17.5 嵌入式係統 286
17.6 結束語 287
· · · · · · (
收起)