rm-protection|防误删|怪轮子

请输入链接描述
rm-protection
GitLab 的惨剧想必大家都知道了:rm -rf了生产服务器上的数据库。常在河边走,哪能不湿鞋。即便是再认真,总是有失误的风险。

现在网上已经流行了数种方法: rm -i , trash-cli 等等。rm -i 显然并不实用:想必没人能忍受每个文件都被问一次?况且就 GitLab 的情况,rm -i并不能起保护作用。trash-cli相当于启用了回收站,但是这又会带来一些小麻烦(比如在磁盘被 log 挤爆的情况下)。

rm-protection 则采取了一种全新的思路:由用户自行设置一个安全问题来保护文件,在删除时询问相应的问题。想象一下,若 YP 在执行删除时突然被问一句:「 Which server are you on? 」,还会出现这样的惨剧吗?

快速开始

rm-protection 几乎完全兼容rm,因此可以作为 alias 使用。

  1. 从 PyPi 中安装并为 rm-p 创建 alias 。
  2. pip install rm-protection & alias rm=”rm-p”
  3. 使用 protect 命令保护你想要保护的文件或者文件夹。
  4. Happy rm-ing!

原理

rm-protection 获取 arguments 后,会逐一检测是否存在 ..rm-protection 文件。若存在,则询问用户,否则将不再传递这个 argument 。安全的 argument 将被传递给 rm 进行删除。

栗子:

Basic usage

它也能保护批量的递归删除:

Recursive protection

与其他工具的对比

参见 GitHub 中的表格

未来?

若是这个工具能被推广使用,团队协作之间可以大有功用。在软件、文件分发时,分发者可以提前保护文件防止误删。在开发和部署时也可提前保护文件,防止在生产环境中的误删。

贡献

Github 欢迎 PR, 提 Issue 或者 Star :)

FAQ

使用栗子?

rm -rf database
「你删的是啥数据库」 
「测试」 
「滚!」

简单问题复杂化?

在特定的场合复杂化我觉得是有益的,比如 GitHub 会在你删除 repo 的时候让你确认 repo 的名字。 事实上 rm-protection 并不影响日常操作。只有当遇到你特定保护的文件时才会提示并提供尽可能的保护。

rm -i 或者 alias rm=”mv” 又或者 trash,下一题?

每个文件都问,你受得了(当然取决于个人了,我是受不了)?那么你听说过「狼来了」的故事吗?yes | rm -i trash 类的方案并不能从源头上解决问题,当你想释放空间的时候,很容易随手就清空了垃圾桶。

已经有 XXX 了,好处在哪?

**就我所知除了 Safe-rm 之外,没有类似机制的轮子出现。你也可以看看这里与其他机制的对比:**https://github.com/alanzchen/rm-protection/blob/master/README.md#comparison-with-alternative-methods

我去 Python 3? 你搞笑?

嘛确实不太合适(逃。其实我完全不 care 到底有没有人用我的 implementation,唯一想做的是向社区提供这么一个机制的提案。

若是社区能接受,这轮子很快可以被移植到任何语言或者任何平台,甚至被包括在 GNU coreutils 里。唯一需要统一的是,是否能够接受 .rm-protection 这样的保护机制。