为什么'rm -rf/--no-preserve-root'不会自行删除并崩溃?

use*_*862 1 rm

rm -rf / --no-preserve-root
Run Code Online (Sandbox Code Playgroud)

此命令将删除磁盘中的所有内容.但如果它删除了所有内容(包括操作系统),内核和当前进程如何继续运行?

Ste*_*n C 5

首先,不清楚它是否会成功从您的文件系统中删除所有内容.(当然,大多数数据仍然存在于磁盘上,如果您可以通过磁盘/磁盘映像运行文件恢复工具,则可以将其恢复.)

但事情仍然有效的原因是该rm命令实际上是使用一个被调用的系统调用unlink来删除文件.如果满足以下条件,该系统调用将仅实际删除文件:

  1. 文件系统中没有其他(硬)链接到该文件.
  2. 什么都没有使用它.在这种情况下,"使用它"可以通过文件描述符读取/写入...或执行它.

当你这样运行时rm,它实际上无法物理删除操作系统内核,rm可执行文件,shell的可执行文件和各种系统守护程序,以及许多其他"正在使用"的东西.如果您能够干净地关闭操作系统,则会删除其中许多文件...但由于您已删除所有关闭脚本,因此无法实现.

但很可能你最终会得到一个无法正常启动的系统.