如果删除init会发生什么?

只是一个理论问题……

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

引导加载程序将加载内核,内核将尝试运行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."); 

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

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

实际上,如果你及早意识到错误并保持冷静,删除/sbin/init是可以撤销的。 在保持操作系统运行的同时,系统管理员已经从更恶劣的“切割术”中恢复过来 。

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

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

最简单的方法是:

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