使用“rm -rf /”命令你能走多远?

n0p*_*0pe 202 unix filesystems rm

我经常想知道如果你运行rm -rf /. 我怀疑操作系统是否能够自行擦除(?)

额外问题:命令执行后,会rm自行删除吗?

更新: 我已经使用 VirtualBox 在几个主要的 unix 发行版中对此进行了测试,答案准确地描述了会发生什么。如果给出正确的参数,rm 将删除磁盘上的每个物理数据位。但是,在使用 rm 版本而不是 GNU 版本时,我遇到了一些问题。例如,我相信 BusyBox 有自己的版本,它不会让您尽可能多地删除。

这个问题是本周超级用户问题
阅读 2011 年 7 月 7 日的博客条目以了解更多详细信息或提交您自己的本周问题。

Amb*_*jak 190

如果你有rm来自 GNU coreutils(最有可能是一个普通的 Linux 发行版),rm -rf /将被内置保护拒绝(根据联机帮助页和维基百科,还没有尝试过)。

您可以使用--no-preserve-root. rm然后将删除所有可能的内容,而不会在尝试删除每个文件后停止。当然,它不会像/proc和那样删除虚拟文件系统/sys,但这无关紧要——它会删除磁盘上的所有内容。

命令完成后,您的磁盘将被清空,包括操作系统。内核和当前进程将继续从内存中运行,但许多进程会因为无法访问某些文件而死亡。操作系统下次将无法启动。

  • 正是我要找的。现在使用这种力量来接管世界。 (68认同)
  • +1 特别是对于`--no-preserve-root`,因为通常不会提到这一点。 (34认同)
  • @MaxMackie,值得注意的是,黑客很快发现这是他们可以对用户做的*最少*的事情。它会破坏任何可用于获取现金的数据,并防止黑客进一步利用机器。就像一只有昆虫的猫,你不想杀死它,你只想和它玩一会儿,因为它很有趣。 (22认同)
  • 要回答 OP 的另一个问题,是 rm 将自行删除。即使有一个正在运行的实例,也完全可以修改或删除可执行文件。它也将继续运行,并且不会受到更改的影响。 (5认同)
  • 我想在 / 处提及“chmod -R user:user *”,因为它也是一个递归且代价高昂的错误。我做过一次,当我可以中止时,已经完成了 /home 的一半。/bin /boot /etc /dev 被拥有。幸运的是,当我在接下来的几个小时手动并从参考系统重置所有权时,服务器一直在运行。但是,之后没有其他人可以使用 su 或 sudo 。最终发现 /bin/su 不再设置其 setuid 位。请注意: chowning /bin/su 重置其 setuid 位! (3认同)

Xeo*_*oss 42

对于那些喜欢在听电子音乐的同时视觉上做这样的事情的人。

在 Linux 上运行 rm-rf(视频)

如果您可以在进程开始死亡时命名它们,则可以获得奖励积分。


Pri*_*cey 22

设置虚拟机并尝试玩乐?

它会走得很远……如果您使用的是 gui,您可能会很高兴地注意到事物的退化更加明显。(菜单上的图标停止加载等)

如果您放手不管,操作系统将几乎无法恢复,尽管您可以轻松取回一些数据。

无论哪种方式,您都会想要重新安装操作系统。

  • *错误地将命令写入主机系统的终端* (40认同)
  • 我什至没有想过在 VM 中尝试它。现在就去试试!哦,这很有趣。 (7认同)
  • 使用 Amazon EC2 应该很快启动他们已经安装了 linux 的 AMI 之一并启动...... (2认同)

Hel*_*o71 12

好吧,在http://bellard.org/jslinux/上尝试会产生:

rm:无法删除“/dev/pts”:设备或资源繁忙
rm:无法删除“/dev”:目录不为空
rm:无法删除“/proc/swaps”:不允许操作
rm:可以't remove '/proc/kallsyms': 不允许操作
rm: 不能删除 '/proc/dma': 不允许操作

SNIP 881 条目

rm:无法删除“/proc/149/oom_adj”:权限被拒绝
rm:无法删除“/proc/149”:不允许操作
rm:无法删除“/proc”:设备或资源繁忙
rm:无法删除“/tmp”:设备或资源繁忙
rm:无法删除“/”:设备或资源繁忙

  • /proc、/sys、有时是 /dev 和任何挂载点都是操作系统的属性,不能删除。 (5认同)

zwo*_*wol 7

我记得这在过去的alt.sysadmin.recovery日子里被咀嚼过,当时没有这样的东西/proc,/dev只是一个包含一堆不寻常 inode 条目的常规目录......

...但是,在 Unix 的某些变体上(我记得是 HP-UX,但这可能是完全错误的),您无法删除正在运行的程序的最后一个目录条目。(共享库?那些是什么?)

在这样的系统中,如果您在维护模式下启动一起来(因此没有运行,但你的shell,甚至没有init,不产生二次文件系统被安装)并没有exec /bin/rm -rf /,你会留下一个完全空的根文件系统的不同之处在于/bin/bin/rm会存活。

可怕的恶魔寺院的居民认为这是合适的。


jll*_*gre 5

rm -rf /最近的实现中不应允许这样做,因为有人建议它违反了 POSIX 标准:

rm -rf /Oracle 博客上的“保护”

不管怎样,最后,我们修改了规范,Solaris 10(自 build 36 起)有一个 /usr/bin/rm 版本(/bin 是 Solaris 上 /usr/bin 的符号链接)和 /usr/ xpg4/bin/rm 的行为如下:

[28] /bin/rm -rf /
rm of / is not allowed
[29] 
Run Code Online (Sandbox Code Playgroud)

  • “指出如果尝试递归地删除“/”,最终将尝试删除“..”和“.”,而我们所做的就是允许 rm 启发式地预先确定这一点。令人惊讶的是,他们买了那个!” - 呃,这不会禁止删除 _any_ 目录吗?实际规范仅不允许 .. 和 . 在实际的命令行参数中,它没有说明您“最终尝试删除”的内容 (2认同)
  • 事实上,我误解了这个说法,而你是对的。希望标准制定者能够接受这种更聪明的行为,因为它符合标准。删除大部分(如果不是全部)文件系统很快就会使操作系统不符合标准。 (2认同)