是否存在需要rm -rf -no-preserve-root的情况?


27

我在这里看到了一些问题,人们在哪里会不小心执行rm -rf --no-preserve-rootrm -rf *,然后在他们做出反应之前先清除掉大部分或全部文件系统。

是否有理由以--no-preserve-root正常方式使用开发人员或管理员身份?


4
我无法想象有任何有用的情况……我认为这个选项只是为了获得UNIX原理的正交性而存在(就保持相同的事物无一例外而言)。您很可能希望在的情况下例外/,但»一般情况«仍然存在。换句话说:»告诉我怎么做不是我计算机的工作。«而不应该。
Andreas Wiese 2014年

当SkyNet接管时,它是一种可能的武器。
Mitch Dart

Answers:


26

重要信息:现代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年首次获得删除目录功能以来,...目录一直受到的保护。在这里更多。rmrm


21
如果您的系统是UEFI(新计算机),请不要使用此方法删除所有数据。这样做会删除所有固件变量,并使主板像积木一样无用
Suici Doga

5
@SuiciDoga:来源,还是进一步的解释?主板固件不应存储在HDD上,否则,如果您拔出驱动器,它们将会丢失。
塔卡

15
@Tarka:/ sys / firmware / efi / efivars /可能已挂载,并且递归删除可能会删除这些var。它确实不应该建立系统,但是可以。参见thenextweb.com/insider/2016/02/01/…

4
@Tarka它们没有存储在HDD上,并且拉动驱动器不会影响它们。但是,由于我尚未了解的原因,它们已安装,因此实际上可以在下访问/
terdon '16

20
清空驱动器的正确方法是重新格式化其分区(或完全重新分区)。并非所有文件系统都是硬盘,因此使用该文件系统rm -rf /可能会使某个人的NFS / CIFS / SSHFS挂载上的远程计算机空白。
打分

12

--no-preserve-root开关的存在不是要添加其他功能,而是要覆盖功能上非常合理的减少。此切换可能基于以下原理:计算机应按提示执行操作,并且命令应可用以表达任何所需的操作。此开关早于UEFI,根据我的经验,我说它已经过时了。

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

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

有趣的脚注:保护不是其意图。根据Sun Microsystems博客,​​删除/目录将隐式删除当前的工作目录,这违反了对.and ..目录的特殊考虑。这就是为什么他们的标准委员会允许这个特殊的例外-不是为了预防事故。此更改最初是在Solaris 10 build 36中引入的。

http://archive.is/5lmc9


感谢您的链接!当时我想知道发生这种变化的原因是什么,希望能引用历史的风头。
卡梅隆·加格农

有趣的附加信息-谢谢
马克

1

也许这不是原始asker想要的答案,但是有一个用例需要从根目录中递归删除所有文件。尽管不是通过rm命令执行的,但它是引导(非嵌入式)Linux系统期间switch_root(8)进程的一部分。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.