如果 init 被删除会发生什么?

Kaz*_*lfe 22 init kernel

只是一个理论问题...

但是如果init(in /sbin/init) 被删除会发生什么?

sмu*_*urf 31

引导加载程序将加载内核,内核将尝试运行 init,找不到它并恐慌。

解决方法是重新启动,编辑启动参数,然后添加init=/bin/bash并启动。内核将使用 bash 作为 init。这将使您有机会运行命令并修复系统。

更正
显然内核(文件init/main.c)执行以下操作:

if (!try_to_run_init_process("/sbin/init") ||
    !try_to_run_init_process("/etc/init") ||
    !try_to_run_init_process("/bin/init") ||
    !try_to_run_init_process("/bin/sh"))
        return 0;

panic("No working init found.  Try passing init= option to kernel. "
      "See Linux Documentation/init.txt for guidance.");
Run Code Online (Sandbox Code Playgroud)

所以它会找到/bin/sh(这是一个破折号的链接),这会给你一个shell,并有机会在不使用init=/bin/bash引导参数的情况下修复它。


200*_*ess 12

没有任何反应,直到您尝试重新启动。只要系统正在运行,并且您不尝试通过运行/sbin/init n来切换运行级别,您甚至不会意识到它已经消失了。

其实,/sbin/init如果你早点意识到错误并保持冷静,删除是可以撤消的。在保持操作系统运行的同时,系统管理员已经从更严重的“脑叶切除术”中恢复过来

从删除中恢复的一种方法/sbin/initupstart使用 APT重新安装包。

男子气概的恢复方式是只使用机器本身的资源。对您有利的一个因素是它/sbin/init始终在运行。因此,当您运行 时rm /sbin/init,该文件只是从文件系统中取消链接。inode 和文件内容保留在磁盘和内存中,直到 PID 1 退出。您只需/sbin/init要从适当的 inode重新创建 。

最简单的方式来实现这一目标是:

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
Run Code Online (Sandbox Code Playgroud)