我认为这里的很多人都错误地输入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 DELETEDELETE并检查它确实是您要删除的内容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 变体提供了更多的可能性。
chmod +a 'group:everyone deny delete_child' somedir这不会阻止删除子目录中的文件:如果如果需要,也可以在子目录上设置 ACL)。rm修改某些目录的规则。如果您使用的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) 时,什么也不会发生。否则所有文件都将被删除。