Просто теоретический вопрос ...
Но что произойдет, если init
(в /sbin/init
) будет удален?
Загрузчик загрузит ядро, ядро попыталось бы выполнить init, не находят его и паника.
выход из него состоит в том, чтобы перезагрузить, отредактировать параметры начальной загрузки, добавить init=/bin/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 (который является ссылкой на тире) и это даст Вам оболочку и шанс зафиксировать его, не используя init=/bin/bash
параметр начальной загрузки.
Ничего не происходит, пока Вы не пытаетесь перезагрузить. Пока система работает, и Вы не пытаетесь переключить runlevels путем выполнения /sbin/init
n, Вы даже не поняли бы, что это закончилось.
На самом деле, удаление /sbin/init
невозможно, если Вы понимаете ошибку рано и остаетесь спокойными. Системные администраторы имеют восстановленный с намного более противных "лоботомий" при поддерживании операционной системы в рабочем состоянии.
Один способ восстановиться с удаления /sbin/init
состоит в том, чтобы переустановить upstart
пакет с помощью APT.
мужественный способ восстановиться состоит в том, чтобы использовать только ресурсы на самой машине. Один фактор в Вашу пользу - то, что /sbin/init
всегда работает. Поэтому, когда Вы работаете rm /sbin/init
, файл является просто несвязанным с файловой системой. inode и содержание файла остаются на диске и в памяти до выходов PID 1. Просто необходимо воссоздать /sbin/init
от соответствующего inode.
самый легкий путь для выполнения, который является:
# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init