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