《精通Unix Shell腳本編程》是2010年3月1日清華大學出版社出版的圖書,作者是米歇爾。本書的每一章都從日常工作中一個常見的UNIX挑戰開始,然後揭示了如何採用基本的語法並將其轉換成shell腳本可以解決的問題。
基本介紹
- 書名:精通Unix Shell腳本編程
- 作者:米歇爾(Randal K.MiChael)
- 原版名稱:Mastering Unix Shell Scripting(Second Edition)
- ISBN:7302218951, 9787302218951
- 頁數:877頁
- 出版社:清華大學出版社
- 出版時間:2010年3月1日
- 裝幀:平裝
- 開本:16
- 尺寸:25.8 x 18.4 x 4.2 cm
- 正文語種: 簡體中文
作者簡介,內容簡介,目錄,
作者簡介
米歇爾(Randal K.MiChael)是UNIX系統管理工作組的高級顧問。他講授UNI義shell腳本,在企業設定方面編寫了大量的shell腳本以解決從系統監控到複製大型資料庫等問題和任務。另外,他在該行業有30餘年的工作經驗,其中15年的時間一直擔任UNIX系統管理員,主要解決與AlX、HP-UX、Linux、OpenBSD和Solaris相關的實際問題。
內容簡介
準備進入UNIX領域!UNIX專家Randal K.Michael將通過編寫shell腳本的每個細節指導您自動完成特定任務。通過《精通Unix Shell腳本編程(第2版)》,您將了解完整的shell腳本和每一部分的詳細描述,學會如何修改相關信息,從而創建用來監控具體系統事件和情況的工具,並提升解決實際系統管理問題的能力。
《精通Unix Shell腳本編程(第2版)》主要內容
最有效地使用BASH、Bourne和KORN shell腳本
執行各種UNIX版本的正確命令
定義正確的命令語法以滿足特定的shell腳本目的
過濾命令的輸出以去除不必要的數據
創建shell腳本選項,允許終端用戶編寫更加靈活的命令行
使用rsync複製數據
使用Dirvish創建快照類型的備份
使用記錄檔案解析數據
使用特定命令為政府審計做好準備
目錄
第Ⅰ部分 shell腳本基礎
第1章 腳本編程快速入門和概述 3
1.1 區分大小寫 3
1.2 UNIX特殊字元 3
1.3 shell 4
1.4 shell腳本 4
1.5 函式 4
1.6 運行shell腳本 5
1.7 shell腳本中的注釋和風格 6
1.8 控制結構 7
1.9 使用break、continue、exit和 return語句 10
1.10 here文檔 10
1.11 shell腳本命令 11
1.12 符號命令 13
1.13 變數 13
1.14 命令行參數 14
1.15 shift命令 14
1.16 特殊參數$*和$@ 15
1.17 雙引號"、符號'和` 16
1.18 在Solaris中使用awk 16
1.19 正確使用echo命令 17
1.20 shell腳本中的數學 17
1.21 內置的數學函式 18
1.22 檔案許可權、suid和sgid程式 19
1.23 在遠程主機上運行命令 20
1.24 設定陷阱 21
1.25 用戶信息命令 22
1.25.1 who命令 22
1.25.2 w命令 22
1.25.3 last命令 23
1.26 ps命令 23
1.27 與用戶通信 24
1.28 統一大寫或小寫文本以方便測試 24
1.29 檢測返回代碼 25
1.30 基於時間的腳本執行 26
1.30.1 cron表 26
1.30.2 at命令 27
1.31 輸出控制 28
1.31.1 靜默運行 28
1.31.2 使用getopts解析命令行參數 29
1.31.3 使用後台函式創建一個協作進程 30
1.32 捕獲延遲命令輸出 31
1.33 逐行處理檔案的最快方式 32
1.34 循環中使用命令輸出 35
1.35 郵件通知技術 36
1.35.1 使用mail 和mailx 命令 36
1.35.2 使用sendmail 命令來傳送外發郵件 36
1.36 創建一個進度指示器 37
1.36.1 一系列圓點 37
1.36.2 一條旋轉線 38
1.36.3 運行時間 39
1.37 使用記錄檔案 39
1.38 創建偽隨機數 41
1.39 檢查AlX中的失效磁碟分區 42
1.40 自動主機ping 42
1.41 高亮顯示檔案中的特定文本 43
1.42 使印表機一直列印 44
1.42.1 AIX 的“傳統”印表機子系統 44
1.42.2 System V和CUPS列印 44
1.43 自動進行FTP 檔案傳輸 44
1.44 使用rsync複製數據 44
1.45 捕獲大於$MEG 的檔案列表 46
1.46 捕獲用戶的按鍵操作 46
1.47 使用bc實用工具來進行浮點數學運算 47
1.48 數基轉換 48
1.48.1 使用typeset命令 48
1.48.2 使用printf 命令 48
1.49 使用select 命令創建選單 49
1.50 刪除檔案中的重複行 51
1.51 刪除檔案中的空白行 51
1.52 測試NULL 變數 51
1.53 直接訪問上一個位置參數$#的值 52
1.54 刪除命令輸出中的列標題 52
1.55 數組 53
1.56 測試字元串 53
1.57 小結 57
第2章 逐行處理檔案的24種方法 59
2.1 命令語句 59
2.1.1 使用檔案描述符 60
2.1.2 創建一個在時間測試中使用的大檔案 60
2.2 逐行處理檔案的24種方法 65
2.2.1 方法1:cat_while_read_Line 65
2.2.2 方法2:while_read_LINE_bottom 66
2.2.3 方法3:cat_while_LINE_line 67
2.2.4 方法4:while_LINE_line_bottom 68
2.2.5 方法5:cat_while_LINE_line_cmdsub2 69
2.2.6 方法6:while_LINE_line_bottom_cmdsub2 69
2.2.7 方法7:for_LINE_cat_FILE 70
2.2.8 方法8:for_LINE_cat_FILE_cmdsub2 70
2.2.9 方法9:while_line_outfile 71
2.2.10 方法10:while_read_LINE_FD_IN 72
2.2.11 方法11:cat_while_read_LINE_FD_OUT 73
2.2.12 方法12:while_read_LINE_bottom_FD_OUT 74
2.2.13 方法13:while_LINE_line_bottom_FD_OUT 75
2.2.14 方法14:while_LINE_line_bottom_cmdsub2_FD_OUT 76
2.2.15 方法15:for_LINE_cat_FILE_FD_OUT 77
2.2.16 方法16:for_LINE_cat_FILE_cmdsub2_FD_OUT 78
2.2.17 方法17:while_line_outfile_FD_IN 78
2.2.18 方法18:while_line_outfile_FD_OUT 79
2.2.19 方法19:while_line_outfile_FD_IN_AND_OUT 80
2.2.20 方法20:while_LINE_line_FD_IN 81
2.2.21 方法21:while_LINE_line_cmdsub2_FD_IN 82
2.2.22 方法22:while_read_LINE_FD_ IN _AND_OUT 83
2.2.23 方法23:while_LINE_line_FD_IN_AND_OUT 84
2.2.24 方法24:while_LINE_line_cmdsub2_FD_IN_AND_OUT 86
2.3 計時測試各種方法 87
2.3.1 計時腳本 87
2.3.2 每個方法的計時數據 105
2.3.3 計時命令替代方法 113
2.4 使用命令輸入和使用檔案輸入的區別 115
2.5 小結 115
2.6 作業 116
第3章 自動事件通知 117
3.1 自動事件通知的基礎 117
3.1.1 使用mail和mailx命令 117
3.1.2 設定郵件別名 119
3.2 外發郵件的問題 120
3.2.1 使用.forward檔案創建一個“Bounce”賬戶 122
3.2.2 使用sendmail命令傳送外發郵件 123
3.3 撥號數據機軟體 124
3.4 SNMP 陷阱 124
3.5 小結 125
3.6 作業 125
第4章 進度指示器 127
4.1 使用一系列圓點來指示進度 127
4.2 使用一條旋轉線來指示進度 129
4.3 使用運行時間來指示進度 131
4.4 聯合反饋方法 133
4.5 其他要考慮的選項 136
4.6 小結 136
4.7 作業 136
第Ⅱ部分 程式設計師、測試員和分析員腳本
第5章 使用記錄檔案 139
5.1 記錄的概念 139
5.1.1 定長記錄檔案 139
5.1.2 變長記錄檔案 140
5.2 處理記錄檔案 141
5.3 記錄的任務和記錄檔案 145
5.3.1 定長記錄檔案的任務 146
5.3.2 變長記錄檔案的任務 147
5.4 合併進程 149
5.5 合併記錄生成shell腳本 152
5.6 其他需要考慮的問題 162
5.7 小結 162
5.8 作業 163
第6章 自動FTP處理 165
6.1 語法 165
6.2 自動檔案傳輸和遠程目錄列表 168
6.2.1 使用FTP獲得遠程計算機上的目錄列表 168
6.2.2 從遠程計算機上獲得一個或多個檔案 169
6.2.3 將一個或多個檔案傳輸到遠程計算機 173
6.2.4 用變數代替硬編碼的密碼 176
6.2.5 將FTP腳本修改為使用密碼 179
6.3 加密怎么樣 185
6.3.1 創建加密密鑰 185
6.3.2 創建不需要密碼的安全shell訪問 186
6.3.3 安全FTP和安全複製語法 186
6.3.4 用autoexpect和expect腳本實現自動FTP 188
6.4 其他要考慮的問題 191
6.4.1 使用命令行開關項控制執行 191
6.4.2 對活動進行記錄 192
6.4.3 對腳本增加調試模式 192
6.4.4 把密碼讀入shell腳本 192
6.5 小結 192
6.6 作業 193
第7章 使用rsync有效複製數據 195
7.1 語法 195
7.2 普通rsync shell腳本 196
7.3 用rsync命令複製多目錄檔案 197
7.4 用rsync複製多檔案系統 212
7.5 用rsync複製Oracle資料庫 224
7.6 用rsync複製shell腳本 226
7.7 小結 259
7.8 作業 260
第8章 用Expect和autoexpect實現自動互動 261
8.1 下載和安裝Expect 261
8.2 互動腳本或程式會話的基礎 263
8.3 用autoexpect自動創建Expect腳本 266
8.4 使用變數 272
8.5 條件測試 274
8.5.1 Expect中的case語句 274
8.5.2 Expect中的if…then…else循環 280
8.5.3 Expect中的while循環 281
8.5.4 Expect中的for循環 282
8.5.5 Expect中的函式 284
8.6 在Sun Blade Chassis和JumpStart中使用Expect腳本 285
8.7 小結 290
8.8 作業 290
第9章 查找大檔案和特定類型的檔案 291
9.1 語法 291
9.2 記住檔案和目錄的許可許可權 292
9.3 別因檔案的大小而吃驚 292
9.4 創建腳本 293
9.5 其他要考慮的問題 298
9.6 小結 298
9.7 作業 298
第10章 進程監視與進程啟動前、啟動時和進程停止後事件 301
10.1 語法 301
10.2 監視進程的啟動 302
10.3 監視進程的結束 303
10.4 當進程啟動或停止時進行監視和記錄 308
10.5 進程監視的定時執行、顯示每個進程的PID、為事件打上時間戳和定時功能 312
10.6 其他要考慮的問題 330
10.6.1 一般性用途 330
10.6.2 要考慮的修改事項 330
10.7 小結 330
10.8 作業 331
第11章 偽隨機數和數據的生成 333
11.1 隨機數的產生 333
11.2 方法 334
11.2.1 方法1:利用PID和RANDOM shell變數產生一個偽隨機數 334
11.2.2 方法2:產生一個在0到32767之間的隨機數 335
11.2.3 方法3:產生1到用戶定義的最大值之間的數字 335
11.2.4 方法4:產生位於1和用戶定義的最大數之間的固定長度的數 336
11.2.5 方法5:使用/dev/random和/dev/urandom字元專用檔案 338
11.3 創建偽隨機數的shell腳本 341
11.4 創建唯一的檔案名稱 346
11.5 創建一個由隨機字元組成的檔案 353
11.6 其他要考慮的問題 359
11.7 小結 360
11.8 作業 360
第12章 創建偽隨機密碼 361
12.1 隨機性 361
12.2 創建偽隨機密碼 362
12.3 語法 362
12.4 建立密碼創建腳本 363
12.4.1 出現順序 364
12.4.2 腳本主體的開始 375
12.5 其他需要考慮的問題 387
12.5.1 密碼報表 387
12.5.2 選用哪個密碼 387
12.5.3 其他用途 387
12.6 小結 388
12.7 作業 388
第13章 浮點數學運算和bc工具程式 389
13.1 語法 389
13.2 使用bc創建shell腳本 390
13.2.1 創建float_add.ksh shell腳本 390
13.2.2 整數和浮點數的測試 395
13.2.3 用bc命令創建一個數學運算語句 397
13.2.4 使用here文檔 398
13.2.5 創建float_subtract.ksh shell腳本 398
13.2.6 使用getopts解析命令行 403
13.2.7 為bc工具創建數學運算語句 405
13.2.8 here文檔和提交結果 406
13.2.9 創建float_multiply.ksh shell腳本 407
13.2.10 解析命令行以獲取有效數字 412
13.2.11 創建float_divide.ksh shell 腳本 413
13.2.12 創建float_average.ksh shell 腳本 420
13.3 其他需要考慮的問題 424
13.4 小結 425
13.5 作業 425
第14章 數制轉換 427
14.1 語法 427
14.1.1 例1:將十進制轉換為十六進制 428
14.1.2 例2:將八進制轉換為十六進制 428
14.1.3 例3:十進制數轉換為八進制 429
14.1.4 例4:將十進制轉換為十六進制 429
14.2 利用腳本解決問題 429
14.2.1 二進制轉換為十六進制的shell腳本 429
14.2.2 十進制轉換為十六進制的腳本 432
14.2.3 基於十六進制IP位址產生軟體授權碼的腳本 436
14.2.4 在任何數制之間進行轉換的腳本 440
14.2.5 利用getopts分析命令行 445
14.2.6 繼續完善腳本 446
14.2.7 主程式的開始 448
14.3 轉換數制的簡單、可互動的腳本 449
14.4 利用bc工具進行數制轉換 454
14.5 其他需要考慮的問題 460
14.6 小結 460
14.7 作業 460
第15章 hgrep:高亮顯示的grep腳本 461
15.1 反白顯示控制 461
15.2 創建hgrep.Bash shell腳本 463
15.3 其他需要考慮的問題 469
15.4 小結 470
15.5 作業 470
第16章 監視進程和應用程式 471
16.1 監視本地進程 471
16.2 利用安全shell和遠程shell進行遠程監控 473
16.2.1 檢查活動的Oracle資料庫 479
16.2.2 使用autoexpect產生一個expect腳本 482
16.2.3 檢查HTTP伺服器/應用程式是否運行 487
16.3 等待進程執行完畢 488
16.4 其他需要考慮的問題 489
16.4.1 echo的正確用法 489
16.4.2 應用程式API和SNMP陷阱 490
16.5 小結 490
16.6 作業 491
第Ⅲ部分 系統管理員腳本
第17章 檔案系統的監視 495
17.1 語法 495
17.2 為監視添加異常功能 500
17.3 剩餘空間方法 506
17.4 使用帶異常功能的MB剩餘空間方法 509
17.5 已用百分比——MB剩餘空間和大型檔案系統 513
17.6 在AIX、Linux、HP-UX、OpenBSD和Solaris上運行檔案系統腳本 522
17.6.1 不同作業系統命令語法和輸出之間的差異 523
17.6.2 編寫中性shell(shell-neutral)腳本 528
17.7 其他應考慮的問題 537
17.7.1 事件通知 537
17.7.2 自動執行 538
17.7.3 修改egrep語句 538
17.8 小結 538
17.9 作業 539
第18章 監視頁面調度和交換空間 541
18.1 語法 542
18.1.1 AIX 的lsps命令 542
18.1.2 HP-UX下的swapinfo命令 543
18.1.3 Linux下的free命令 543
18.1.4 OpenBSD下的swapctl命令 544
18.1.5 Solaris下的swap命令 544
18.2 編寫shell腳本 544
18.2.1 AIX分頁監視器 544
18.2.2 HP-UX交換空間監視器 549
18.2.3 Linux交換空間監視器 554
18.2.4 OpenBSD交換空間監視器 557
18.2.5 Solaris交換空間監視器 560
18.2.6 5合1分頁和交換空間監視器 564
18.3 其他需要考慮的問題 572
18.3.1 事件通知 572
18.3.2 日誌檔案 572
18.3.3 預約監視 572
18.4 小結 572
18.5 作業 573
第19章 系統負荷監視 575
19.1 在Linux上安裝系統統計程式 576
19.2 語法 577
19.2.1 uptime命令的語法 578
19.2.2 iostat語法 579
19.2.3 sar的命令語法 582
19.2.4 vmstat命令的語法 584
19.3 利用腳本解決問題 587
19.3.1 使用uptime命令測量系統負荷 587
19.3.2 使用sar命令測量系統負荷 591
19.3.3 使用iostat命令測量系統負荷 596
19.3.4 使用vmstat測量系統負荷 601
19.4 其他需要考慮的問題 604
19.4.1 嘗試為用戶檢測任何可能的問題 605
19.4.2 向用戶顯示CPU占用程式列表 605
19.4.3 收集用於描繪曲線的大量數據 605
19.5 小結 605
19.6 作業 606
第20章 對陳舊磁碟分區的監視(AIX特有) 607
20.1 AIX邏輯卷標管理器 607
20.2 命令和方法 608
20.2.1 磁碟子系統命令 608
20.2.2 方法1:在LV級監視陳舊PP 608
20.2.3 方法2:在PV級監視陳舊分區 613
20.2.4 方法3:帶重新同步功能的VG、LV和PV監視 616
20.3 其他需要考慮的問題 622
20.3.1 SSA磁碟 622
20.3.2 日誌檔案 623
20.3.3 自動執行 623
20.3.4 事件通知 623
20.4 小結 623
20.5 作業 624
第21章 打開/關閉SSA磁碟識別指示燈 625
21.1 語法 625
21.1.1 hdisk轉換為pdisk 626
21.1.2 標識一個SSA磁碟 626
21.2 腳本編寫過程 626
21.2.1 用法函式和用戶反饋函式 627
21.2.2 控制函式 630
21.2.3 完整的shell腳本 635
21.3 其他需要考慮的問題 646
21.3.1 錯誤日誌 646
21.3.2 交叉引用 646
21.3.3 Root訪問和sudo 646
21.4 小結 647
21.5 作業 647
第22章 帶失敗通知的自動主機ping測試 649
第23章 製作系統配置鏡像 665
第24章 sudo的編譯、安裝、配置和使用 697
第25章 脫離列印佇列地獄:保持印表機持續工作 727
第26章 那些討厭的SOX審計 765
第27章 使用Dirvish和rsync創建快照類型的備份 779
第28章 對用戶按鍵進行監視和審計 841
附錄A Web站點上的內容 859