制作一个不受“rm -rf”保护的目录

Dil*_*war 9 permissions directory rm

我只是在执行rm -rf B. 在我意识到我做了什么之前,一切都结束了。现在吸取了教训,我希望让我的一些文件夹白痴,以避免下次我做类似的事情并想自杀。

我能想到的一种方法是编写一个 bash 函数并将其别名为rm. 此函数将在每个子文件夹中查找隐藏文件,例如.dontdelete. 找到后,它会问我是否真的要继续。我不能使写保护,因为有一个进程不断写入此文件夹。有没有更好的方法来做到这一点?

slm*_*slm 14

在研究您的问题时,我遇到了这种可能在未来对您有所帮助的技术。

您显然可以像这样触摸目录中的文件:

touch -- -i
Run Code Online (Sandbox Code Playgroud)

现在,当您rm -fr *在存在 的目录中运行该命令时,-i您将看到来自rm.

$ ls
file1  file2  file3  file4  file5  -i

$ rm -fr *
rm: remove regular empty file `file1'? n
rm: remove regular empty file `file2'? n
rm: remove regular empty file `file3'? n
rm: remove regular empty file `file4'? n
rm: remove regular empty file `file5'? n
Run Code Online (Sandbox Code Playgroud)

只需为rmto always do留一个别名就可以实现同样的目的rm -i。这会很烦人。我经常看到的做法是将这个别名放在适当的位置,然后在您真的想在没有提示的情况下删除时禁用它。

alias rm='rm -i'
Run Code Online (Sandbox Code Playgroud)

现在在目录中,你会像这样打招呼:

$ ls
file1  file2  file3  file4  file5

$ rm -r *
rm: remove regular empty file `file1'?
Run Code Online (Sandbox Code Playgroud)

要覆盖别名:

$ \rm -r *
Run Code Online (Sandbox Code Playgroud)

rm -fr然而,这仍然不能阻止。但它确实为您提供了一些保护。

参考


mic*_*has 5

多种可能性:

  • alias rm='rm -i'- rm 会问 - 除非你指定-f...
  • chmod -w dir - 直接保护该目录中的文件。
  • chattr +i 如果你是认真的
  • 围绕 rm 编写自己的包装器
  • 等等...

但更好的方法可能是进行良好的备份并将重要数据保存在某种版本控制中(如git),这也带来了许多其他优势。