'rm -rf /' 如何能够删除系统中的所有文件?

'rm -rf /' 如何能够删除系统中的所有文件?

我无法理解rm -rf /:在内核被/bin删除后,如何rm维护运行时堆栈,并与文件系统和硬件进行通信,直到完成删除?是否rm与所有需要的二进制文件静态链接,并在命令启动时将整个文件系统目录树加载到内存中?

答案1

这是由于文件名和文件数据是分开的。当您删除文件时,您只是删除数据的命名引用(硬链接),而不是数据本身。当文件系统中的所有引用都消失时,内核将继续释放数据——但前提是当前没有正在运行的进程打开该文件。在此之前,该文件并未真正被删除,只是无法再通过其文件名来使用它。

答案2

无论内核文件被删除,内核都会继续工作,直到关机、重新启动或崩溃。

正在运行的进程也会发生类似的情况,对于 ELF 可执行文件来说,最常见的是它们的所有依赖项(可以看到正在运行的特定对应文件ldd $(which rm))都从文件系统加载到虚拟内存系统,至少在该进程的所有实例都被加载之前不会从内存中释放。完毕。这就是为什么可以对大多数可执行文件和库进行热替换的原因。

相关内容