如何優雅地使用 rm 防止誤刪除?
來自專欄編程日常4 人贊了文章
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_pathfi# 定義別名:使用 rm 就調用 trashalias rm=trash# 使用 rl 就調用 ls ~/.trash # 如果更改上面的回收站目錄這裡的目錄也需要修改alias rl=ls ~/.trash# 使用 unrm 就調用 restorefile,需要在刪除目錄的父目錄下執行alias unrm=restorefile# 使用 rmtrash 就調用 claearteashalias 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# ls1 haha hoxistest# rm 1# lshaha hoxistest# 查看回收站文件# rl1 myftp1# 恢復已刪除文件# unrm 1[root@CESHI-CLM-10-254-4-48 test]# ls1 haha hoxistest# rm haha/# rm hoxistest# rlhaha hoxistest# 情況回收站# rmtrash確定要清空回收站嗎?[y/n]y# rl
效果看著應該還可以吧。
例行總結
看著是還可以,但是也有一些問題,比如刪除文件不能重名,若重名了會提示你是否進行覆蓋。那就需要再進行特殊處理了,比如刪除時加個時間戳什麼的,有興趣的動手實現下吧。
via:https://www.cloudbility.com/club/6981.html
推薦閱讀:
※如何強制用戶在下次登錄 Linux 時更改密碼
※自學shell之find
※WSL 使用指南——05 自定義桌面環境
※linux擴展正則表達式
※VNC Viewer輕鬆連接遠程CentOS6.8桌面
TAG:Linux |