在 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-rmgithub.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.comPegasusWang:完全不用鼠标写代码!你信么?[视频]zhuanlan.zhihu.com书籍推荐:
linux 程序员键盘: