我在这里看到了一些问题,人们在哪里会不小心执行rm -rf --no-preserve-root
或rm -rf *
,然后在他们做出反应之前先清除掉大部分或全部文件系统。
是否有理由以--no-preserve-root
正常方式使用开发人员或管理员身份?
我在这里看到了一些问题,人们在哪里会不小心执行rm -rf --no-preserve-root
或rm -rf *
,然后在他们做出反应之前先清除掉大部分或全部文件系统。
是否有理由以--no-preserve-root
正常方式使用开发人员或管理员身份?
Answers:
重要信息:现代UEFI系统将固件安装在该/sys
目录下,并使其可用于OS。不要在现代系统上运行此命令,因为它会删除此固件,从而使您的计算机变砖。
我能想到的最简单的方案是某人想要从驱动器中删除所有数据。这样做可能有完全合理的理由,而我能想到的最简单的方法是
rm -rf --no-preserve-root /
事实证明,实际上是在以下示例中给出的info rm
:
`--no-preserve-root'
Do not treat `/' specially when removing recursively. This option
is not recommended unless you really want to remove all the files
on your computer.
另一个非常好的原因是您要删除已chroot
加入的已挂载文件系统。在这种情况下,rm -rf --no-preserve-root /
将删除chroot
环境中的系统,但将保持原样。
我确信还有更多可能的原因,但是总的来说,这似乎是一种非常合理的方法,即我的系统允许我用它做任何我想做的事情。这是我的工作,请小心,该系统仅应允许我执行我想完成的工作。如果我想要的是愚蠢的,那是我的问题,而不是操作系统的问题。
无论如何,这是一个相对较新的限制,它是在POSIX规范的第7版中添加的(之前的版本在此处),在此之前rm -rf /
是完全有效的命令。从历史上看,自1979年首次获得删除目录功能以来,.
和..
目录一直受到的保护。在这里更多。rm
rm
/
。
rm -rf /
可能会使某个人的NFS / CIFS / SSHFS挂载上的远程计算机空白。
--no-preserve-root
开关的存在不是要添加其他功能,而是要覆盖功能上非常合理的减少。此切换可能基于以下原理:计算机应按提示执行操作,并且命令应可用以表达任何所需的操作。此开关早于UEFI,根据我的经验,我说它已经过时了。
在现代实践中,没有此开关,该rm
命令可避免在使用未初始化的变量或杂散空间时意外删除根目录。
rm -rf /${my_directory}
rm -rf / var/log/httpd/*
有趣的脚注:保护不是其意图。根据Sun Microsystems博客,删除/
目录将隐式删除当前的工作目录,这违反了对.
and ..
目录的特殊考虑。这就是为什么他们的标准委员会允许这个特殊的例外-不是为了预防事故。此更改最初是在Solaris 10 build 36中引入的。
也许这不是原始asker想要的答案,但是有一个用例需要从根目录中递归删除所有文件。尽管不是通过rm
命令执行的,但它是引导(非嵌入式)Linux系统期间switch_root(8)进程的一部分。
/
,但»一般情况«仍然存在。换句话说:»告诉我怎么做不是我计算机的工作。«而不应该。