如何防止根目錄被刪?

2018-05-08 15:59 更新

周末誤刪根目錄《就這樣把根目錄刪了?。。 ?,引起了廣泛的討論:

(1)部分朋友表達(dá)了同情

(2)部分朋友建議買機票跑路

(3)部分朋友分享了類似的悲劇(例如:多一個空格)

rm -rf / home/work/logs/

(4)大部分朋友分享了避免類似悲劇的經(jīng)驗,今天將大伙的經(jīng)驗進行一個匯總,分享給大家,希望“誤刪根目錄”的事情永遠(yuǎn)不再出現(xiàn)


一、悲劇回顧

執(zhí)行了一個清理日志的腳本,大致的邏輯是:

...
cd ${log_path}
rm -rf *
...

看上去沒有任何問題,進入到日志目錄,然后把日志都刪除。但是,當(dāng)目錄不存在時,悲劇就發(fā)生了

二、大伙建議

【命令替換】

點贊數(shù)最多的朋友“39度的風(fēng)”建議:

生產(chǎn)環(huán)境把rm -rf 命令替換為mv,再寫個定時shell定期清理,以模擬“回收站”功能


【收攏權(quán)限】

這個方案建議的人數(shù)最多

帳號權(quán)限的分離,線上分配work帳號,只能夠刪除/home/work/logs/目錄,無法刪除根目錄。


【使用&&】

有部分朋友建議,使用&&

cd ${log_path}

rm -rf *

合并成一個語句

cd ${log_path} && rm -rf *

當(dāng)前半句執(zhí)行失敗的時候,后半句不再執(zhí)行。


【不使用cd】

對于

cd ${log_path}

rm -rf *

直接改為

rm -rf ${log_path}

不是cd到目錄下再執(zhí)行

這個方案個人感覺對于這個case可行,但不太通用,總有需要cd的場景吧。


【判斷目錄是否存在】

制定編碼規(guī)范,對目錄進行操作之前,要先判斷目錄是否存在

確實,可是靠人的自覺來保證規(guī)范的執(zhí)行,總感覺有些不太靠譜。


【單元測試】

和制定編碼規(guī)范類似,自測貌似比較難測出來,根據(jù)經(jīng)驗:rd往往以自己編寫代碼的思路和邏輯編寫自測用例,來證明自己代碼的正確性。


【使用Python,避免使用shell】

這… 

貌似不太通用,技術(shù)討論的第一大前提“不要有語言之爭”(技術(shù)討論的第二大前提“不要討論哪個編輯器好用”)。


三、其他悲劇

除了部分朋友反饋也刪除過根目錄,還有朋友提到:

(1)刪除過es數(shù)據(jù)

(2)刪除過生產(chǎn)數(shù)據(jù)庫

(3)刪除過home目錄

(4)誤格式化過硬盤

還有朋友提到了攜程之前的線上事故,我們都放下吃瓜看笑話的心態(tài),別人還能夠在十幾個小時故障恢復(fù),我們問自己一句,“假如我們線上20臺服務(wù)器全被干掉了”,我們能在十幾個小時恢復(fù)么?

后續(xù)和大家聊聊故障的快速恢復(fù)



歡迎加入我的社群或關(guān)注公眾號“架構(gòu)師之路”進行討論。

架構(gòu)師之路二維碼

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號