为什么 'rm -rf / --no-preserve-root' 命令不会删除自身并导致系统崩溃?

3
rm -rf / --no-preserve-root

这个命令会清空我的硬盘。但如果它把所有东西都清空了(包括操作系统),那么内核和当前进程怎么能继续运行呢?

2
它可以在操作系统仍在RAM中运行时移除磁盘内容。 - mangusta
实际上,它并没有从磁盘中删除内容。情况比这更加复杂。请查看我的答案。 - Stephen C
3个回答

9
首先,不清楚它是否能够成功地从您的文件系统中删除所有内容(而且肯定大部分数据仍然存在于磁盘上,如果您可以在磁盘/磁盘镜像上运行文件恢复工具,则可以将其找回)。
但仍然有效的原因是,rm命令实际上使用一个叫做unlink的系统调用来删除文件。只有满足以下条件,该系统调用才会真正删除一个文件:
1. 文件系统中没有其他硬链接指向该文件。 2. 没有任何东西在使用它。在这种情况下,“使用它”可以是通过文件描述符读取/写入或执行它。
当您以这种方式运行rm时,它实际上无法物理删除操作系统内核、rm可执行文件、您的Shell可执行文件和各种系统守护程序以及许多其他正在“使用”的东西。如果您能够干净地关闭操作系统,则其中许多文件将被删除,但这将不可能,因为您已经删除了所有关闭脚本。
但是,您很可能最终会得到一个无法正确启动的系统。

2
  1. 在大多数 UNIX 系统上,即使从文件系统中删除了当前已打开的文件(除非这些文件已关闭),它们也不会被删除。

  2. 已加载到内存中(如运行中的内核和“rm”二进制文件)且不需要访问更多文件的程序不会受到删除文件的影响。


0

哈哈哈哈 - 你做了吗?

操作系统等运行在内存中。所以这个操作可能无法完成。但它会对你的操作系统造成无法修复的损坏。我不能说我曾经尝试过。

如果“rm”二进制文件(例如)已加载到内存中。然后从磁盘上删除该二进制文件,内核/操作系统就没有理由将映像写回磁盘 - 它将消失。

我有一台可以废弃的CentOS机器,如果有人想看看会发生什么?


1
许多人手头都有几十个虚拟机,只是为了尝试一些东西——没有什么比让事情不再工作更有趣了 :) - Marcus Müller
6
有些 /dev/ 相关的内容令其窒息。无法删除 /proc/* 相关的内容,但正在尝试。这个系统在 /var/tmp 目录下出现问题。 - terary
6
卡在了 /var/tmp 目录。几分钟后,系统回应了提示符。现在我尝试重新运行命令,但找不到 rm 命令。现在需要重启,但关机命令也不见了(我太愚蠢了)。系统进入了救援模式,我有些力不从心。 - terary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接