这只是一个理论问题...
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/init
是upstart
使用 APT 重新安装该包。
恢复的明智方法是只使用机器本身的资源。对您有利的一个因素是/sbin/init
始终在运行。因此,当您运行时,文件只是从文件系统中取消链接。inode 和文件内容保留在磁盘和内存中,直到 PID 1 退出。您只需从适当的 inoderm /sbin/init
重新创建即可 。/sbin/init
这最简单的方法要实现这一点需要:
# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init