我认为这里的很多人都错误地“rm -rf
编辑了错误的目录,希望它不会造成巨大的损害。有什么方法可以阻止用户做类似的事情吗?”UNIX恐怖故事??有人提到(评论区上一个链接) 那
...我很确定现在每个unix课程或使用unix的公司都会设置 rm -fr 来禁用试图运行它的人的帐户或阻止他们运行它...
在当前的 Unix 或 Linux 发行版中是否有任何实现?即使是系统管理员(具有 root 访问权限),防止该错误的常见做法是什么?
似乎有一些根目录保护( /
) 在 Solaris(自 2005 年起)和 GNU(自 2006 年起)中。无论如何,是否也可以对其他一些文件夹实施相同的保护方式?
为了更清楚起见,我并不是询问有关rm
使用的一般建议(并且我已经更新了标题以表明更多),我想要更像根文件夹保护的东西:为了rm -rf /
您必须传递特定参数:rm -rf --no-preserve-root /
.. 自定义目录集是否有类似的实现?或者我可以指定除受/
保护之外的文件吗保留根选项?
答案1
为避免误会rm -rf
,不要输入rm -rf
。
如果您需要删除目录树,我推荐以下工作流程:
- 如有必要,请更改为要删除的目录的父目录。
mv directory-to-delete DELETE
- 探索
DELETE
并检查它是否确实是您要删除的内容 rm -rf DELETE
切勿rm -rf
使用除 之外的参数进行调用DELETE
。分几个阶段进行删除可以让您有机会验证是否删除了错误的内容,无论是由于拼写错误(如而rm -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
修改某些目录。
答案2
如果您正在使用rm *
zsh,您可以设置选项rmstarwait
:
setopt rmstarwait
现在,当您使用以下命令时,shell 会发出警告*
:
> zsh -f
> setopt rmstarwait
> touch a b c
> rm *
zsh: sure you want to delete all the files in /home/unixuser [yn]? _
当您拒绝它(n
)时,什么也不会发生。否则所有文件将被删除。
答案3
如果你了解C编程语言,我认为可以重写rm源代码并为内核做一些补丁。我在一台服务器上看到了这一点,并且无法删除一些重要目录,当您输入“rm -rf / direcotyr”时,它会向系统管理员发送电子邮件。
答案4
为了防止rm -rf *
目录中出现意外情况,请在该目录中创建一个名为“-i”的文件(您可以使用 emacs 或其他程序来执行此操作)。 shell 将尝试解释 -i 并使其进入交互模式。
例如:您有一个名为 的目录,其中rmtest
包含名为 的文件-i
。如果您尝试rm
目录内的所有内容,rm
将首先-i
传递给它并进入交互模式。如果您将这样的文件放入您想要对其进行保护的目录中,这可能会有所帮助。
请注意,这对 无效rm -rf rmtest
。