
在 linux 上,使用 rm 是一件非常危險的事情(最近又有朋友遇到了我才想起了寫這篇文章),如果不幸手殘執行了 rm -rf 刪除了重要文件,建議你準備收拾包袱跑路吧。
既然 rm 刪除操作非常危險,恢復數據又很困難(甚至某些場景無法恢復),那有沒有工具可以像 windows 下或者 macos 下的垃圾桶呢, 刪除之后放到垃圾桶里,如果發現誤刪了直接去垃圾桶恢復就好啦。這一次介紹我在 macos 和 linux server(centos) 上常用的安全刪除工具,有了它們,老板就再也不用擔心我刪庫跑路啦。( 評論區有人列舉了一些不建議使用的理由,其實我個人一般只在自己的 mac 和開發機使用,不建議修改線上機器,每種工具都有使用場景,請自行斟酌使用)
Macos rmtrash
首先你要安裝 homebrew, 如果你用的 macOS 還沒裝 brew 那就太可惜了,一個非常方便的包管理工具。 homebrew 作者就是那個"大名鼎鼎"的 Max Howell, 因為應聘 google 白板編程沒有寫出來翻轉二叉樹被拒,后來去了蘋果公司的工程師。
brew install rmtrash
一句話就可以安裝完成了,然后呢在你的 bashrc 或者 zshrc 里邊加個 alias 就可以了。
alias rm='rmtrash'
這樣你使用 rm 直接刪除的文件就會放到你的用戶 .Trash 隱藏文件夾里邊,如果誤刪了可以去這里恢復即可。 rmtrash 可以直接刪除文件夾,所以不需要 -r 參數了。
我們可以做一個測試,隨便找一個文件夾建立一個文件,然后 rm 刪除一下試試,比如:
# 進入用戶主目錄,創建一個文件"對象",然后 rm 刪除看看
# 之后開你的垃圾箱或者 cd ~/.Trash 里邊就可以找到了。其實 macos 下刪除文件也是放到這里
cd
touch 對象
rm 對象
Linux/MacOS 通用
如果是 linux 用戶,可以使用 safe-rm,筆者在自己的開發機(centos)上就是用的它。 這個是 github 地址
https://github.com/kaelzhang/shell-safe-rm?github.com直接 clone 安裝:
git clone https://github.com/kaelzhang/shell-safe-rm ~/.shell-safe-rm
# alias 加入到你的 bashrc or zshrc 里邊,默認也是 .Trash(mac) 或者 linux "$HOME/.local/share/Trash/files"
# 如果你想修改默認垃圾桶的路徑,直接使用 vim 之類的編輯器修改這個 rm.sh 文件開頭的默認路徑就可以了
alias rm='~/.shell-safe-rm/bin/rm.sh'
或者如果你有使用過 nodejs 也可以使用 npm 安裝(筆者使用的這種方式)
npm install -g safe-rm;
alias rm='safe-rm'
同樣可以做個簡單的測試:
# 進入用戶主目錄,創建一個文件"痛苦的回憶",然后 rm 刪除看看
# 之后 cd ~/.Trash 里邊就可以找到了
cd
touch 痛苦的回憶
rm 痛苦的回憶
卸載:
# First remove the alias line from your ~/.bashrc file, then
npm uninstall -g safe-rm
# Or
make && sudo make uninstall
# Or
sudo sh uninstall.sh
如何恢復文件
恢復文件比較簡單,你可以直接進入 .Trash (你設置的文件夾)然后直接 mv 文件到你想恢復的地方就可以了(注意別同名覆蓋了)
同名沖突問題kaelzhang/shell-safe-rm 同名沖突問題
好了,大功告成。這里你就可以放心刪除文件了,不過你可能在想,如果刪除的文件名稱相同沖突了怎么辦。我自己測試了一下, rmtrash 會在被刪除的同名文件加上 “Copy” 后綴,而 safe-rm 會加上時間后綴,所以不用擔心垃圾箱里的文件會同名覆蓋掉。 當然如果長期不用的話可以去 macOS 的垃圾桶點擊清理(實際上macOS垃圾桶就是放到的.Trash),或者 unalias 一下然后刪除。
小結
對于一些危險操作,還是盡量防患于未然。筆者當初也感覺不會手殘,但是最終還是被打臉,誤刪了文件給自己造成了麻煩。 希望這倆工具對大家有幫助,再也不用擔心誤刪跑路啦。如果有更好的工具歡迎評論區留言。
近期文章:
PegasusWang:程序員雙十一剁手指南?zhuanlan.zhihu.com

書籍推薦:
linux 程序員鍵盤: