1. 程式人生 > 其它 >用指令碼來講一個技術生活的故事 (r9筆記第32天)

用指令碼來講一個技術生活的故事 (r9筆記第32天)

對於生活,用文字表達是一種非常好的方式,作為技術人,我決定使用一個指令碼來對映技術生活中的一些小故事,也是在今天突然想到的。 對的,你沒有看錯,就是下面這個命令。但凡接觸過Linux系統,這個命令還是很熟悉的,不熟悉也沒有關係,就是檢視伺服器的磁碟空間。 df -h 我們像對待藝術品一樣圍著這個命令,認真的看看它,為什麼叫df,想必是Disk Filesystem的意思吧,而為什麼是-h選項,你還真想對了,其實-k -g等選項 -a 顯示所有檔案系統的磁碟使用情況,包括0塊(block)的檔案系統,如/proc檔案系統。 -k 以k位元組為單位顯示。 -i 顯示i節點資訊,而不是磁碟塊。 -t 顯示各指定型別的檔案系統的磁碟空間使用情況。 -x 列出不是某一指定型別檔案系統的磁碟空間使用情況(與t選項相反)。 -T 顯示檔案系統型別。 當然我們的重點不是這裡,我們的工作需要檢視伺服器的磁碟空間情況,所以我們登入伺服器,然後在伺服器段執行這個命令就可以看到了。 後來,網路進行了隔離,我們不能直接連線到這個伺服器了,我們有了中控機,堡壘機,需要輸入token,動態口令等。登入之後我們才有許可權連線到伺服器,當然我們使用的還是df -h的命令。 每天登入到伺服器多次,幾十次,上百次,發現真是一件體力活,能不能簡單一些,我們發現可以使用ssh來簡單實現,ssh登入後,直接傳送df -h的命令即可。 就像下面的形式: ssh 10.127.133.45 "df -h"

一下子感覺我們的生活就解放了很多,配置了網路信任,我們不用每次都苦逼的輸入密碼,每次輸入各種火星文密碼也夠折騰的。原來生活可以這麼簡單。 後來工作任務慢慢重了,交到手頭的伺服器多了,比如我們就說有2臺。這下好了,我們只需要對指令碼做一些簡單的改進就可以了,比如下面的方式。 ssh 10.127.133.45 "df -h" ssh 10.127.133.46 "df -h" 這樣確實能夠實現我們的需求,而且本身來說也沒有什麼問題,如果嚴格來看,就是可以重構一下,硬編碼的痕跡太重了。這個指令碼讓人看到還不得笑話。 於是我們改進一下: 我們寫了一個shell指令碼如下,當然還用到了function function ssh_df_h { ssh $1 "df -h" } ssh_df_h 10.127.133.45 ssh_df_h 10.127.133.46
這樣來看這個功能就簡化了一些,說實話簡化了嗎?邏輯上看起來是簡化了,好吧,這個也不是重點,當然看起來這個指令碼還不錯,已經做了解耦和。 後來發現指令碼的功能是不是還能夠改進,如果我要做其它的操作是不是還要寫一個差不多的指令碼,重複造輪子的活看起來也是在太沒有技術含量了。 我們繼續改進,繼續做了解耦和。 function ssh_cmd { ssh $1 "$2" } ssh_cmd 10.127.133.45 "df -h" ssh_cmd 10.127.133.46 "df -h" 這個時候指令碼看起來更加靈活了。你也對伺服器列表做了一層定製,讓這個指令碼看起來更加高大上。看起來工作還是挺完美的了。我們自己用了下感覺還不錯,然後就推廣到更多的部門去使用。這個對我們也是蠻有成就感的。 然後沒幾天就出了一個問題,究其原因就是指令碼的呼叫方式如下: ssh_cmd 10.127.133.45 "rm xxxx"
啊,怎麼運行了一個刪除命令,這個時候伺服器上的檔案都被刪了。 然後指令碼完全禁用,調整了網路,這個時候我們在伺服器上只df -h都很難了,而且設定了更多更加嚴格的安全策略,可以堪稱史上最xxxx的。 突然我們發現竟然一夜回到解放前。這會不會是一個迴圈?