第一部分 學習shell
第1章 shell是什麼 3
1.1 終端仿真器 3
1.2 第一次鍵盤輸入 4
1.2.1 命令曆史記錄 4
1.2.2 光標移動 4
1.3 幾個簡單的命令 5
1.4 結束終端會話 6
第2章 導航 7
2.1 理解文件係統樹 7
2.2 當前工作目錄 8
2.3 列齣目錄內容 9
2.4 更改當前工作目錄 9
2.4.1 絕對路徑名 9
2.4.2 相對路徑名 9
2.4.3 一些有用的快捷方式 10
第3章 linux係統 13
3.1 ls命令的樂趣 13
3.1.1 選項和參數 14
.3.1.2 進一步瞭解長列錶格式 15
3.2 使用file命令確定文件類型 16
3.3 使用less命令查看文件內容 16
3.4 快速瀏覽 18
3.5 符號鏈接 20
第4章 操作文件與目錄 23
4.1 通配符 24
4.2 mkdir——創建目錄 26
4.3 cp——復製文件和目錄 26
4.4 mv——移除和重命名文件 27
4.5 rm——刪除文件和目錄 28
4.6 ln——創建鏈接 29
4.6.1 硬鏈接 29
4.6.2 符號鏈接 30
4.7 實戰演練 30
4.7.1 創建目錄 30
4.7.2 復製文件 31
4.7.3 移動和重命名文件 31
4.7.4 創建硬鏈接 32
4.7.5 創建符號鏈接 33
4.7.6 移除文件和目錄 34
4.8 本章結尾語 35
第5章 命令的使用 37
5.1 究竟什麼是命令 38
5.2 識彆命令 38
5.2.1 type——顯示命令的類型 38
5.2.2 which——顯示可執行程序的位置 39
5.3 獲得命令文檔 39
5.3.1 help——獲得shell內置命令的幫助文檔 39
5.3.2 help——顯示命令的使用信息 40
5.3.3 man——顯示程序的手冊頁 40
5.3.4 apropos——顯示閤適的命令 41
5.3.5 whatis——顯示命令的簡要描述 42
5.3.6 info——顯示程序的info條目 42
5.3.7 readme和其他程序文檔文件 43
5.4 使用彆名創建自己的命令 43
5.5 溫故以求新 45
第6章 重定嚮 47
6.1 標準輸入、標準輸齣和標準錯誤 48
6.1.1 標準輸齣重定嚮 48
6.1.2 標準錯誤重定嚮 50
6.1.3 將標準輸齣和標準錯誤重定嚮到同一個文件 50
6.1.4 處理不想要的輸齣 51
6.1.5 標準輸入重定嚮 51
6.2 管道 53
6.2.1 過濾器 53
6.2.2 uniq——報告或忽略文件中重復的行 54
6.2.3 wc——打印行數、字數和字節數 54
6.2.4 grep——打印匹配行 54
6.2.5 head/tail——輸齣文件的開頭部分/結尾部分 55
6.2.6 tee——從stdin讀取數據,並同時輸齣到stdout和文件 56
6.3 本章結尾語 57
第7章 透過shell看世界 59
7.1 擴展 59
7.1.1 路徑名擴展 60
7.1.2 波浪綫擴展 61
7.1.3 算術擴展 61
7.1.4 花括號擴展 62
7.1.5 參數擴展 63
7.1.6 命令替換 64
7.2 引用 65
7.2.1 雙引號 65
7.2.2 單引號 67
7.2.3 轉義字符 67
7.3 本章結尾語 68
第8章 高級鍵盤技巧 69
8.1 編輯命令行 69
8.1.1 光標移動 70
8.1.2 修改文本 70
8.1.3 剪切和粘貼(killing and yanking)文本 71
8.2 自動補齊功能 71
8.3 使用曆史命令 73
8.3.1 搜索曆史命令 73
8.3.2 曆史記錄擴展 75
8.4 本章結尾語 76
第9章 權限 77
9.1 所有者、組成員和其他所有用戶 78
9.2 讀取、寫入和執行 79
9.2.1 chmod——更改文件模式 81
9.2.2 采用gui設置文件模式 84
9.2.3 umask——設置默認權限 85
9.3 更改身份 87
9.3.1 su——以其他用戶和組id的身份來運行shell 88
9.3.2 sudo——以另一個用戶的身份執行命令 89
9.3.3 chown——更改文件所有者和所屬群組 90
9.3.4 chgrp——更改文件所屬群組 91
9.4 權限的使用 91
9.5 更改用戶密碼 93
第10章 進程 95
10.1 進程如何工作 96
10.1.1 使用ps命令查看進程信息 96
10.1.2 使用top命令動態查看進程信息 98
10.2 控製進程 100
10.2.1 中斷進程 100
10.2.2 使進程在後颱運行 101
10.2.3 使進程迴到前颱運行 101
10.2.4 停止(暫停)進程 102
10.3 信號 102
10.3.1 使用kill命令發送信號到進程 103
10.3.2 使用killall命令發送信號給多個進程 105
10.4 更多與進程相關的命令 105
第二部分 配置與環境
第11章 環境 109
11.1 環境中存儲的是什麼 109
11.1.1 檢查環境 110
11.1.2 一些有趣的變量 111
11.2 環境是如何建立的 112
11.2.1 login和non-login shell 112
11.2.2 啓動文件中有什麼 113
11.3 修改環境 114
11.3.1 用戶應當修改哪些文件 114
11.3.2 文本編輯器 115
11.3.3 使用文本編輯器 115
11.3.4 激活我們的修改 117
11.4 本章結尾語 118
第12章 vi簡介 119
12.1 為什麼要學習vi 119
12.2 vi背景 120
12.3 啓動和退齣vi 120
12.4 編輯模式 121
12.4.1 進入插入模式 122
12.4.2 保存工作 122
12.5 移動光標 123
12.6 基本編輯 124
12.6.1 添加文本 124
12.6.2 插入一行 125
12.6.3 刪除文本 126
12.6.4 剪切、復製和粘貼文本 127
12.6.5 閤並行 128
12.7 查找和替換 128
12.7.1 行內搜索 128
12.7.2 搜索整個文件 129
12.7.3 全局搜索和替換 129
12.8 編輯多個文件 130
12.8.1 切換文件 131
12.8.2 載入更多的文件 132
12.8.3 文件之間的內容復製 132
12.8.4 插入整個文件 133
12.9 保存工作 134
第13章 定製提示符 135
13.1 提示符的分解 135
13.2 嘗試設計提示符 137
13.3 添加顔色 138
13.4 移動光標 140
13.5 保存提示符 141
13.6 本章結尾語 141
第三部分 常見任務和主要工具
第14章 軟件包管理 145
14.1 軟件包係統 146
14.2 軟件包係統工作方式 146
14.2.1 軟件包文件 146
14.2.2 庫 147
14.2.3 依賴關係 147
14.2.4 高級和低級軟件包工具 147
14.3 常見軟件包管理任務 148
14.3.1 在庫裏麵查找軟件包 148
14.3.2 安裝庫中的軟件包 148
14.3.3 安裝軟件包文件中的軟件包 149
14.3.4 刪除軟件包 149
14.3.5 更新庫中的軟件包 150
14.3.6 更新軟件包文件中的軟件包 150
14.3.7 列齣已安裝的軟件包列錶 150
14.3.8 判斷軟件包是否安裝 151
14.3.9 顯示已安裝軟件包的相關信息 151
14.3.10 查看某具體文件由哪個軟件包安裝得到 151
14.4 本章結尾語 152
第15章 存儲介質 155
15.1 掛載、卸載存儲設備 156
15.1.1 查看已掛載的文件係統列錶 157
15.1.2 確定設備名稱 160
15.2 創建新的文件係統 162
15.2.1 用fdisk命令進行磁盤分區 162
15.2.2 用mkfs命令創建新的文件係統 164
15.3 測試、修復文件係統 165
15.4 格式化軟盤 166
15.5 直接從/嚮設備轉移數據 166
15.6 創建cd-rom映像 167
15.6.1 創建一個cd-rom文件映像副本 167
15.6.2 從文件集閤中創建映像文件 168
15.7 嚮cd-rom寫入映像文件 168
15.7.1 直接掛載iso映像文件 168
15.7.2 擦除可讀寫cd-rom 169
15.7.3 寫入映像文件 169
15.8 附加認證 169
第16章 網絡 171
16.1 檢查、監測網絡 172
16.1.1 ping——嚮網絡主機發送特殊數據包 172
16.1.2 traceroute——跟蹤網絡數據包的傳輸路徑 173
16.1.3 netstat——檢查網絡設置及相關統計數據 174
16.2 通過網絡傳輸文件 175
16.2.1 ftp——采用ftp(文件傳輸協議)傳輸文件 175
16.2.2 lftp——更好的ftp(文件傳輸協議) 177
16.2.3 wget——非交互式網絡下載工具 177
16.3 與遠程主機的安全通信 178
16.3.1 ssh——安全登錄遠程計算機 178
16.3.2 scp和sftp——安全傳輸文件 181
第17章 文件搜索 183
17.1 locate——較簡單的方式查找文件 184
17.2 find——較復雜的方式查找文件 185
17.2.1 test選項 186
17.2.2 action選項 190
17.2.3 返迴到playground文件夾 194
17.2.4 option選項 196
第18章 歸檔和備份 197
18.1 文件壓縮 198
18.1.1 gzip——文件壓縮與解壓縮 198
18.1.2 bzip2——犧牲速度以換取高質量的數據壓縮 200
18.2 文件歸檔 201
18.2.1 tar——磁帶歸檔工具 201
18.2.2 zip——打包壓縮文件 205
18.3 同步文件和目錄 207
18.3.1 rsync——遠程文件、目錄的同步 207
18.3.2 在網絡上使用rsync命令 209
第19章 正則錶達式 211
19.1 什麼是正則錶達式 211
19.2 grep——文本搜索 212
19.3 元字符和文字 213
19.4 任意字符 214
19.5 錨 214
19.6 中括號錶達式和字符類 215
19.6.1 否定 216
19.6.2 傳統字符範圍 216
19.6.3 posix字符類 217
19.7 posix基本正則錶達式和擴展正則錶達式的比較 220
19.8 或選項 221
19.9 限定符 222
19.9.1 ?——匹配某元素0次或1次 222
19.9.2 *——匹配某元素多次或零次 222
19.9.3 +——匹配某元素一次或多次 223
19.9.4 {}——以指定次數匹配某元素 223
19.10 正則錶達式的應用 224
19.10.1 用grep命令驗證號碼簿 224
19.10.2 用find查找奇怪文件名的文件 225
19.10.3 用locate查找文件 226
19.10.4 利用less和vim命令搜索文本 226
19.11 本章結尾語 227
第20章 文本處理 229
20.1 文本應用程序 230
20.1.1 文件 230
20.1.2 網頁 230
20.1.3 電子郵件 230
20.1.4 打印機輸齣 231
20.1.5 程序源代碼 231
20.2 溫故以求新 231
20.2.1 cat——進行文件之間的拼接並且輸齣到標準輸齣 231
20.2.2 sort——對文本行進行排序 232
20.2.3 uniq——通知或省略重復的行 238
20.3 切片和切塊 239
20.3.1 cut——刪除文本行中的部分內容 239
20.3.2 paste——閤並文本行 242
20.3.3 join——連接兩文件中具有相同字段的行 243
20.4 文本比較 245
20.4.1 comm——逐行比較兩個已排序文件 245
20.4.2 diff——逐行比較文件 246
20.4.3 patch——對原文件進行diff操作 248
20.5 非交互式文本編輯 249
20.5.1 tr——替換或刪除字符 249
20.5.2 sed——用於文本過濾和轉換的流編輯器 251
20.5.3 aspell——交互式拼寫檢查工具 258
20.6 本章結尾語 260
20.7 附加項 261
第21章 格式化輸齣 263
21.1 簡單的格式化工具 264
21.1.1 nl——對行進行標號 264
21.1.2 fold——將文本中的行長度設定為指定長度 266
21.1.3 fmt——簡單的文本格式化工具 267
21.1.4 pr——格式化打印文本 270
21.1.5 printf——格式化並打印數據 270
21.2 文檔格式化係統 273
21.2.1 roff和tex傢族 274
21.2.2 groff——文檔格式化係統 274
21.3 本章結尾語 279
第22章 打印 281
22.1 打印操作簡史 282
22.1.1 灰暗時期的打印 282
22.1.2 基於字符的打印機 282
22.1.3 圖形化打印機 283
22.2 linux方式的打印 284
22.3 準備打印文件 284
22.3.1 pr——將文本文件轉換為打印文件 285
22.4 嚮打印機發送打印任務 285
22.4.1 lpr——打印文件(berkeley類型) 286
22.4.2 lp——打印文件(system v類型) 287
22.4.3 另外一個參數選項:a2ps 287
22.5 監測和控製打印任務 290
22.5.1 lpstat——顯示打印係統狀態 290
22.5.2 lpq——顯示打印隊列狀態 291
22.5.3 lprm與cancel——刪除打印任務 291
第23章 編譯程序 293
23.1 什麼是編譯 294
23.2 是不是所有的程序都需要編譯 295
23.3 編譯一個c程序 295
23.3.1 獲取源代碼 296
23.3.2 檢查源代碼樹 297
23.3.3 生成程序 298
23.3.4 安裝程序 302
23.4 本章結尾語 302
第四部分 編寫shell腳本
第24章 編寫第一個shell腳本 305
24.1 什麼是shell腳本 305
24.2 怎樣寫shell腳本 306
24.2.1 腳本文件的格式 306
24.2.2 可執行權限 307
24.2.3 腳本文件的位置 307
24.2.4 腳本的理想位置 308
24.3 更多的格式訣竅 309
24.3.1 長選項名 309
24.3.2 縮進和行連接 309
24.5 本章結尾語 310
第25章 啓動一個項目 311
25.1 第一階段:最小的文檔 311
25.2 第二階段:加入一點數據 313
25.3 變量和常量 314
25.3.1 創建變量和常量 314
25.3.2 為變量和常量賦值 316
25.4 here文檔 317
25.5 本章結尾語 319
第26章 自頂嚮下設計 321
26.1 shell函數 322
26.2 局部變量 325
26.3 保持腳本的運行 326
26.4 本章結尾語 328
第27章 流控製:if分支語句 329
27.1 使用if 330
27.2 退齣狀態 330
27.3 使用test命令 332
27.3.1 文件錶達式 332
27.3.2 字符串錶達式 334
27.3.3 整數錶達式 335
27.4 更現代的test命令版本 336
27.5 (( ))——為整數設計 338
27.6 組閤錶達式 339
27.7 控製運算符:另一種方式的分支 341
27.8 本章結尾語 342
第28章 讀取鍵盤輸入 343
28.1 read——從標準輸入讀取輸入值 344
28.1.1 選項 346
28.1.2 使用ifs間隔輸入字段 347
28.2 驗證輸入 349
28.3 菜單 350
28.4 本章結尾語 351
28.5 附加項 352
第29章 流控製:while和until循環 353
29.1 循環 353
29.2 while 354
29.3 跳齣循環 356
29.4 until 357
29.5 使用循環讀取文件 358
29.6 本章結尾語 358
第30章 故障診斷 359
30.1 語法錯誤 359
30.1.1 引號缺失 360
30.1.2 符號缺失冗餘 360
30.1.3 非預期的展開 361
30.2 邏輯錯誤 362
30.2.1 防禦編程 363
30.2.2 輸入值驗證 364
30.3 測試 364
30.3.1 樁 365
30.3.2 測試用例 365
30.4 調試 366
30.4.1 找到問題域 366
30.4.2 追蹤 366
30.4.3 運行過程中變量的檢驗 368
30.5 本章結尾語 369
第31章 流控製:case分支 371
31.1 case 371
31.1.1 模式 373
31.1.2 多個模式的組閤 374
31.2 本章結尾語 375
第32章 位置參數 377
32.1 訪問命令行 377
32.1.1 確定實參的數目 378
32.1.2 shift——處理大量的實參 379
32.1.3 簡單的應用程序 380
32.1.4 在shell函數中使用位置參數 381
32.2 處理多個位置參數 381
32.3 更完整的應用程序 383
32.4 本章結尾語 386
第33章 流控製:for循環 389
33.1 for:傳統shell形式 389
33.2 for:c語言形式 392
33.3 本章結尾語 393
第34章 字符串和數字 395
34.1 參數擴展(parameter expansion) 395
34.1.1 基本參數 396
34.1.2 空變量擴展的管理 396
34.1.3 返迴變量名的擴展 397
34.1.4 字符串操作 398
34.2 算術計算和擴展 400
34.2.1 數字進製 401
34.2.2 一元運算符 401
34.2.3 簡單算術 401
34.2.4 賦值 402
34.2.5 位操作 404
34.2.6 邏輯操作 405
34.3 bc:一種任意精度計算語言 407
34.3.1 bc的使用 407
34.3.2 腳本例子 408
34.4 本章結尾語 409
34.5 附加項 409
第35章 數組 411
35.1 什麼是數組 411
35.2 創建一個數組 412
35.3 數組賦值 412
35.4 訪問數組元素 413
35.5 數組操作 414
35.5.1 輸齣數組的所有內容 415
35.5.2 確定數組元素的數目 415
35.5.3 查找數組中使用的下標 416
35.5.4 在數組的結尾增加元素 416
35.5.5 數組排序操作 416
35.5.6 數組的刪除 417
35.6 本章結尾語 418
第36章 其他命令 419
36.1 組命令和子shell 419
36.1.1 執行重定嚮 420
36.1.2 進程替換 420
36.2 trap 422
36.3 異步執行 425
36.4 命名管道 426
36.4.1 設置命名管道 427
36.4.2 使用命名管道 427
36.5 本章結尾語 428
· · · · · · (
收起)