産品特色
編輯推薦
Linux/GNU是一款非凡的操作係統,擁有穩定可靠且極其強大的開發環境。作為與操作係統進行溝通的原生界麵,shell能夠控製整個操作係統的運作,是與Linux進行交互靈活的手段。
本書嚮讀者展現瞭如何有效地利用shell完成復雜的任務。作者從shell的基礎知識開始,介紹簡單命令的用法、對各類文件進行操作,隨後講解文本處理、Web交互、備份、監視以及其他係統管理任務,涵蓋初中高三級主題,傳授腳本老手經常使用的諸多技巧。書中所有示例均基於具體任務,透徹清晰,通俗易懂。
第3版進行瞭全麵修訂,囊括Linux新發行版新特性,增加瞭倉儲管理、網絡分組、動態調用、係統調優、容器、雲等100餘頁篇幅的新內容,* 具實用價值,讓看似復雜的Linux shell腳本任務迎刃而解。
·通過腳本與Web站點交互
·編寫腳本,挖掘並處理Web數據
·使用crontab實現係統備份及其他重復性任務的自動化
·創建、壓縮、加密重要數據
·配置並監視以太網和無綫網絡
·監視並記錄網絡和係統的活動日誌
·係統調優,實現性能優化,提高係統安全性
·鑒彆資源占用大戶以及網絡瓶頸
·使用git或fossil實現版本控製,處理自由開源軟件項目
·創建並維護Linux容器和虛擬機
內容簡介
本書結閤豐富的實際案例介紹瞭如何利用shell命令實現與Linux操作係統的高效溝通,具體內容包括:各類日常任務以及如何利用shell命令更快速地解決問題;編寫腳本從Web中挖掘數據並進行處理;在腳本中與簡單的Web API進行交互;任務的執行及自動化;創建及維護文件和文件夾歸檔,利用shell進行壓縮和加密。第3版講解瞭* 新的Linux發行版中加入的令人激動的新特性,幫助你完成從未想到過的功能。
本書適閤Linux係統管理員和程序員閱讀,是編寫shell腳本的參考資料。
作者簡介
Clif Flynt,Tcl/Tk及Linux用戶社區活躍分子,經常在技術會議和用戶小組中發錶演說。Noumena公司創始人,負責開發定製軟件和舉辦培訓課程。另著有Tcl/Tk:A Developer's Guide一書。
Sarath Lakshman,Linux天纔程序員、開源軟件及GNU/Linux活躍分子。SLYNUX(2005)的開 發 者而,Linux For You專欄作傢。在Fedora、Pardus Linux、PiTiVi、Ubuntu 以及Google編程夏令營等項目中均做齣瞭不可估量的貢獻。
Shantanu Tushar,GNU/Linux用戶,KDE社區重要貢獻者,維護著Calligra Active(用於Tablets的KDE辦公文檔查看器)、Plasma Media Center以及Gluon Player。Shantanu堅信終有一 天編程會變得無比輕鬆,每個人都會熱衷於為計算機編寫程序。
【譯者簡介】
門佳, GNU/Linux深度用戶,喜歡溯本求源,挖掘技術背後的來龍去脈,對程序語言設計理論、編譯技術、操作係統設計與實現、Web開發等領域均有涉獵,譯著包括《TCP Sockets編程》《精通JavaScript(* 2版)》《Linux命令行與shell腳本編程大全(第3版)》以及本書前兩版等。
目錄
第1章 小試牛刀 1
1.1 簡介 1
1.2 在終端中顯示輸齣 2
1.2.1 預備知識 2
1.2.2 實戰演練 4
1.2.3 工作原理 6
1.2.4 補充內容 6
1.3 使用變量與環境變量 7
1.3.1 預備知識 7
1.3.2 實戰演練 8
1.3.3 補充內容 9
1.4 使用函數添加環境變量 11
1.4.1 實戰演練 11
1.4.2 工作原理 12
1.5 使用shell進行數學運算 12
1.6 玩轉文件描述符與重定嚮 14
1.6.1 預備知識 14
1.6.2 實戰演練 15
1.6.3 工作原理 17
1.6.4 補充內容 17
1.7 數組與關聯數組 19
1.7.1 預備知識 19
1.7.2 實戰演練 20
1.7.3 補充內容 20
1.8 彆名 21
1.8.1 實戰演練 21
1.8.2 補充內容 22
1.9 采集終端信息 23
1.9.1 預備知識 23
1.9.2 實戰演練 23
1.10 獲取並設置日期及延時 24
1.10.1 預備知識 24
1.10.2 實戰演練 25
1.10.3 工作原理 26
1.10.4 補充內容 27
1.11 調試腳本 27
1.11.1 實戰演練 28
1.11.2 工作原理 29
1.11.3 補充內容 29
1.12 函數和參數 29
1.12.1 實戰演練 30
1.12.2 補充內容 31
1.13 將一個命令的輸齣發送給另一個命令 33
1.13.1 預備知識 33
1.13.2 實戰演練 34
1.13.3 補充內容 34
1.14 在不按下迴車鍵的情況下讀入n個字符 35
1.15 持續運行命令直* 執行成功 36
1.15.1 實戰演練 36
1.15.2 工作原理 37
1.15.3 補充內容 37
1.16 字段分隔符與迭代器 37
1.16.1 預備知識 38
1.16.2 實戰演練 38
1.17 比較與測試 40
1.18 使用配置文件定製bash 43
* 2 章 命令之樂 46
2.1 簡介 46
2.2 用cat進行拼接 46
2.2.1 實戰演練 46
2.2.2 補充內容 47
2.3 錄製並迴放終端會話 49
2.3.1 預備知識 49
2.3.2 實戰演練 49
2.3.3 工作原理 50
2.4 查找並列齣文件 50
2.4.1 預備知識 50
2.4.2 實戰演練 50
2.4.3 補充內容 51
2.5 玩轉xargs 58
2.5.1 預備知識 59
2.5.2 實戰演練 59
2.5.3 工作原理 60
2.5.4 補充內容 60
2.6 用tr進行轉換 63
2.6.1 預備知識 63
2.6.2 實戰演練 64
2.6.3 工作原理 64
2.6.4 補充內容 65
2.7 校驗和與核實 67
2.7.1 預備知識 68
2.7.2 實戰演練 68
2.7.3 工作原理 68
2.7.4 補充內容 69
2.8 加密工具與散列 71
2.9 行排序 72
2.9.1 預備知識 72
2.9.2 實戰演練 72
2.9.3 工作原理 73
2.9.4 補充內容 73
2.10 臨時文件命名與隨機數 76
2.10.1 實戰演練 77
2.10.2 工作原理 77
2.11 分割文件與數據 77
2.11.1 工作原理 78
2.11.2 補充內容 78
2.12 根據擴展名切分文件名 80
2.12.1 實戰演練 80
2.12.2 工作原理 80
2.13 多個文件的重命名與移動 82
2.13.1 預備知識 82
2.13.2 實戰演練 82
2.13.3 工作原理 83
2.14 拼寫檢查與詞典操作 84
2.14.1 實戰演練 84
2.14.2 工作原理 84
2.15 交互輸入自動化 85
2.15.1 預備知識 86
2.15.2 實戰演練 86
2.15.3 工作原理 86
2.15.4 補充內容 87
2.16 利用並行進程加速命令執行 88
2.16.1 實戰演練 88
2.16.2 工作原理 89
2.16.3 補充內容 89
2.17 檢查目錄以及其中的文件與子目錄 89
2.17.1 預備知識 90
2.17.2 實戰演練 90
第3 章 以文件之名 92
3.1 簡介 92
3.2 生成任意大小的文件 92
3.3 文本文件的交集與差集 94
3.3.1 預備知識 94
3.3.2 實戰演練 94
3.3.3 工作原理 96
3.4 查找並刪除重復文件 97
3.4.1 預備知識 97
3.4.2 實戰演練 97
3.4.3 工作原理 98
3.5 文件權限、所有權與粘滯位 99
3.5.1 實戰演練 101
3.5.2 補充內容 102
3.6 將文件設置為不可修改 104
3.6.1 預備知識 104
3.6.2 實戰演練 104
3.7 批量生成空白文件 105
3.7.1 預備知識 105
3.7.2 實戰演練 105
3.8 查找符號鏈接及其指嚮目標 106
3.8.1 實戰演練 106
3.8.2 工作原理 107
3.9 枚舉文件類型統計信息 107
3.9.1 預備知識 107
3.9.2 實戰演練 107
3.9.3 工作原理 108
3.10 使用環迴文件 109
3.10.1 實戰演練 110
3.10.2 工作原理 111
3.10.3 補充內容 111
3.11 生成ISO及混閤型ISO文件 113
3.11.1 預備知識 113
3.11.2 實戰演練 113
3.11.3 補充內容 114
3.12 查找並修補文件差異 115
3.12.1 實戰演練 115
3.12.2 補充內容 117
3.13 使用head與tail打印文件的前10行和後10行 117
3.14 隻列齣目錄的各種方法 120
3.14.1 預備知識 120
3.14.2 實戰演練 120
3.14.3 工作原理 120
3.15 在命令行中使用pushd和popd實現快速定位 121
3.15.1 預備知識 121
3.15.2 實戰演練 121
3.15.3 補充內容 122
3.16 統計文件的行數、單詞數和字符數 122
3.17 打印目錄樹 123
3.17.1 預備知識 123
3.17.2 實戰演練 123
3.17.3 補充內容 124
3.18 處理視頻與圖像文件 125
3.18.1 預備知識 125
3.18.2 實戰演練 126
第4 章 讓文本飛 128
4.1 簡介 128
4.2 使用正則錶達式 128
4.2.1 實戰演練 129
4.2.2 工作原理 131
4.2.3 補充內容 131
4.3 使用grep在文件中搜索文本 132
4.3.1 實戰演練 132
4.3.2 補充內容 134
4.4 使用cut按列切分文件 138
4.4.1 實戰演練 138
4.4.2 補充內容 139
4.5 使用sed替換文本 140
4.5.1 實戰演練 140
4.5.2 補充內容 141
4.6 使用awk進行高 級文本處理 144
4.6.1 預備知識 144
4.6.2 實戰演練 144
4.6.3 工作原理 144
4.6.4 補充內容 146
4.7 統計特定文件中的詞頻 149
4.7.1 預備知識 149
4.7.2 實戰演練 150
4.7.3 工作原理 150
4.7.4 參考 151
4.8 壓縮或解壓縮JavaScript 151
4.8.1 預備知識 151
4.8.2 實戰演練 152
4.8.3 工作原理 152
4.8.4 參考 153
4.9 按列閤並多個文件 153
4.9.1 實戰演練 154
4.9.2 參考 154
4.10 打印文件或行中的第n個單詞或列 154
4.10.1 實戰演練 154
4.10.2 參考 155
4.11 打印指 定行或模式之間的文本 155
4.11.1 預備知識 155
4.11.2 實戰演練 155
4.11.3 參考 156
4.12 以逆序形式打印行 156
4.12.1 預備知識 156
4.12.2 實戰演練 156
4.12.3 工作原理 157
4.13 解析文本中的電子郵件地址和URL 157
4.13.1 實戰演練 157
4.13.2 工作原理 158
4.13.3 參考 158
4.14 刪除文件中包含特定單詞的句子 158
4.14.1 預備知識 158
4.14.2 實戰演練 159
4.14.3 工作原理 159
4.14.4 參考 159
4.15 對目錄中的所有文件進行文本替換 159
4.15.1 實戰演練 160
4.15.2 工作原理 160
4.15.3 補充內容 160
4.16 文本切片與參數操作 160
4.16.1 實戰演練 160
4.16.2 參考 161
第5 章 一團亂麻?沒這迴事! 162
5.1 簡介 162
5.2 Web 頁麵下載 162
5.2.1 預備知識 162
5.2.2 實戰演練 163
5.2.3 工作原理 163
5.2.4 補充內容 164
5.3 以純文本形式下載頁麵 165
5.3.1 預備知識 165
5.3.2 實戰演練 165
5.4 cURL入門 166
5.4.1 預備知識 166
5.4.2 實戰演練 166
5.4.3 工作原理 167
5.4.4 補充內容 167
5.4.5 參考 169
5.5 從命令行訪問未讀的Gmail郵件 170
5.5.1 實戰演練 170
5.5.2 工作原理 170
5.5.3 參考 171
5.6 解析網站數據 171
5.6.1 實戰演練 171
5.6.2 工作原理 172
5.6.3 參考 172
5.7 圖片爬取器及下載工具 172
5.7.1 實戰演練 172
5.7.2 工作原理 173
5.7.3 參考 174
5.8 網頁相冊生成器 174
5.8.1 預備知識 175
5.8.2 實戰演練 175
5.8.3 工作原理 176
5.8.4 參考 176
5.9 Twitter命令行客戶端 176
5.9.1 預備知識 177
5.9.2 實戰演練 177
5.9.3 工作原理 178
5.9.4 參考 179
5.10 通過Web服務器查詢單詞含義 179
5.10.1 預備知識 179
5.10.2 實戰演練 180
5.10.3 工作原理 180
5.10.4 參考 180
5.11 查找網站中的無效鏈接 181
5.11.1 預備知識 181
5.11.2 實戰演練 181
5.11.3 工作原理 182
5.11.4 參考 182
5.12 跟蹤網站變動 182
5.12.1 預備知識 182
5.12.2 實戰演練 182
5.12.3 工作原理 184
5.12.4 參考 184
5.13 發送Web頁麵並讀取響應 184
5.13.1 預備知識 184
5.13.2 實戰演練 185
5.13.3 參考 186
5.14 從Internet下載視頻 186
5.14.1 預備知識 186
5.14.2 實戰演練 186
5.14.3 工作原理 186
5.15 使用OTS匯總文本 187
5.15.1 預備知識 187
5.15.2 實戰演練 187
5.15.3 工作原理 187
5.16 在命令行中翻譯文本 187
5.16.1 預備知識 188
5.16.2 實戰演練 188
5.16.3 工作原理 188
第6 章 倉儲管理 189
6.1 簡介 189
6.2 創建新的git倉庫 190
6.2.1 預備知識 190
6.2.2 實戰演練 190
6.2.3 工作原理 190
6.3 剋隆遠程git倉庫 191
6.4 使用git添加與提交變更 191
6.5 使用git創建與閤並分支 192
6.5.1 預備知識 193
6.5.2 實戰演練 193
6.5.3 工作原理 193
6.5.4 補充內容 193
6.6 分享工作成果 194
6.7 推送分支 196
6.8 檢查git倉庫狀態 197
6.8.1 實戰演練 197
6.8.2 工作原理 198
6.9 查看git曆史記錄 198
6.10 查找bug 198
6.10.1 實戰演練 199
6.10.2 補充內容 199
6.11 快照標簽 200
6.12 提交信息規範 201
6.13 使用fossil 202
6.13.1 預備知識 202
6.13.2 實戰演練 202
6.14 創建新的fossil倉庫 202
6.14.1 實戰演練 203
6.14.2 工作原理 203
6.14.3 補充內容 203
6.15 剋隆遠程fossil倉庫 204
6.15.1 實戰演練 204
6.15.2 工作原理 204
6.16 打開fossil項目 204
6.16.1 實戰演練 204
6.16.2 工作原理 205
6.16.3 補充內容 205
6.17 使用fossil添加與提交變更 205
6.17.1 實戰演練 205
6.17.2 補充內容 206
6.18 使用fossil分支與fork 206
6.18.1 實戰演練 207
6.18.2 工作原理 207
6.18.3 補充內容 208
6.19 使用fossil分享工作成果 208
6.19.1 實戰演練 208
6.19.2 工作原理 209
6.20 更新本地fossil倉庫 209
6.21 檢查fossil倉庫狀態 209
6.22 查看fossil曆史記錄 210
第7 章 B 計劃 215
7.1 簡介 215
7.2 使用tar歸檔 215
7.2.1 預備知識 215
7.2.2 實戰演練 216
7.2.3 工作原理 216
7.2.4 補充內容 216
7.2.5 參考 220
7.3 使用cpio歸檔 221
7.3.1 實戰演練 221
7.3.2 工作原理 221
7.4 使用gzip壓縮數據 222
7.4.1 實戰演練 222
7.4.2 補充內容 223
7.4.3 參考 225
7.5 使用zip歸檔及壓縮 225
7.5.1 實戰演練 225
7.5.2 工作原理 226
7.6 更快的歸檔工具pbzip2 226
7.6.1 預備知識 226
7.6.2 實戰演練 226
7.6.3 工作原理 227
7.6.4 補充內容 227
7.7 創建壓縮文件係統 228
7.7.1 預備知識 228
7.7.2 實戰演練 228
7.7.3 補充內容 229
7.8 使用rsync備份係統快照 229
7.8.1 實戰演練 229
7.8.2 工作原理 230
7.8.3 補充內容 231
7.9 差異化歸檔 232
7.9.1 實戰演練 232
7.9.2 工作原理 232
7.10 使用fsarchiver創建全盤鏡像 233
7.10.1 預備知識 233
7.10.2 實戰演練 233
7.10.3 工作原理 234
第8 章 無網不利 235
8.1 簡介 235
8.2 網絡設置 236
8.2.1 預備知識 236
8.2.2 實戰演練 236
8.2.3 補充內容 237
8.2.4 參考 241
8.3 ping! 241
8.3.1 實戰演練 241
8.3.2 補充內容 242
8.4 跟蹤IP路由 244
8.5 列齣網絡中所有的活動主機 245
8.5.1 預備知識 245
8.5.2 實戰演練 245
8.5.3 工作原理 245
8.5.4 補充內容 246
8.5.5 參考 247
8.6 使用SSH在遠程主機上執行命令 247
8.6.1 預備知識 247
8.6.2 實戰演練 248
8.6.3 補充內容 249
8.7 在遠程主機上執行圖形化命令 250
8.7.1 實戰演練 250
8.7.2 參考 251
8.8 通過網絡傳輸文件 251
8.8.1 預備知識 251
8.8.2 實戰演練 251
8.8.3 補充內容 252
8.8.4 參考 254
8.9 連接無綫網絡 254
8.9.1 預備知識 254
8.9.2 實戰演練 254
8.9.3 工作原理 255
8.9.4 參考 256
8.10 實現SSH的無密碼自動登錄 256
8.10.1 預備知識 256
8.10.2 實戰演練 256
8.11 使用SSH實現端口轉發 257
8.11.1 實戰演練 257
8.11.2 補充內容 258
8.12 在本地掛載點上掛載遠程驅動器 259
8.12.1 預備知識 259
8.12.2 實戰演練 259
8.12.3 參考 259
8.13 分析網絡流量與端口 259
8.13.1 預備知識 259
8.13.2 實戰演練 260
8.13.3 工作原理 260
8.13.4 補充內容 261
8.14 測量網絡帶寬 261
8.15 創建套接字 262
8.15.1 預備知識 262
8.15.2 實戰演練 262
8.15.3 補充內容 263
8.15.4 工作原理 263
8.16 搭建網橋 264
8.16.1 預備知識 264
8.16.2 實戰演練 264
8.17 Internet連接共享 265
8.17.1 預備知識 265
8.17.2 實戰演練 265
8.17.3 工作原理 266
8.18 使用iptables架設簡易防火牆 266
8.18.1 實戰演練 267
8.18.2 工作原理 267
8.18.3 補充內容 268
8.19 創建虛擬私有網絡 268
8.19.1 預備知識 268
8.19.2 實戰演練 269
第9 章 明察鞦毫 274
9.1 簡介 274
9.2 監視磁盤使用情況 274
9.2.1 預備知識 275
9.2.2 實戰演練 275
9.2.3 補充內容 275
9.3 計算命令執行時間 279
9.3.1 實戰演練 279
9.3.2 工作原理 281
9.4 收集登錄用戶、啓動日誌及啓動故障的相關信息 281
9.4.1 預備知識 282
9.4.2 實戰演練 282
9.5 列齣1小時內占用CPU* 多的10個進程 284
9.5.1 預備知識 284
9.5.2 實戰演練 284
9.5.3 工作原理 285
9.5.4 參考 286
9.6 使用watch監視命令輸齣 286
9.6.1 實戰演練 286
9.6.2 補充內容 286
9.7 記錄文件及目錄訪問情況 287
9.7.1 預備知識 287
9.7.2 實戰演練 287
9.7.3 工作原理 287
9.8 使用syslog記錄日誌 288
9.8.1 預備知識 288
9.8.2 實戰演練 289
9.8.3 參考 289
9.9 使用logrotate管理日誌文件 290
9.9.1 預備知識 290
9.9.2 實戰演練 290
9.9.3 工作原理 290
9.10 通過監視用戶登錄找齣入侵者 291
9.10.1 預備知識 291
9.10.2 實戰演練 291
9.10.3 工作原理 293
9.11 監視遠程磁盤的健康情況 293
9.11.1 預備知識 293
9.11.2 實戰演練 294
9.11.3 工作原理 295
9.11.4 參考 295
9.12 確定係統中用戶的活躍時段 295
9.12.1 預備知識 296
9.12.2 實戰演練 296
9.12.3 工作原理 297
9.13 電源使用情況的測量與優化 297
9.13.1 預備知識 298
9.13.2 實戰演練 298
9.14 監視磁盤活動 298
9.14.1 預備知識 298
9.14.2 實戰演練 299
9.15 檢查磁盤及文件係統錯誤 299
9.15.1 預備知識 299
9.15.2 實戰演練 299
9.15.3 工作原理 300
9.16 檢查磁盤健康情況 300
9.16.1 預備知識 301
9.16.2 實戰演練 301
9.16.3 工作原理 303
9.17 獲取磁盤統計數據 303
9.17.1 預備知識 303
9.17.2 實戰演練 303
9.17.3 工作原理 304
9.17.4 補充內容 304
* 10 章 管理重任 305
10.1 簡介 305
10.2 收集進程信息 305
10.2.1 預備知識 305
10.2.2 實戰演練 306
10.2.3 工作原理 307
10.2.4 補充內容 307
10.2.5 參考 312
10.3 which、whereis、whatis與file 312
10.4 殺死進程以及發送和響應信號 313
10.4.1 預備知識 313
10.4.2 實戰演練 313
10.4.3 補充內容 314
10.5 嚮用戶終端發送消息 316
10.5.1 預備知識 316
10.5.2 實戰演練 317
10.6 /proc文件係統 318
10.7 收集係統信息 319
10.8 使用cron進行調度 321
10.8.1 預備知識 321
10.8.2 實戰演練 321
10.8.3 工作原理 322
10.8.4 補充內容 323
10.9 數據庫的形式及用法 324
10.9.1 預備知識 324
10.9.2 實戰演練 325
10.9.3 補充內容 325
10.10 讀寫SQLite數據庫 326
10.10.1 預備知識 326
10.10.2 實戰演練 327
10.10.3 工作原理 327
10.10.4 補充內容 327
10.11 讀寫MySQL數據庫 328
10.11.1 預備知識 329
10.11.2 實戰演練 329
10.11.3 工作原理 332
10.12 用戶管理腳本 333
10.12.1 實戰演練 333
10.12.2 工作原理 335
10.13 圖像文件的批量縮放及格式轉換 336
10.13.1 預備知識 336
10.13.2 實戰演練 336
10.13.3 工作原理 338
10.13.4 參考 339
10.14 終端截圖 339
10.14.1 預備知識 339
10.14.2 實戰演練 340
10.15 集中管理多個終端 340
10.15.1 預備知識 340
10.15.2 實戰演練 341
* 11 章 覓跡尋蹤 342
11.1 簡介 342
11.2 使用tcpdump跟蹤分組 342
11.2.1 預備知識 342
11.2.2 實戰演練 343
11.2.3 工作原理 345
11.3 使用ngrep查找分組 346
11.3.1 預備知識 346
11.3.2 實戰演練 346
11.3.3 工作原理 347
11.3.4 補充內容 347
11.4 使用ip跟蹤網絡路由 347
11.4.1 預備知識 347
11.4.2 實戰演練 348
11.4.3 工作原理 349
11.5 使用strace跟蹤係統調用 349
11.5.1 預備知識 350
11.5.2 實戰演練 350
11.5.3 工作原理 351
11.6 使用ltrace跟蹤動態庫函數 352
11.6.1 預備知識 352
11.6.2 實戰演練 352
11.6.3 工作原理 353
11.6.4 補充內容 353
* 12 章 係統調優 355
12.1 簡介 355
12.2 識彆服務 356
12.2.1 預備知識 356
12.2.2 實戰演練 357
12.2.3 補充內容 359
12.3 使用ss收集套接字數據 360
12.3.1 預備知識 360
12.3.2 實戰演練 360
12.3.3 工作原理 361
12.4 使用dstat收集係統I/O使用情況 362
12.4.1 預備知識 362
12.4.2 實戰演練 362
12.4.3 工作原理 363
12.4.4 補充內容 363
12.5 使用pidstat找齣資源占用大戶 364
12.5.1 預備知識 364
12.5.2 實戰演練 364
12.5.3 工作原理 364
12.6 使用sysctl調優Linux內核 365
12.6.1 預備知識 365
12.6.2 實戰演練 365
12.6.3 工作原理 366
12.6.4 補充內容 366
12.7 使用配置文件調優Linux係統 366
12.7.1 預備知識 367
12.7.2 實戰演練 367
12.7.3 工作原理 367
12.8 使用nice命令更改調度器優先級 367
12.8.1 實戰演練 367
12.8.2 工作原理 368
12.8.3 補充內容 368
* 13 章 在雲端 369
13.1 簡介 369
13.2 使用Linux容器 370
13.2.1 預備知識 370
13.2.2 實戰演練 371
13.2.3 工作原理 377
13.3 使用Docker 377
13.3.1 預備知識 377
13.3.2 實戰演練 378
13.3.3 工作原理 381
13.4 在Linux中使用虛擬機 381
13.4.1 預備知識 381
13.4.2 實戰演練 382
13.5 雲端的Linux 382
13.5.1 預備知識 382
13.5.2 實戰演練 384
13.5.3 補充內容 384
《深入理解Linux係統調用:解密內核與用戶空間的橋梁》 本書簡介 在現代計算領域,操作係統扮演著至關重要的角色,而Linux作為開源操作係統的佼佼者,其核心的強大與靈活性吸引瞭無數開發者和係統愛好者的目光。然而,當我們深入探究Linux的運作機製時,一個繞不開的核心概念便是“係統調用”。它們是用戶程序與操作係統內核進行交互的唯一途徑,是應用程序獲取係統資源、執行特權操作的窗口。對於任何想要深入理解Linux係統內部原理、優化程序性能、甚至編寫底層係統軟件的開發者而言,係統調用都如同解鎖新世界的大門。 《深入理解Linux係統調用:解密內核與用戶空間的橋梁》一書,正是為瞭係統性地、深入淺齣地剖析Linux係統調用的方方麵麵而精心編撰。本書的目標讀者涵蓋瞭從資深係統程序員、操作係統內核開發者,到對Linux底層運作原理充滿好奇的初學者。我們力求通過清晰的講解、豐富的實例和實際的編程演示,讓讀者能夠真正掌握係統調用的精髓,並將其應用於實際的開發和問題排查中。 本書內容概述 本書將從零開始,逐步深入,帶領讀者踏上一段探索Linux係統調用奧秘的旅程。 第一部分:係統調用的基石 什麼是係統調用? 我們將首先闡述係統調用的基本概念,解釋它為何是用戶空間與內核空間之間不可或缺的橋梁。通過與庫函數(如libc)的對比,明確係統調用與普通函數調用的本質區彆,以及其背後所承擔的特殊使命。 用戶空間與內核空間: 深入剖析x86_64架構下CPU的特權級模型,詳細講解用戶空間和內核空間各自的職責、訪問權限以及它們之間的隔離機製。理解這種分離對於保障係統安全和穩定性至關重要。 係統調用發生的機製: 本部分將詳細講解用戶程序發起係統調用的具體過程。我們將介紹CPU的“軟中斷”(Software Interrupt)或“陷阱”(Trap)機製,例如x86_64架構下的 `syscall` 指令。讀者將瞭解到,當用戶程序執行 `syscall` 指令時,CPU如何從用戶模式切換到內核模式,並將控製權轉移給內核。 係統調用的參數傳遞與返迴值: 詳細講解係統調用在用戶空間和內核空間之間傳遞參數的約定,以及如何處理返迴值。在x86_64架構下,我們將重點關注寄存器的使用(如rax、rdi、rsi、rdx、r10、r8、r9等)來傳遞係統調用號和參數。 常用的係統調用列錶與分類: 介紹Linux係統中一些最基本、最核心的係統調用,並根據其功能進行分類,例如: 進程管理: `fork()`, `execve()`, `wait4()`, `exit()`, `getpid()`, `getppid()`, `clone()`等。 文件I/O: `open()`, `read()`, `write()`, `close()`, `lseek()`, `stat()`, `fstat()`, `access()`, `dup()`, `pipe()`等。 內存管理: `brk()`, `mmap()`, `munmap()`等。 信號處理: `kill()`, `sigaction()`, `sigprocmask()`等。 時間與定時: `time()`, `gettimeofday()`, `nanosleep()`等。 網絡通信: `socket()`, `bind()`, `listen()`, `accept()`, `connect()`, `send()`, `recv()`等。 第二部分:係統調用的實踐與探索 使用`strace`深入分析係統調用: `strace` 是Linux下強大的係統調用跟蹤工具。本書將詳細介紹`strace`的使用方法,如何捕捉程序的係統調用序列,如何解讀輸齣信息,以及如何利用`strace`來調試程序、診斷性能瓶頸和安全問題。我們將通過大量的實際案例,演示如何使用`strace`來分析各種常見程序的行為。 編寫簡單的係統調用演示程序: 為瞭加深理解,我們將引導讀者編寫一些簡單的C語言程序,直接調用Linux的係統調用接口。例如,編寫一個程序來創建一個新進程,或者一個程序來讀取和寫入文件。這些實踐性的練習將幫助讀者將理論知識轉化為實際操作能力。 理解係統調用的性能開銷: 係統調用雖然是必需的,但其本身存在一定的性能開銷,包括模式切換、參數拷貝等。本書將分析係統調用開銷的主要來源,並探討一些減少係統調用次數的優化技巧,例如使用`readv`/`writev`進行批量I/O操作,或者利用`epoll`等高效的I/O復用機製。 係統調用的安全性考量: 係統調用是用戶程序訪問受限資源的接口,因此其安全性至關重要。我們將討論一些與係統調用相關的安全漏洞,例如緩衝區溢齣、路徑遍曆等,以及如何編寫更安全的代碼來防範這些風險。 第三部分:深入係統調用的內部 Linux內核中的係統調用實現: 本部分將揭開Linux內核的神秘麵紗,講解係統調用的具體實現細節。我們將深入Linux內核源代碼,分析內核如何處理係統調用請求,包括係統調用分發機製(例如,使用係統調用錶 `sys_call_table`)、參數校驗、上下文切換以及最終的內核函數執行。 係統調用與C庫(libc)的關係: 很多時候,我們通過C庫函數來調用係統調用,例如 `printf()` 最終會調用 `write()` 係統調用。本書將詳細講解C庫函數如何封裝係統調用,以及這種封裝帶來的便利性和潛在的抽象層。 使用`ptrace`進行更底層的調試: `ptrace` 是一個更底層的係統調用,它允許一個進程(調試器)觀察和控製另一個進程。我們將介紹如何使用`ptrace`來實現類似`strace`的功能,這有助於更深入地理解係統調用的執行流程和進程間交互。 理解vDSO(Virtual Dynamic Shared Object): `vDSO` 是一種特殊的共享庫,它被直接映射到用戶空間的地址空間,允許應用程序在不進行內核模式切換的情況下,高效地獲取一些信息,例如當前時間。我們將介紹`vDSO`的工作原理,以及它如何減少某些常見係統調用的開銷。 第四部分:高級主題與前沿展望 係統調用與文件係統: 探討係統調用如何在文件係統操作中發揮作用,例如 `open`、`read`、`write` 等如何與VFS(Virtual File System)層交互。 係統調用與網絡協議棧: 深入分析網絡相關的係統調用,如 `socket`、`bind`、`connect` 等,它們是如何驅動Linux網絡協議棧工作的。 eBPF(extended Berkeley Packet Filter)與係統調用的結閤: 介紹eBPF作為一種在內核中安全運行用戶代碼的技術,如何與係統調用相結閤,實現更靈活、更高效的係統監控、性能分析和安全審計。 未來係統調用發展趨勢: 簡要展望未來Linux係統調用可能的發展方嚮,例如麵嚮雲原生環境的新型係統調用接口,或者對現有係統調用進行優化以適應新型硬件。 本書特色 體係化講解: 從基礎概念到內核實現,本書構建瞭一個完整的知識體係,幫助讀者循序漸進地掌握係統調用的方方麵麵。 理論與實踐相結閤: 大量的代碼示例、`strace` 分析案例和實際編程練習,使讀者能夠理論結閤實踐,快速提升技能。 深入內核源代碼: 本書並非止步於用戶空間的API調用,而是深入Linux內核,揭示係統調用的內部工作原理,滿足讀者對底層機製的探索欲望。 注重問題導嚮: 通過分析實際開發中遇到的問題,引導讀者學習如何利用係統調用知識來解決問題,提升調試和排錯能力。 語言通俗易懂: 盡管涉及復雜的內核概念,但本書力求語言通俗易懂,避免晦澀難懂的術語,讓更多讀者能夠輕鬆入門。 誰應該閱讀本書? 係統程序員: 任何希望深入理解Linux底層運作,編寫高效、健壯係統軟件的程序員。 嵌入式開發工程師: 需要在資源受限的環境下對係統進行細緻調優的開發者。 係統管理員和運維工程師: 想要深入理解應用程序行為,診斷係統故障,優化係統性能的專業人士。 操作係統研究者和學生: 對操作係統原理有濃厚興趣,希望深入瞭解Linux係統調用機製的學習者。 安全工程師: 關注係統安全,需要理解應用程序如何與操作係統交互,以及潛在安全風險的研究者。 結束語 《深入理解Linux係統調用:解密內核與用戶空間的橋梁》是一本旨在為讀者提供深刻洞察力、實用技能和堅實基礎的著作。通過閱讀本書,您將不僅僅是學習如何調用係統接口,更是理解Linux操作係統為何如此強大,如何高效地與硬件進行交互,以及如何構建更可靠、更安全的軟件。我們相信,掌握瞭係統調用的精髓,您將能夠以全新的視角看待Linux,並在您的技術道路上邁齣更堅實的步伐。