问题描述
只是一个理论问题…
但是,如果删除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
。系统管理员在保持操作系统运行的同时拥有recovered from much nastier “lobotomies”。
从删除/sbin/init
中恢复的一种方法是使用APT重新安装upstart
软件包。
恢复的主要方法是仅使用计算机本身上的资源。对您有利的一个因素是/sbin/init
始终在运行。因此,当您运行rm /sbin/init
时,仅从文件系统取消链接该文件。索引节点和文件内容保留在磁盘和内存中,直到PID 1退出。您只需要从相应的inode到re-create /sbin/init
即可。
easiest way完成的任务是:
# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init