你們好,我是阿銘,從13年我開始作Linux運維培訓,直接或間接學過我教程或課程的朋友應該有數十萬人。大部分同窗給個人反饋是,Linux shell是很難啃的一個知識板塊。雖然,你們學的很仔細,shell相關的語法也所有掌握,但當拿到一個需求時,就是寫不出或寫很差一個完美的shell腳本。php
這個現象很正常,舉個例子,在金庸的武俠小說裏,武功蓋世祕籍有不少(如,降龍十八掌),對於一個普通人來說,就算各個招式都能打的倒背如流,然而並無什麼卵用,由於他沒有任何的內力。而咱們這個shell腳本其實就是一門「蓋世絕學」,但你在沒有修煉「內功」的狀況下,shell知識點不管你學的多麼好,依然不能寫出好的代碼來。java
這裏所謂的「內功」就是經驗。咱們常常聽作開發的朋友講,沒寫夠10萬行代碼就不合格,有的企業招開發人員,也比較在乎他寫過多少行代碼,一個開發人員寫過的代碼越多,說明他的經驗越豐富。咱們寫shell腳本不也是寫代碼嗎?記得,我剛作運維那年,幾乎天天都在寫shell腳本,簡單的兩三行,複雜的上百行,各類各樣的小需求,感受僅僅一兩個月,個人shell腳本能力有了明顯的提高。node
所以,我準備出一個專欄《20天精通Linux Shell腳本》(拖到底部有彩蛋!),以20個實際工做場景的shell腳本案例展開講解,它們不只涵蓋了shell腳本常見的語法、思路以及技巧,並且還會擴展一些Linux相關的知識。但願訂閱本專欄的朋友可以耐心讀完每個案例,而且必定要動手寫一寫,這樣你纔會真正學到其精髓。程序員
20個案例的核心內容是什麼?web
下面是對這20個案例的簡單介紹。shell
案例1,用shell腳本實現備份MySQL數據庫,數據庫的重要性不言而喻,因此作好數據備份是一個合格運維工程師的必備。數據庫
案例2,監控一臺Nginx服務器的狀態碼是否有502狀態碼,502在Nginx服務器上廣泛存在,它極大影響了用戶體驗,一旦出現502問題就須要第一時間發現並找到問題所在。小程序
案例3,批量添加100個用戶,並給用戶設置隨機密碼,密碼設定後還須要給它存放到一個日誌文件裏,方便查詢。服務器
案例4,用shell腳本自動封訪問量異常的IP,並每隔一段時間把再也不發起請求的IP給解封,這個功能彷佛在web服務器上很實用。多線程
案例5,用腳本監控本機的磁盤使用狀況,包括使用空間以及inode使用量,磁盤空間一旦寫滿,會影響系統正常運行,有必要實時檢查磁盤使用狀況,一旦達到設定閾值要第一時間通知到咱們。
案例6,檢測兩臺機器同一個目錄下的文件是否有差別,在負載均衡集羣中一般是多臺服務器上跑了一樣的網站,因此須要保證文件內容是一致的。
案例7,用shell腳本監控MySQL主從架構,看主從的狀態是不是正常的,主從不正常就會致使數據不一樣步,數據不一致將嚴重影響業務可用性。
案例8,用shell腳本編寫一個運維工具,當運行它的時候,會列出一個命令列表,用戶只須要按對應數字就能夠運行列表中的命令。
案例9,用shell腳本監控本機的網卡流量,當網卡流量爲0時,須要重啓網卡。
案例10,用shell腳本檢測指定域名是否快到期,以避免域名到期沒有續費被回收。
案例11,給定一我的員列表,用shell腳本把這些人員分組,好比指定小組的個數,而後腳本能夠自動地將這些人員隨機地分紅若干個小組。
案例12,當備份的數據庫量很大時,若是使用傳統的循環遍歷方法會花費很長的時間,這是由於shell腳本默認是單線程的,而本腳本須要實現多線程,這樣就能夠提高備份數據庫的速度。
案例13,在使用CDN的狀況下,各地用戶訪問到的節點是不一樣的,但若是某個節點有問題時,會影響到部分用戶訪問,因此須要寫一個shell腳原本監測全部節點是否正常。
案例14,一臺服務器上運行着Apache+PHP+MySQL服務,上面跑着不少網站,每增長一個網站都須要修改httpd.conf增長一個虛擬主機,而且須要在MySQL數據庫裏增長一個庫,並增長一個MySQL的用戶。若是是手動操做這些步驟仍是比較繁瑣的,該shell腳本能夠批量實現這些操做。
案例15,在工做中會遇到各類各樣xml格式的文件,有時的需求是,須要把xml文件裏面的內容進行格式化輸出。
案例16,生產環境中,每每有多臺Tomcat服務器在運行,有時須要重啓Tomcat服務,若是手動執行則須要登陸每一臺機器,很是麻煩,那麼編寫一個shell腳本自動登陸遠程機器並重啓Tomcat服務就頗有必要。
案例17,在咱們的服務器上跑着各類各樣的服務,因此就有了不少日誌,日誌切割能夠用shell腳本實現,可是切割完的老日誌,隨着時間的推移會愈來愈多,那麼如何把這些老日誌歸檔就須要寫一個腳原本按照預設規則來完成。
案例18,一臺阿里雲的ECS裏運行着Nginx+PHP-FPM+MySQL服務,近期收到IO使用率很高的告警,可是這個問題是一瞬間,時間很短,每次登陸這臺機器的時候發現IO並無什麼問題,因此寫一個腳本監控磁盤IO的使用率,當有問題時須要近一步排查具體的問題。
案例19,一臺Tomcat服務器上運行着多個實例,而每個實例都有記錄日誌,當遇到問題或者有什麼特殊需求時,就須要挨個查看這些實例的日誌,爲了提高效率因此須要編寫一個定製化的shell腳本。
案例20,雖然目前已經有了各類各樣的工具能夠實現代碼部署,但在早期並無這樣方便好用的工具,固然一些小公司也用不着這樣的工具,而是用shell腳原本實現的。
學完這20個案例你將收穫什麼?
無論你是0基礎的Linux初學者,仍是入行幾年的老鳥,閱讀完這20個案例,都會讓你從中得到撰寫shell腳本的技巧、思想以及Linux相關的技能。對於想要快速提高本身shell腳本能力的朋友來講,這20個案例就像一劑良藥,它們會助你在運維工做中越戰越猛!
另外這個專欄對於java程序員以及php程序員也是有極大的幫助,我相信當你學完這20個實戰案例並認真吸取其精華後,你就能夠擁有至少兩年的Linux shell實戰經驗!
專欄地址:《20天精通Linux Shell腳本》
彩蛋
安卓小程序端「51CTO訂閱專欄」,專欄訂閱優惠¥12