1. 程式人生 > >Linux shell指令碼快速提升的祕訣

Linux shell指令碼快速提升的祕訣

Linux shell指令碼快速提升的祕訣

阿銘linux 51CTO 51CTO

微訊號

功能介紹 51CTO傳媒是專注於IT技術創新與發展的網際網路媒體平臺。51CTO傳媒就以“專注IT技術領域,打造中國領先的IT技術網路平臺”為宗旨。

9月29日

大家好,我是阿銘,從13年我開始做Linux運維培訓,直接或間接學過我教程或課程的朋友應該有數十萬人。大部分同學給我的反饋是,Linux shell是很難啃的一個知識板塊。

雖然,大家學的很仔細,shell相關的語法也全部掌握,但當拿到一個需求時,就是寫不出或寫不好一個完美的shell指令碼。

這個現象很正常,舉個例子,在金庸的武俠小說裡,武功蓋世祕籍有很多(如,降龍十八掌),對於一個普通人來講,就算各個招式都能打的滾瓜爛熟,然而並沒有什麼卵用,因為他沒有任何的內力。

而我們這個shell指令碼其實就是一門“蓋世絕學”,但你在沒有修煉“內功”的情況下,shell知識點無論你學的多麼好,依然不能寫出好的程式碼來。

這裡所謂的“內功”就是經驗。我們經常聽做開發的朋友講,沒寫夠10萬行程式碼就不合格,有的企業招開發人員,也比較在意他寫過多少行程式碼,一個開發人員寫過的程式碼越多,說明他的經驗越豐富。

我們寫shell指令碼不也是寫程式碼嗎?記得,我剛做運維那年,幾乎每天都在寫shell指令碼,簡單的兩三行,複雜的上百行,各種各樣的小需求,感覺僅僅一兩個月,我的shell指令碼能力有了明顯的提升。

因此,我上線了51CTO專欄《20天精通Linux Shell指令碼》

文末優惠!實際工作場景的shell指令碼案例展開講解,它們不僅涵蓋了shell指令碼常見的語法、思路以及技巧,而且還會擴充套件一些Linux相關的知識。希望每個朋友能夠耐心讀完每一個案例,並且一定要動手寫一寫,這樣你才會真正學到其精髓。

20個案例的核心內容是什麼?

案例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實戰經驗!