如何優雅地使用 rm 防止誤刪除?

2021-09-08 07:39:27 字數 2219 閱讀 9094

it 界的有乙個老梗,一次某論壇的資料庫管理員抱怨自己老闆一直虐待他,結果他一氣之下就刪庫跑路了......

於是...

據新華社北京 8 月 20 日電 ,北京一軟體工程師徐某離職後因公司未能如期結清工資,便利用其在所設計的**中安插的後門檔案將**源**全部刪除。記者 20 日從北京市豐台區人民法院獲悉,徐某破壞計算機資訊系統罪成立,獲刑五年。

我在伺服器維護的時候不小心執行了rm -rf命令......現在整台伺服器被我刪光了腫麼辦???

好吧,現在先來介紹一下rm。

rm -rf 的威力

rm是 linux 系統下刪除檔案的命令,-r代表刪除這個下面的一切,一切的一切那種的一切。f表示不需要使用者確認,直接執行。

通常這個命令都是指定資料夾用的,比如

rm -rf /home/test/

就是刪除 /home/test/ 這個資料夾下面的所有東西。

但是如果後面的資料夾路徑沒有加對,

rm -rf /在伺服器上也就意味著...

俗話說的好:常在河邊走, 哪能不濕鞋。 那該怎麼避免這種悲劇的發生呢?

如何避免再次跑路?

乙個方案就是重定向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/$@ ./

# 刪除檔案的函式

trash()

mv $@ ~/.trash/

# 清空**站的函式

cleartrash()

read -p 確定要清空**站嗎?[y/n] confirm

[ $confirm == 'y' ] || [ $confirm == 'y' ] /bin/rm -rf ~/.trash/*

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

使用這個指令碼定義了幾個命令:

rl:檢視**站下的檔案

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

rmtrash:清空**站,不過會友好提示。執行 rm 不會真正刪除,而是使用 mv 移動到我們指定的**站。

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

另外,需要注意的時,之前rm指令的一些引數可能不再使用,因為rm現在其實是mv了。

# touch hoxistest

# touch 1

# mkdir haha

# ls

1 haha hoxistest

# rm 1

# ls

haha hoxistest

# 檢視**站檔案

# rl

1 myftp1

# 恢復已刪除檔案

# unrm 1

[root@ceshi-clm-10-254-4-48 test]# ls

1 haha hoxistest

# rm haha/

# rm hoxistest

# rl

haha hoxistest

# 情況**站

# rmtrash

確定要清空**站嗎?[y/n]y

# rl

效果看著應該還可以吧。

例行總結

看著是還可以,但是也有一些問題,比如刪除檔案不能重名,若重名了會提示你是否進行覆蓋。那就需要再進行特殊處理了,比如刪除時加個時間戳什麼的,有興趣的動手實現下吧。

如何優雅地使用 rm 防止誤刪除?

it 界的有乙個老梗,一次某論壇的資料庫管理員抱怨自己老闆一直虐待他,結果他一氣之下就刪庫跑路了 於是 據新華社北京 8 月 20 日電 北京一軟體工程師徐某離職後因公司未能如期結清工資,便利用其在所設計的 中安插的後門檔案將 源 全部刪除。記者 20 日從北京市豐台區人民法院獲悉,徐某破壞計算機資...

修改rm 防止誤刪除

最近rm f 次數太多了,為此付出了血的代價。為防止下次再出現這種情況,修改了一些配置,僅供讀者參考。首先,搞個 站 mkdir trash 或者直接用系統 站 ln s local share trash files trash 推薦後者 接著,修改 bashrc檔案。mkdir p trash ...

替換rm命令防止誤刪除

1 新建乙個垃圾桶目錄 mkdir tmp trash chmod 777 tmp trash 2 新建自定義刪除指令碼 vim usr bin remove.sh bin bash trash dir tmp trash trash mkdir p trash dir rmpath 遍歷rm命令引...