如何防止特定文件夹的 rm -rf 错误?

amy*_*sin 8 administration rm

我认为这里的很多人都错误地输入rm -rf了错误的目录,希望它不会造成巨大的损失。有什么办法可以防止用户做类似的unix 恐怖故事?有人提到(在上一个链接的评论部分)

...我很确定现在每个使用 unix 的 unix 课程或公司都会设置 rm -fr 来禁用试图运行它的人的帐户或阻止他们运行它......

在任何当前的 Unix 或 Linux 发行版中是否有任何实现?即使是系统管理员(具有 root 访问权限),防止该错误的常见做法是什么?

似乎在 Solaris(自 2005 年)和 GNU(自 2006 年)中对根目录( /)有一些保护。无论如何也要对其他一些文件夹实施相同的保护方式吗??

为了更清晰,我没有询问有关使用的一般建议rm(并且我已经更新了标题以表明更多),我想要更像根文件夹保护的东西:为了rm -rf /您必须传递特定参数:rm -rf --no-preserve-root /.. 自定义目录集是否有类似的实现?或者我可以指定除了/preserve-root选项保护的文件吗?

Gil*_*il' 17

为避免出错rm -rf请勿键入rm -rf

如果您需要删除目录树,我推荐以下工作流程:

  • 如有必要,请更改为要删除的目录的父目录。
  • mv directory-to-delete DELETE
  • 探索DELETE并检查它确实是您要删除的内容
  • rm -rf DELETE

切勿rm -rf使用DELETE.以外的参数调用。分几个阶段进行删除让您有机会验证您没有删除错误的内容,无论是因为打字错误(如 inrm -rf /foo /bar而不是rm -rf /foo/bar)还是因为脑残(哎呀,不,我打算删除foo.old并保留foo.new) .

如果您的问题是您不能相信其他人不会输入rm -rf,请考虑删除他们的管理员权限。可能出错的还有很多rm


始终进行备份

定期验证您的备份是否有效并且是最新的。

将无法从某处轻松下载的所有内容置于版本控制之下。


使用基本的 unix 系统,如果您真的想让某些目录不可删除rm,请用rm拒绝某些参数的自定义脚本替换(或更好的阴影)。或由hg rm.

一些 Unix 变体提供了更多的可能性。

  • 在 OSX 上,您可以在目录上设置访问控制列表,防止删除其中的文件和子目录,而不会阻止创建新条目或修改现有条目:(chmod +a 'group:everyone deny delete_child' somedir这不会阻止删除子目录中的文件:如果如果需要,也可以在子目录上设置 ACL)。
  • 在 Linux 上,您可以在 SELinux、AppArmor 或其他安全框架中设置禁止rm修改某些目录的规则。

  • @amyassin 实际上,我收回这个。在传统的 Linux 上没有更多的东西,但是你可以设置 Apparmor/SELinux/... 规则来阻止 `rm` 访问某些目录。另外,由于您的问题不仅仅是关于 Linux,我应该提到 OSX,它有点像您想要的东西。 (2认同)

qbi*_*qbi 5

如果您使用的rm *是 zsh,则可以设置选项rmstarwait

setopt rmstarwait
Run Code Online (Sandbox Code Playgroud)

现在,当您使用以下命令时,shell 会发出警告*

> zsh -f
> setopt rmstarwait
> touch a b c
> rm *
zsh: sure you want to delete all the files in /home/unixuser [yn]? _
Run Code Online (Sandbox Code Playgroud)

当您拒绝它 ( n) 时,什么也不会发生。否则所有文件都将被删除。