如果删除 init 会发生什么情况?

如果删除 init 会发生什么情况?

这只是一个理论问题...

init但是如果中的/sbin/init被删除,会发生什么情况?

答案1

引导加载程序将加载内核,内核将尝试运行 init,如果找不到它就会崩溃。

解决方法是重新启动,编辑启动参数,添加init=/bin/bash并启动。内核将使用 bash 作为 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.");

因此它会找到 /bin/sh(这是 dash 的链接),它会给你一个 shell 和一个无需使用init=/bin/bash启动参数就可以修复它的机会。

答案2

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

/sbin/init事实上,如果你及早意识到错误并保持冷静,删除是可以撤销的。系统管理员有从更严重的“脑白质切断术”中恢复过来同时保持操作系统运行。

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

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

最简单的方法要实现这一点需要:

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init

相关内容