使用 rm -rf / 作为 root 可以走多远

Sud*_*jee 24 root rm

如果您是 root,并且您发出

rm -rf / 
Run Code Online (Sandbox Code Playgroud)

那么命令能走多远呢?你能从这种操作中恢复数据吗?即使二进制文件消失了,正在运行的进程是否仍然处于活动状态?再次启动同一台物理机需要什么?您需要恢复哪些文件才能实现此目的?

我可以在 VM 上试试这个,看看,但我想知道如果我这样做会发生什么背后的基本原理。

jll*_*gre 22

此命令不执行任何操作,至少在我使用的操作系统 (Solaris) 上,首次实现此安全功能的是:

# rm -rf /
rm of / is not allowed
Run Code Online (Sandbox Code Playgroud)

在其他 *nix 上,尤其是 Linux 系列,如果提供了足够新的 Gnu rm,则需要添加--no-preserve-root选项以使命令能够完成(或至少启动)。

这个命令能走多远是不确定的。这取决于许多或多或少不可预测的事件。通常,即使删除了二进制文件,进程也可以运行。

  • 一开始不相信你,但[就在那里](http://en.wikipedia.org/wiki/Rm_(Unix)#Protection_of_.2F)。很难相信直到 2005 (Sun/BSD) 和 2006 (GNU) 才阻止这个可怕的错误发生。 (5认同)
  • 你仍然可以使用 `rm -rf /*` 来删除任何东西 (5认同)
  • 确实,但在这种情况下,rm 无法(轻松)执行任何操作,因为在调用 rm 之前,shell 已经完成了文件扩展。 (2认同)

Old*_*mer 5

即使有 jlliagre 的出色回答,请记住这仍然是一件非常危险的事情。在做诸如 之类的事情之前,请务必rm -rf仔细检查您所在的位置。rm -rf *例如,如果您在 /usr 目录中执行此操作,那将是灾难性的。

至于您的其余问题,您可以恢复的内容很大程度上取决于您的备份过程。在大多数 *nix 系统中,一旦文件和目录被删除,就没有简单的方法来恢复它们。与旧的 DOS 时代不同,在执行删除后文件通常仍在磁盘上,现在大多数系统都会执行一些使恢复非常困难的操作。这是数据恢复服务如此昂贵的原因之一。

如果您使用虚拟机,我建议至少时不时地进行快照。但没有什么比遵循良好的后备计划更好的了。


小智 5

我刚刚尝试使用 Ubuntu 16 和 vmware 工作站,使用 no-preserve-root 选项,它擦除了我正在运行的 Linux 系统的整个磁盘。完成后,整个 vmware 工作站应用程序变得非常不稳定,甚至无法从应用程序关闭或重置虚拟机。杀死 vmx 被拒绝,之后只有主机重新启动才有效!