1. 程式人生 > >如何優雅的使用rm防止誤刪除指令碼

如何優雅的使用rm防止誤刪除指令碼

前言

下面的對話是來自運維派QQ群號:201777608


俗話說的好:
常在河邊走, 哪能不溼鞋。 身邊的例子很多,時刻提醒我們運維人員要建立明確、規範的標準化管理流程;提高運維效率、降低綜合成本;保障業務的連續性。

問題背景

若一不小心執行命令 rm -rf /,如果此時正好擁有root許可權,那麼後果將不堪設想。

解決方法

重定義 rm 命令以嫁接mv命令, 相當於給Linux系統定製了一個回收站。

###重定義rm命令###

#定義回收站目錄
trash_path=’~/.trash’

#判斷$trash_path 定義的檔案是否存在,如果不存在,那麼就建立$trash_path.
if [ ! -d $trash_path ]; then
mkdir -p $trash_path
fi

#定義別名:使用rm就呼叫trash
alias rm=trash

#使用rl就呼叫’ls ~/.trash’ 如果更改上面的回收站目錄這裡的目錄也需要修改
alias rl=’ls ~/.trash’

#使用unrm就呼叫restorefile
alias unrm=restorefile

#使用rmtrash就呼叫claearteash
alias rmtrash=cleartrash

#恢復檔案的函式
restorefile()
{
mv -i ~/.trash/[email protected] ./
}

#刪除檔案的函式
trash()
{
mv [email protected]

~/.trash/
}

#清空回收站的函式
cleartrash()
{
read -p “確定要清空回收站嗎?[y/n]” confirm
[ $confirm == ‘y’ ] || [ $confirm == ‘Y’ ] && /bin/rm -rf ~/.trash/*
}

最後將上述指令碼寫入 /etc/bashrc 並立即執行命令 source /etc/bashrc即刻生效。

示例

這個指令碼定義了幾個命令

    1. rl 就是查看回收站下的檔案

unrm 檔名或目錄 就是恢復到當前的路徑下

rmtrash 就是清空回收站,不過會友好提示。

執行rm 不糊刪除,其實就是使用mv 移動到我們指定的回收站

實在真的想刪除可以/bin/rm 來進行刪除

/bin/rm或者\rm 都可以臨時取消別名。

命令測試

[[email protected] ~]# touch chen

[[email protected] ~]# mkdir bao

[[email protected] ~]# ls
~ bao chen

[[email protected] ~]# rm -f chen

[[email protected] ~]# find ~ -name chen
/root/.trash/chen

[[email protected] ~]# ll /root/.trash/
-rw-r–r– 1 root root 0 4月 7 02:16 chen

[[email protected] ~]# echo “chenbaojia” >jia.txt

[[email protected] ~]# cat jia.txt
chenbaojia

[[email protected] ~]# rm -f jia.txt

[[email protected] ~]# ls
~ bao

[[email protected] ~]# ll /root/.trash/
總用量 4
-rw-r–r– 1 root root 0 4月 7 02:16 chen
-rw-r–r– 1 root root 11 4月 7 02:17 jia.txt

[[email protected] ~]# cat /root/.trash/jia.txt
chenbaojia

[[email protected] ~]# rm -fr bao/
mv:無效選項 — r
請嘗試執行”mv –help”來獲取更多資訊。

[[email protected] ~]# rm -r bao/
mv:無效選項 — r
請嘗試執行”mv –help”來獲取更多資訊。

[[email protected] ~]# rm -f bao/

[[email protected] ~]# ll /root/.trash/
drwxr-xr-x 2 root root 4096 4月 7 02:16 bao
-rw-r–r– 1 root root 0 4月 7 02:16 chen
-rw-r–r– 1 root root 11 4月 7 02:17 jia.txt

使用我們在使用者變數裡定義的命令別名 /etc/bashrc

#查看回收站下的檔案
[[email protected] ~]# rl
bao chen jia.txt

#恢復jia.txt 到當前目錄
[[email protected] ~]# unrm jia.txt

[[email protected] ~]# ls
~ anaconda-ks.cfg head install.log install.log.syslog jia.txt Package

[[email protected] ~]# cat jia.txt
chenbaojia

[[email protected] ~]# unrm bao

[[email protected] ~]# ls
~ bao jia.txt

[[email protected] ~]# ll /root/.trash/
-rw-r–r– 1 root root 0 4月 7 02:16 chen

[[email protected] ~]# source /etc/bashrc

#回收站
[[email protected] ~]# rmtrash
確定要清空回收站嗎?[y/n]y
[[email protected] ~]# ll /root/.tcshrc
-rw-r–r–. 1 root root 129 12月 4 2004 /root/.tcshrc

真想刪除可以使用/bin/rm 進行刪除 或者 \rm

後記

引用老男孩老師的一句話就是“未雨綢繆永遠比出了問題在處理要好的多,出了問題補救是沒辦法不得已的事,最差的是很多公司,沒有亡羊補牢,而是好了傷疤忘了疼,沒過多久問題又發生。”

因此,在工作中要儘量做到未雨綢繆,從源頭上減少故障的發生。其次,要做到亡羊補牢、舉一反三,事情出現一次就不能在出現第二次。當然,完善的備份和恢復策略也是需要做的。只有把這些結合起來,才能把我們運維的工作做的更好。

在日常的運維工作中,確實有很多緊急情況的出現,我們運維人員甚至一度都用“消防員”戲稱自己每天的工作。

這好似一個惡性迴圈,系統越卻弱,問題越多,緊急情況也越多,更加沒有時間考慮系統優化的問題,如此往復,我們運維人員只能充當“消防員”的角色,哪裡有火情,第一時間趕赴火場。

避免這種惡性迴圈的方法之一,就是在問題發生之前能夠提前主動修復,修復的問題越多,緊急情況也就越少。

“工作四象限”中,也就是把更多的精力放在那些重要但不緊急的事情上,有條不紊,價值才能能到提升。

END

感謝您的閱讀