在IT產(chǎn)業(yè)鏈中開源的理念已成為絕大多數(shù)企業(yè)的共識(shí)。隨著開源技術(shù)的不斷進(jìn)步與創(chuàng)新,云計(jì)算也逐步深入到了每個(gè)互聯(lián)網(wǎng)企業(yè)的內(nèi)部。但是,隨之而來(lái)的便是管理成本的提高,大量的物理或者虛擬主機(jī)需要管理與維護(hù),如何能夠更好地實(shí)現(xiàn)自動(dòng)化運(yùn)維,成為企業(yè)需要迫切解決的問(wèn)題。行業(yè)中自動(dòng)化運(yùn)維的軟件很多,Puppet、Saltstack、Ansible等讓我們?cè)谠茣r(shí)代依然可以輕松管理和維護(hù)設(shè)備與業(yè)務(wù),然而像Ansible這樣的自動(dòng)化工具,雖然已經(jīng)內(nèi)置了很多模塊,但是在解決每個(gè)企業(yè)的個(gè)性化需求時(shí)還需要編寫自動(dòng)化腳本。本書將圍繞Linux系統(tǒng)中最常用的Shell腳本語(yǔ)言,講解如何通過(guò)Shell編寫自動(dòng)化、智能化腳本。全書以案例貫穿,對(duì)每個(gè)知識(shí)點(diǎn)都可以找到與之對(duì)應(yīng)的案例,完成本書中的每個(gè)案例對(duì)于未來(lái)在企業(yè)中的實(shí)際應(yīng)用極具意義。另外,在本書中配套有很多游戲案例,通過(guò)編寫游戲腳本可以極大地提升學(xué)習(xí)的樂(lè)趣。本書中的代碼可以在https://github.com/jacobproject/shell_scripts下載,現(xiàn)在的商業(yè)環(huán)境是一個(gè)充滿競(jìng)爭(zhēng)的環(huán)境,很多企業(yè)的業(yè)務(wù)量在不斷地增長(zhǎng),對(duì)服務(wù)質(zhì)量的要求也越來(lái)越高。特別是互聯(lián)網(wǎng)企業(yè)為了滿足客戶更高的需求,提升用戶使用體驗(yàn),IT部門需要維護(hù)的設(shè)備數(shù)量從早期的幾臺(tái),發(fā)展到了目前的數(shù)以萬(wàn)計(jì),如此龐大的服務(wù)器維護(hù)量,通常會(huì)讓IT管理人員頭疼不已。本書介紹的自動(dòng)化運(yùn)維內(nèi)容可以讓我們快速掌握大規(guī)模批量處理的簡(jiǎn)單方法。本書從基礎(chǔ)知識(shí)講到數(shù)據(jù)分析、數(shù)據(jù)過(guò)濾等高級(jí)應(yīng)用,適合Linux運(yùn)維人員、Shell編程愛(ài)好者閱讀,可作為L(zhǎng)inux運(yùn)維人員的一本優(yōu)秀的案頭書。
丁明一達(dá)內(nèi)集團(tuán)云計(jì)算教學(xué)研發(fā)總監(jiān)、開源技術(shù)推廣者;紅帽認(rèn)證架構(gòu)師(RHCA)、紅帽認(rèn)證高級(jí)講師(RHCI);曾任職于中國(guó)電信、鵬博士等多家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),對(duì)企業(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 各種引號(hào)的正確使用姿勢(shì) 24
1.6 千變?nèi)f化的變量 28
1.7 數(shù)據(jù)過(guò)濾與正則表達(dá)式 33
1.8 各式各樣的算術(shù)運(yùn)算 40
第2章 人工智能,很人工、很智能的腳本 46
2.1 智能化腳本的基礎(chǔ)之測(cè)試 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)案例:?jiǎn)畏种f語(yǔ)句 62
2.8 實(shí)戰(zhàn)案例:雙分支if語(yǔ)句 68
2.9 實(shí)戰(zhàn)案例:如何監(jiān)控HTTP服務(wù)狀態(tài) 72
2.10 實(shí)戰(zhàn)案例:多分支if語(yǔ)句 81
2.11 實(shí)戰(zhàn)案例:簡(jiǎn)單、高效的case語(yǔ)句 87
2.12 實(shí)戰(zhàn)案例:編寫Nginx啟動(dòng)腳本 92
2.13 揭秘模式匹配與通配符、擴(kuò)展通配符 94
2.14 Shell小游戲之石頭剪刀布 100
第3章 根本停不下來(lái)的循環(huán)和中斷控制 104
3.1 玩轉(zhuǎn)for循環(huán)語(yǔ)句 104
3.2 實(shí)戰(zhàn)案例:猴子吃香蕉的問(wè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)案例:如何通過(guò)read命令讀取文件中的數(shù)據(jù) 136
3.9 until和select循環(huán) 140
3.10 中斷與退出控制 143
3.11 Shell小游戲之機(jī)選雙色球 149
第4章 請(qǐng)開始你的表演,數(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章 一大波腳本技巧正向你走來(lái) 221
5.1 Shell八大擴(kuò)展功能之花括號(hào) 221
5.2 Shell八大擴(kuò)展功能之波浪號(hào) 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信號(hào)捕獲 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高級(jí)指令 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)案例:通過(guò)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章 不可思議的編程語(yǔ)言awk 356
7.1 awk基礎(chǔ)語(yǔ)法 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ù)庫(kù)監(jiān)控腳本 420
7.10 實(shí)戰(zhàn)案例:awk版網(wǎng)絡(luò)爬蟲 429