是否存在需要 rm -rf --no-preserve-root 的场景?

是否存在需要 rm -rf --no-preserve-root 的场景?

我在这里看到过一些问题,人们在做出反应之前意外地rm -rf --no-preserve-root删除rm -rf *了大部分或全部文件系统。

是否有理由使用--no-preserve-root,无论是在正常使用中,作为开发人员还是管理员?

答案1

重要的:现代系统(配备 UEFI 的计算机使用基于 systemd 的发行版)将固件挂载到该/sys目录下并提供给操作系统。不要运行此命令在现代系统上,因为它将删除该固件,从而实质上使您的机器变砖。信息


我能想到的最简单的情况是有人想从他们的驱动器中删除所有数据。这样做可能有完全正当的理由,我能想到的最简单的方法是

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 规范(前一个在此处),在此之前,这rm -rf /是一个完全有效的命令。从历史上看,自 1979 年首次获得删除目录的能力以来,...目录一直受到保护。有关更多信息rmrm这里

答案2

开关的存在--no-preserve-root不是为了添加附加功能,但覆盖非常合理的功能减少。这种转变很可能基于这样的理念:计算机应该按照指令行事,并且应该有命令来表达任何所需的操作。这种转变早于 UEFI,根据我的经验,我认为它现在已经过时了。

在现代实践中,如果没有这个开关,rm命令就会避免在使用未初始化的变量或杂散空间时意外删除根目录。

rm -rf /${my_directory}
rm -rf / var/log/httpd/*

有趣的脚注:保护不是其目的。根据 Sun Microsystems 博客,删除目录/将隐式删除当前工作目录,这违反了已经为...目录做出的特殊考虑。这就是他们的标准委员会允许这一特殊例外的原因——不是为了防止事故。这一变化首次在 Solaris 10 build 36 中引入。

http://archive.is/5lmc9

答案3

也许这不是原提问者想要的答案,但是有一个用例需要从根目录递归删除所有文件。虽然不是通过命令rm,但它是开关根(8)在您的(非嵌入式)Linux 系统启动期间的过程。

相关内容