第一部分 基礎篇
第1章 第一次親密接觸 2
1.1 讓Linux入駐我們的電腦 2
1.1.1 我們用Linux的理由 3
1.1.2 選擇哪個發行版 4
1.1.3 安裝係統 6
1.1.4 登錄係統 15
1.2 不一樣的圖形操作 15
1.2.1 沒有圖形的圖形 15
1.2.2 架構設計 17
1.3 主流桌麵環境 18
1.3.1 KDE初學者的首選 18
1.3.2 GNOME不可磨滅的經典 20
1.3.3 XFCE——輕量、簡單、高效 21
1.3.4 LXDE——更輕,同樣精悍 21
1.4 返璞歸真的命令行 22
1.4.1 開始執行命令 22
1.4.2 文本和圖形的切換 23
1.4.3 基礎命令的操作 23
1.4.4 快捷鍵 26
1.4.5 錯誤信息 28
1.4.6 聯機幫助——man很靠譜 30
1.4.7 緻命的Linux命令 31
1.5 結束語 32
第2章 融於心而錶於行 33
2.1 多用戶多任務分時操作係統 33
2.2 用戶的身份 35
2.2.1 澡堂子模型 35
2.2.2 理解用戶角色 36
2.2.3 /etc/passwd文件查看用戶 37
2.2.4 /etc/group文件查看組 38
2.2.5 管理用戶和組 39
2.2.6 奪麵雙雄——利用sudo假藉身份 41
2.2.7 我是誰? 44
2.3 文件和它與權限的關係 45
2.3.1 目錄與文件 46
2.3.2 文件屬性和權限 47
2.3.3 文件連接到底是什麼 49
2.3.4 修改文件的屬性和權限 51
2.3.5 深入文件權限 52
2.3.6 文件的基本操作 54
2.3.7 搜索文件 55
2.3.8 對文件打包壓縮 57
2.4 程序的執行問題 58
2.4.1 執行程序的方法,以及多任務協調機製 58
2.4.2 計劃任務 62
2.4.3 守護進程及其作用 64
2.4.4 全麵瞭解程序信息 66
2.5 軟件的安裝方式 71
2.5.1 從源代碼安裝軟件 71
2.5.2 利用軟件管理工具rpm和dpkg 72
2.5.3 更酷的綫上升級 73
2.6 磁盤的管理方式 76
2.6.1 Linux的文件係統——甩Windows幾條街 76
2.6.2 磁盤的基本操作 78
2.6.3 /etc/fstab文件——決定分區的連接 83
2.6.4 彈性調整容量——邏輯捲 85
2.7 解決上網問題 90
2.7.1 瞭解IP地址 90
2.7.2 相關配置文件 91
2.7.3 安裝網卡 92
2.7.4 手工設定IP地址 92
2.7.5 自動獲取IP地址 93
2.7.6 固定IP上網方式 93
2.7.7 ADSL撥號上網方式 94
2.8 不能割捨的shell 96
2.8.1 勤勤懇懇的bash 96
2.8.2 環境變量 98
2.8.3 bash的配置文件 98
2.9 文本處理 101
2.9.1 查看文本內容 101
2.9.2 正則錶達式 101
2.9.3 搜索文本的grep 104
2.9.4 排序和去重 105
2.9.5 文件對比命令——diff 105
2.10 結束語 107
第3章 一棵“樹”的奧秘 108
3.1 Linux的文件組織結構 109
3.2 基本組織原則 110
3.3 根文件係統 111
3.3.1 原則與特性 111
3.3.2 必備的內容 112
3.3.3 可選的內容 113
3.4 子目錄 113
3.4.1 /bin目錄——shell命令 113
3.4.2 /boot目錄——啓動過程所需內容 115
3.4.3 /dev目錄——設置文件 116
3.4.4 /etc目錄——配置文件 116
3.4.5 /home目錄——用戶專有 118
3.4.6 /lib目錄——共享庫和內核模塊 119
3.4.7 /media目錄——可移動設備 119
3.4.8 /mnt目錄——臨時掛接 120
3.4.9 /opt目錄——附加軟件包 120
3.4.10 /root目錄——root專有 120
3.4.11 /sbin目錄——必備的係統軟件 121
3.4.12 /srv目錄——服務進程所需數據 121
3.4.13 /tmp目錄——臨時文件 122
3.5 /usr目錄組織結構 122
3.5.1 /usr/bin目錄 123
3.5.2 /usr/include目錄 123
3.5.3 /usr/lib目錄 123
3.5.4 /usr/local目錄 123
3.5.5 /usr/sbin目錄 124
3.5.6 /usr/share目錄 124
3.5.7 /usr/share/man目錄 125
3.5.8 /usr/share/misc目錄 126
3.6 /var目錄組織結構 127
3.6.1 /var/account目錄 128
3.6.2 /var/cache目錄 128
3.6.3 /var/lib目錄 128
3.6.4 /var/lock目錄 128
3.6.5 /var/log目錄 129
3.6.6 /var/mail目錄 129
3.6.7 /var/opt目錄 129
3.6.8 /var/run目錄 129
3.6.9 /var/spool目錄 130
3.6.10 /var/tmp目錄 130
3.7 結束語 130
第4章 “笨”齣來的文化和哲學 131
4.1 Unix的文化和哲學 133
4.2 “四大笨”之一:萬般皆文本 134
4.2.1 二進製的煩惱 135
4.2.2 文本的快樂 135
4.2.3 文本之於配置文件 136
4.2.4 文本之於程序組閤 137
4.2.5 文本之於通信協議 138
4.2.6 硬件也文本 138
4.3 “四大笨”之二:四處用腳本 139
4.3.1 富饒的腳本語言 139
4.3.2 為什麼不是C 140
4.3.3 腳本的不足和混閤編程 141
4.3.4 強力膠水 141
4.3.5 極端的例子 143
4.3.6 軟件的適度規模 143
4.4 “四大笨”之三:規律無處尋 144
4.4.1 機製與策略 145
4.4.2 接口與引擎 145
4.4.3 不用重新造輪子 146
4.4.4 內在的支持 146
4.4.5 沉默是金,吝嗇是銀 147
4.5 “四大笨”之四:配置亂生根 148
4.5.1 什麼是不可配的 148
4.5.2 配置三元素 149
4.5.3 配置文件 150
4.5.4 環境變量 151
4.5.5 命令行選項 152
4.6 什麼樣的文化 154
4.6.1 “傻x”的精明 154
4.6.2 “簡單”不簡單 155
4.7 這一切的基礎大師的闡釋 156
第5章 shell腳本編程 159
5.1 第一個shell腳本程序 159
5.2 編程的基本要素 160
5.2.1 變量 162
5.2.2 運算 164
5.2.3 流程控製 165
5.2.4 自定義函數 169
5.3 輸入和輸齣 172
5.3.1 基本的輸齣 172
5.3.2 命令行參數 172
5.3.3 使用read讀取文本行 173
5.3.4 文件描述符 174
5.3.5 格式化輸齣 175
5.4 調試跟蹤 175
5.4.1 空變量問題 175
5.4.2 缺引號問題 176
5.4.3 隔離問題 176
5.4.4 echo普通中見“偉大” 177
5.4.5 “-x”跟蹤問題本領高 177
5.4.6 assert函數 177
5.4.7 Caller命令 178
5.4.8 trap命令 178
5.5 高級特性 180
5.5.1 波浪號“~” 180
5.5.2 通配符 180
5.5.3 元字符 181
5.5.4 轉義符 182
5.5.5 命令替換 183
5.5.6 運算優先級 183
5.5.7 文件包含 184
5.5.8 eval語句 185
5.5.9 內建命令 186
5.6 shell腳本編程實戰 187
5.6.1 守護進程的啓動腳本 187
5.6.2 讀取數據文件和平滑啓動nginx 188
第6章 微型語言 194
6.1 什麼是微型語言 194
6.2 軟件管理的RPM 196
6.2.1 構建你的第一個RPM包 197
6.2.2 工作原理——分析Spec文件 199
6.2.3 依賴關係 203
6.2.4 個軟件多個包 204
6.2.5 小結 206
6.3 製作聯機幫助文檔的Groff 206
6.3.1 Groff簡介 207
6.3.2 Groff的工作方式 208
6.3.3 如何製作一份聯機幫助文檔 213
6.3.4 導齣聯機幫助文檔 219
6.3.5 小結 220
6.4 把文本當數據庫的awk 221
6.4.1 使用方法 221
6.4.2 基本概念 222
6.4.3 注釋與空白 223
6.4.4 字符串 223
6.4.5 數值 225
6.4.6 變量 228
6.4.7 模式與行為 229
6.4.8 行為語句 231
6.4.9 小結 237
6.5 神奇的計算器dc和bc 238
6.5.1 曆史淵源——最古老的Unix語言dc 238
6.5.2 dc簡介 239
6.5.3 更為常用的bc 244
6.5.4 小結 250
6.6 不為人知的m4 250
6.6.1 m4的曆史 251
6.6.2 m4的特性 252
6.6.3 從Hello World開始 253
6.6.4 工作方式 255
6.6.5 小結 257
6.7 結束語 258
第7章 編輯器的紛爭 259
7.1 獨步青雲的vi 260
7.1.1 我為vi狂 260
7.1.2 vi的使用 261
7.1.3 vi的高級功能 264
7.1.4 跟我一起打造一個IDE 266
7.2 橫刀立馬的Emacs 274
7.2.1 Emacs的來曆 274
7.2.2 Emacs的基本使用 275
7.2.3 使用Emacs必知必會 278
7.2.4 Lisp語言 279
7.2.5 處理中文問題 283
7.2.6 跟我一起打造一個IDE 283
7.3 結束語 285
第8章 我是Makefile 286
8.1 GNU make及其基本用法 288
8.2 基本概念 289
8.2.1 第一個Makefile例子 290
8.2.2 目標、條件和命令 291
8.2.3 依賴 292
8.2.4 工作方式 292
8.2.5 基本語法 293
8.3 認識規則 294
8.3.1 標準規則 294
8.3.2 隱式規則 294
8.3.3 變量 295
8.3.4 自動變量 297
8.3.5 模式規則 299
8.3.6 假目標 300
8.3.7 路徑搜索 302
8.4 高級特性 303
8.4.1 文件包含 303
8.4.2 命令 305
8.4.3 深入變量 307
8.4.4 宏與函數 310
8.4.5 條件指令 311
8.5 Makefile實戰 312
8.5.1 自動産生依賴 312
8.5.2 遞歸式的Makefile 315
8.5.3 自動産生Makefile 317
8.6 結束語 323
第二部分 進階篇
第9章 特種文件係統 326
9.1 日誌和ReiserFS 326
9.1.1 理解日誌 327
9.1.2 ReiserFS——卓越的小文件性能與渺茫的未來 328
9.1.3 應用實戰 331
9.1.4 小結 331
9.2 進程文件係統procfs 331
9.2.1 神秘的9號計劃 332
9.2.2 /proc目錄 333
9.2.3 procfs實戰 335
9.2.4 小結 339
9.3 tmpfs——滿足你對“時空”的雙重渴望 339
9.3.1 背景 340
9.3.2 tmpfs文件係統 341
9.3.3 tmpfs實戰 341
9.4 devfs和sysfs 345
9.4.1 devfs的由來 345
9.4.2 進入devfs 346
9.4.3 sysfs的由來 347
9.4.4 小結 348
9.5 其他特種文件係統 348
9.5.1 RelayFS 348
9.5.2 debugfs 349
9.6 結束語 349
第10章 生死與共的“兄弟” 351
10.1 死心眼兒的BIOS 352
10.2 小肚雞腸的MBR(主引導記錄) 353
10.2.1 MBR的結構 353
10.2.2 磁盤分區錶 353
10.2.3 MBR的功能 355
10.3 和事佬GRUB(牛B的統一引導加載器) 355
10.3.1 Bootloader 355
10.3.2 GRUB的功能 356
10.3.3 GRUB的工作流程 357
10.4 唇齒相依的內核啓動參數 358
10.4.1 什麼是內核啓動參數 358
10.4.2 內核啓動參數的格式 359
10.4.3 常用的內核啓動參數 359
10.5 自力更生的Linux內核 360
10.5.1 內核引導協議 360
10.5.2 內核為什麼要壓縮 360
10.5.3 startup_32 361
10.5.4 start_kernel 362
10.5.5 kernel_init 362
10.6 及時雨initramfs 363
10.6.1 尋找init的問題 363
10.6.2 較早的initrd 363
10.6.3 為什麼選擇initramfs 364
10.7 “生”、“死”永相伴的init進程 364
10.7.1 名不副實 364
10.7.2 運行級彆 365
10.7.3 進入運行級彆之前 368
10.7.4 進入運行級彆 369
10.7.5 轉換運行級彆 371
10.8 幕後英雄們 371
10.8.1 終端 372
10.8.2 getty係列命令 372
10.8.3 Display Manager 373
10.8.4 僞終端 374
10.8.5 配置文件 374
10.9 結束語 375
第11章 獨霸網絡的“蜘蛛神功” 376
11.1 功夫理論:網絡知識 376
11.2 “蜘蛛神功”第一層:網絡工具 378
11.2.1 馬步:ifconfig 378
11.2.2 掌法:route 380
11.2.3 腿功:netstat 381
11.2.4 眼力:DNS二把刀 383
11.2.5 身法:tcpdump 385
11.3 “蜘蛛神功”第二層:套接字 387
11.4 內功心法:TCP/IP協議棧初探 388
11.4.1 枯樹盤根:係統調用 388
11.4.2 凝神靜態:sockfs文件係統 390
11.4.3 氣沉丹田:sk_buff 392
11.5 臨戰雜談 397
11.5.1 對UDP的錯誤的認識 398
11.5.2 事半功倍,調節內核參數 399
第12章 一個網絡一個世界 402
12.1 You’ve Got a Mail 402
12.1.1 Email服務模式 402
12.1.2 架設Postfix服務器 405
12.1.3 Email故事的結局 409
12.2 聯接世界的Web應用 409
12.2.1 Web服務器 410
12.2.2 數據庫 412
12.2.3 解釋型語言 413
12.2.4 架設Web服務器 414
12.3 銅牆鐵壁真功夫——Linux內核集成的IP信息包過濾係統 419
12.3.1 iptables 420
12.3.2 netfilter 423
12.3.3 實踐齣真知 426
12.3.4 小盒子的秘密 427
12.4 分享文件的樂趣 434
12.4.1 NFS 438
12.4.2 Samba 442
12.5 在虛擬與現實之間穿梭——實現安全的連接 446
12.5.1 VPN實現方式 447
12.5.2 IPSec VPN 448
12.5.3 SSL VPN 452
第13章 打通任督二脈 455
13.1 瞭解網絡驅動 455
13.1.1 網絡設備閑談 455
13.1.2 ioctl這把刷子 456
13.1.3 設備驅動的秘密 459
13.2 無綫風光在險峰 461
13.2.1 WLAN 461
13.2.2 Bluetooth 466
13.2.3 NFC——近距無綫通信 469
13.2.4 謎底 474
13.3 奇跡是執著創造齣來的 474
13.3.1 從2.4到2.6 474
13.3.2 從2.6到3.0 477
第14章 身在江湖 479
14.1 C2級安全認證 479
14.2 Linux的安全問題 480
14.2.1 黑客入侵 480
14.2.2 “病毒泛濫” 482
14.2.3 拒絕服務攻擊 483
14.2.4 小結 484
14.3 PAM用戶認證機製 485
14.3.1 什麼是PAM(可拔插認證模塊) 485
14.3.2 PAM的體係結構 485
14.3.3 配置PAM 487
14.3.4 密碼映射 494
14.4 應用PAM API 495
14.4.1 開發概述 495
14.4.2 PAM事務 496
14.4.3 事務屬性 498
14.4.4 用戶認證 499
14.4.5 認證憑證 500
14.4.6 PAM會話 501
14.4.7 用戶認證流程 502
14.4.8 模塊開發 507
14.4.9 密碼的保存 508
14.5 安全增強係統 509
14.5.1 主動訪問控製DAC 509
14.5.2 強製訪問控製MAC 510
14.5.3 SELinux——Linux的MAC實現 511
14.6 結束語 515
第15章 七種武器 516
15.1 長生劍:fork 516
15.1.1 從綫程說起 516
15.1.2 古老而充滿活力的進程 520
15.1.3 多進程程序開發 523
15.1.4 進程間通信的實現 531
15.2 離彆鈎:VFS 537
15.2.1 一切都是文件 538
15.2.2 一棵有生命的“樹” 538
15.2.3 VFS簡介 539
15.2.4 基本數據結構 540
15.2.5 sockfs 541
15.3 孔雀翎:mmap(內存映射) 543
15.3.1 理解mmap 543
15.3.2 虛擬內存技術 544
15.3.3 應用mmap 548
15.4 碧玉刀:epoll(增強I/O復用) 553
15.4.1 C10K問題 553
15.4.2 epoll的優點 554
15.4.3 epoll的工作模式 555
15.4.4 正確使用epoll 556
15.4.5 用epoll解決C100K問題 561
15.5 多情環:udev 564
15.5.1 設計理念 564
15.5.2 基本構成 565
15.5.3 配置文件 566
15.5.4 規則 566
15.6 霸王槍:LVS 567
15.6.1 負載均衡 567
15.6.2 一個中國人的勇氣 569
15.6.3 LVS的特點 570
15.6.4 LVS的工作模式 571
15.6.5 LVS的負載均衡調度算法 576
15.7 拳頭:module 578
15.7.1 內核中的Web服務 578
15.7.2 編寫你的第一個module 579
15.7.3 module與普通程序的不同 582
15.7.4 module與用戶通信 584
15.7.5 內核加載module的原理 590
15.8 結束語 592
第16章 誰都可以從頭再來——從頭開始編譯一套Linux係統 593
16.1 初識工具鏈——準備環境的必備工具 594
16.1.1 編譯器 594
16.1.2 連接器 594
16.1.3 程序庫 595
16.1.4 工具鏈——破解奇特的四角戀 595
16.2 準備環境 596
16.2.1 宿主係統環境 597
16.2.2 生成工具鏈的binutils 598
16.2.3 生成工具鏈的gcc 599
16.2.4 生成工具鏈的glibc 600
16.2.5 解決工具鏈的一些問題 603
16.2.6 第二次生成工具鏈的binutils 604
16.2.7 第二次生成工具鏈的gcc 605
16.2.8 豐富工具鏈的功能 608
16.2.9 整理工具鏈 610
16.2.10 小結 610
16.3 生成目標係統的運行環境 611
16.3.1 準備工作 611
16.3.2 安裝glibc 614
16.3.3 調整工具鏈 617
16.3.4 安裝binutils 617
16.3.5 安裝gcc 618
16.3.6 安裝其他基礎設施 620
16.3.7 係統啓動腳本 622
16.3.8 結束語 623
16.4 定製Linux內核 623
16.4.1 內核的make參數 624
16.4.2 定製界麵 625
16.4.3 編譯與安裝 626
16.5 獨立運行 627
16.5.1 /etc/fstab文件 627
16.5.2 使用GRUB配置啓動過程 627
16.6 結束語 628
第三部分 擴展篇
第17章 窈窕淑女君子好逑 630
17.1 女人心事難捉摸——Linux圖形環境 630
17.1.1 X Window 630
17.1.2 桌麵係統 638
17.1.3 XOrg 639
17.2 雲想衣裳花想容——Qt與GTK 644
17.2.1 發展曆史 644
17.2.2 GTK與Qt的比較 646
17.2.3 大傢閨秀Qt 648
17.2.4 小鳥依人GTK 657
第18章 這裏也是鼓樂笙簫 667
18.1 與多媒體的第一次握手 667
18.1.1 聽聲 668
18.1.2 看影 669
18.1.3 多媒體工作室 674
18.2 鼓——ffmpeg 676
18.2.1 羞辱柱與軟件許可 676
18.2.2 多媒體的來龍去脈 678
18.2.3 傢庭成員 684
18.3 樂——MPlayer與VLC 685
18.3.1 綠色的MPlayer 685
18.3.2 浪漫的VLC 687
18.4 笙——FrameBuffer 690
18.4.1 原理 691
18.4.2 設置FrameBuffer 691
18.4.3 文字倒置滾動 692
18.5 簫——V4L2與ALSA 697
18.5.1 V4L2 698
18.5.2 ALSA 703
18.6 結束語 707
第19章 團結就是力量 708
19.1 標準的前世今生 708
19.1.1 一場拆分引發的標準 708
19.1.2 站在POSIX肩膀上的LSB 709
19.1.3 工作組 711
19.1.4 標準化流程 712
19.2 認證 713
19.3 工具 714
19.3.1 LSB SDK 715
19.3.2 App Checker 716
19.3.3 Distribution Checker 718
19.3.4 LSB Navigator 720
19.3.5 lsb_release的規範定義和實現 720
19.4 LSB的前世今生 721
19.4.1 吃一塹,長一智 722
19.4.2 “哥隻是個傳說” 723
19.4.3 意氣風發的LSB5.0 724
19.5 結束語 724
附錄 我的Linux,我做主 725
· · · · · · (
收起)