众所周知,这是两个致命的 UNIX 命令,它们都告诉机器自杀。但两者有什么区别呢?第一个删除根目录,而第二个删除其中的所有内容。两者都同样糟糕,但是第一个会因为删除根目录本身而删除文件系统吗?有什么不同?
答案1
与rm -r dir
和 的区别相同rm -r dir/*
。
第二个仅删除 glob 匹配的任何内容,通常是名称不以点开头的每个文件,但可以在 bash 和其他可能的文件中进行配置。如果你有的话它也会失败地段目录中的文件数,因为命令行只能容纳这么多。通常情况下,根目录中不会有任何一个,但仍然如此。
第一个将递归到dir
,删除所有内容,然后删除目录本身。但正如所说,无论如何你都无法删除根目录。在 Linux 上,您得到的错误是Device or resource busy
,这正是您尝试删除包含已安装文件系统的任何目录时遇到的错误。 (在删除该目录之前,它甚至不需要检查该目录是否为空。)
出于同样的原因,您通常也不能将根目录清空,您将安装诸如/proc
和/sys
(在 Linux 上)之类的东西,并且在不卸载它们的情况下无法删除安装点。
严格来说,删除所有文件并不会杀死系统......它只是使启动外部程序来执行某些操作的常见范例变得有点难以使用。但运行不再需要文件系统上任何文件的程序不会受到影响。您也许可以使用诸如busybox
集成了rm
和的 shell 之类的东西来尝试它ls
。 (如果您的引导文件位于已安装的文件系统上,那么下次引导可能会很困难。)
答案2
--no-preserve-root
绕过相反的--preserve-root
指令,该指令可以设置为别名,甚至可以设置为默认选项,具体rm
取决于系统。此选项只是一个超级新手保护,它不会对系统提供太多保护,以防止有人首先运行此类命令。
如果没有--preserver-root
指令(绕过或默认),rm
将尝试删除系统上的所有内容。
请注意,它会总是无法执行此操作,因为有许多文件由于打开而无法删除。另请注意,这/
是一个内核构造,在任何情况下都无法删除,即使可以删除其所有安装的内容。