用指令碼來講一個技術生活的故事

jeanron100發表於2016-06-16
對於生活,用文字表達是一種非常好的方式,作為技術人,我決定使用一個指令碼來對映技術生活中的一些小故事,也是在今天突然想到的。
對的,你沒有看錯,就是下面這個命令。但凡接觸過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的。
突然我們發現竟然一夜回到解放前。這會不會是一個迴圈?


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2120319/,如需轉載,請註明出處,否則將追究法律責任。

相關文章