在IT產(chǎn)業(yè)鏈中開源的理念已成為絕大多數(shù)企業(yè)的共識。隨著開源技術(shù)的不斷進步與創(chuàng)新,云計算也逐步深入到了每個互聯(lián)網(wǎng)企業(yè)的內(nèi)部。但是,隨之而來的便是管理成本的提高,大量的物理或者虛擬主機需要管理與維護,如何能夠更好地實現(xiàn)自動化運維,成為企業(yè)需要迫切解決的問題。行業(yè)中自動化運維的軟件很多,Puppet、Saltstack、Ansible等讓我們在云時代依然可以輕松管理和維護設(shè)備與業(yè)務,然而像Ansible這樣的自動化工具,雖然已經(jīng)內(nèi)置了很多模塊,但是在解決每個企業(yè)的個性化需求時還需要編寫自動化腳本。本書將圍繞Linux系統(tǒng)中最常用的Shell腳本語言,講解如何通過Shell編寫自動化、智能化腳本。全書以案例貫穿,對每個知識點都可以找到與之對應的案例,完成本書中的每個案例對于未來在企業(yè)中的實際應用極具意義。另外,在本書中配套有很多游戲案例,通過編寫游戲腳本可以極大地提升學習的樂趣。本書中的代碼可以在https://github.com/jacobproject/shell_scripts下載,現(xiàn)在的商業(yè)環(huán)境是一個充滿競爭的環(huán)境,很多企業(yè)的業(yè)務量在不斷地增長,對服務質(zhì)量的要求也越來越高。特別是互聯(lián)網(wǎng)企業(yè)為了滿足客戶更高的需求,提升用戶使用體驗,IT部門需要維護的設(shè)備數(shù)量從早期的幾臺,發(fā)展到了目前的數(shù)以萬計,如此龐大的服務器維護量,通常會讓IT管理人員頭疼不已。本書介紹的自動化運維內(nèi)容可以讓我們快速掌握大規(guī)模批量處理的簡單方法。本書從基礎(chǔ)知識講到數(shù)據(jù)分析、數(shù)據(jù)過濾等高級應用,適合Linux運維人員、Shell編程愛好者閱讀,可作為Linux運維人員的一本優(yōu)秀的案頭書。
丁明一達內(nèi)集團云計算教學研發(fā)總監(jiān)、開源技術(shù)推廣者;紅帽認證架構(gòu)師(RHCA)、紅帽認證高級講師(RHCI);曾任職于中國電信、鵬博士等多家IT企業(yè),并創(chuàng)辦多個企業(yè),十余年IT行業(yè)經(jīng)驗;精通Linux系統(tǒng)、Shell腳本編程、各大云計算產(chǎn)品、Docker容器技術(shù)、分布式存儲技術(shù),擁有豐富的虛擬化技術(shù)使用經(jīng)驗,對企業(yè)集群存儲環(huán)境及高性能、高可用架構(gòu)有深入的研究,著有暢銷圖書《Linux運維之道》。
第1章 從這里開始,起飛了 1
1.1 腳本文件的書寫格式 1
1.2 腳本文件的各種執(zhí)行方式 3
1.3 如何在腳本文件中實現(xiàn)數(shù)據(jù)的輸入與輸出 6
1.4 輸入與輸出的重定向 17
1.5 各種引號的正確使用姿勢 24
1.6 千變?nèi)f化的變量 28
1.7 數(shù)據(jù)過濾與正則表達式 33
1.8 各式各樣的算術(shù)運算 40
第2章 人工智能,很人工、很智能的腳本 46
2.1 智能化腳本的基礎(chǔ)之測試 46
2.2 字符串的判斷與比較 47
2.3 整數(shù)的判斷與比較 49
2.4 文件屬性的判斷與比較 51
2.5 探究[[]]和[]的區(qū)別 55
2.6 實戰(zhàn)案例:系統(tǒng)性能監(jiān)控腳本 60
2.7 實戰(zhàn)案例:單分支if語句 62
2.8 實戰(zhàn)案例:雙分支if語句 68
2.9 實戰(zhàn)案例:如何監(jiān)控HTTP服務狀態(tài) 72
2.10 實戰(zhàn)案例:多分支if語句 81
2.11 實戰(zhàn)案例:簡單、高效的case語句 87
2.12 實戰(zhàn)案例:編寫Nginx啟動腳本 92
2.13 揭秘模式匹配與通配符、擴展通配符 94
2.14 Shell小游戲之石頭剪刀布 100
第3章 根本停不下來的循環(huán)和中斷控制 104
3.1 玩轉(zhuǎn)for循環(huán)語句 104
3.2 實戰(zhàn)案例:猴子吃香蕉的問題 114
3.3 實戰(zhàn)案例:進化版HTTP狀態(tài)監(jiān)控腳本 116
3.4 神奇的循環(huán)嵌套 117
3.5 非常重要的IFS 124
3.6 實戰(zhàn)案例:while循環(huán) 130
3.7 Shell小游戲之猜隨機數(shù)字 134
3.8 實戰(zhàn)案例:如何通過read命令讀取文件中的數(shù)據(jù) 136
3.9 until和select循環(huán) 140
3.10 中斷與退出控制 143
3.11 Shell小游戲之機選雙色球 149
第4章 請開始你的表演,數(shù)組、Subshell與函數(shù) 152
4.1 強悍的數(shù)組 152
4.2 實戰(zhàn)案例:斐波那契數(shù)列 157
4.3 實戰(zhàn)案例:網(wǎng)站日志分析腳本 159
4.4 常犯錯誤的SubShell 164
4.5 啟動進程的若干種方式 172
4.6 非常實用的函數(shù)功能 176
4.7 變量的作用域與return返回值 179
4.8 實戰(zhàn)案例:多進程的ping腳本 185
4.9 控制進程數(shù)量的核心技術(shù)——文件描述符和命名管道 187
4.10 實戰(zhàn)案例:一鍵源碼部署LNMP的腳本 197
4.11 遞歸函數(shù) 204
4.12 排序算法之冒泡排序 206
4.13 排序算法之快速排序 209
4.14 排序算法之插入排序 213
4.15 排序算法之計數(shù)排序 215
4.16 Shell小游戲之單詞拼接puzzle 218
第5章 一大波腳本技巧正向你走來 221
5.1 Shell八大擴展功能之花括號 221
5.2 Shell八大擴展功能之波浪號 223
5.3 Shell八大擴展功能之變量替換 224
5.4 Shell八大擴展功能之命令替換 234
5.5 Shell八大擴展功能之算術(shù)替換 234
5.6 Shell八大擴展功能之進程替換 236
5.7 Shell八大擴展功能之單詞切割 238
5.8 Shell八大擴展功能之路徑替換 239
5.9 實戰(zhàn)案例:生成隨機密碼的若干種方式 240
5.10 Shell解釋器的屬性與初始化命令行終端 247
5.11 trap信號捕獲 257
5.12 實戰(zhàn)案例:電子時鐘 259
5.13 Shell小游戲之抓住小老鼠算你贏 263
5.14 實戰(zhàn)案例:腳本排錯技巧 267
5.15 實戰(zhàn)案例:Shell版本的進度條功能 270
5.16 再談參數(shù)傳遞之xargs 276
5.17 使用shift移動位置參數(shù) 280
5.18 實戰(zhàn)案例:Nginx日志切割腳本 281
第6章 上古神兵利器sed 285
6.1 sed基本指令 285
6.2 sed高級指令 305
6.3 實戰(zhàn)案例:自動化配置vsftpd腳本 318
6.4 實戰(zhàn)案例:自動化配置DHCP腳本 325
6.5 實戰(zhàn)案例:自動化克隆KVM虛擬機腳本 329
6.6 實戰(zhàn)案例:通過libguestfs管理KVM虛擬機腳本 337
6.7 實戰(zhàn)案例:自動化配置SSH安全策略腳本 343
6.8 實戰(zhàn)案例:基于GRUB配置文件修改內(nèi)核啟動參數(shù)腳本 345
6.9 實戰(zhàn)案例:網(wǎng)絡爬蟲腳本 348
6.10 Shell小游戲之點名抽獎器 354
第7章 不可思議的編程語言awk 356
7.1 awk基礎(chǔ)語法 356
7.2 awk條件判斷 374
7.3 awk數(shù)組與循環(huán) 379
7.4 awk函數(shù) 388
7.5 實戰(zhàn)案例:awk版網(wǎng)站日志分析 398
7.6 實戰(zhàn)案例:監(jiān)控網(wǎng)絡連接狀態(tài) 403
7.7 實戰(zhàn)案例:獲取SSH暴力破解攻擊黑名單列表 412
7.8 實戰(zhàn)案例:性能監(jiān)控腳本 418
7.9 實戰(zhàn)案例:數(shù)據(jù)庫監(jiān)控腳本 420
7.10 實戰(zhàn)案例:awk版網(wǎng)絡爬蟲 429