回答:
ブートローダーはカーネルをロードしますが、カーネルはinitを実行しようとしますが、それを見つけてパニックすることはありません。
その方法は、リブートし、ブートパラメータを編集し、init=/bin/bash
その方法で追加してブートすることです。カーネルはinitとして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(ダッシュへのリンク)が見つかります。これにより、シェルが提供され、init=/bin/bash
ブートパラメーターを使用せずにシェルを修正できます。
/sbin/init
。
/bin/sh
ファイルがない場合はどうなりますか?それとも/bin/bash
か/bin/dash
など?これらをすべて同時に削除する方法はわかりませんが、理論的にはどうなりますか?
再起動を試みるまで、何も起こりません。システムが実行されており、/sbin/init
nを実行してランレベルを切り替えようとしない限り、システムが消滅したことすら気付かないでしょう。
実際、/sbin/init
間違えを早く気づいて落ち着いた場合、の削除は元に戻せません。システム管理者は、オペレーティングシステムを実行したまま、多くの厄介な「ロボトミー」から回復しました。
の削除から回復する1つの方法/sbin/init
は、upstart
APTを使用してパッケージを再インストールすることです。
回復するためのマッチョな方法は、マシン自体のリソースのみを使用することです。あなたの好意の1つの要因は、/sbin/init
常に実行されていることです。したがって、を実行するrm /sbin/init
と、ファイルはファイルシステムからリンク解除されるだけです。iノードとファイルの内容は、PID 1が終了するまでディスクとメモリに残ります。/sbin/init
適切なiノードから再作成するだけです 。
それを達成する最も簡単な方法は次のとおりです。
# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
-L
-動作しません。cp /proc/fd/1/exe /sbin/init && chmod 755 /sbin/init
しかし動作します。APTを使用してupstartを再インストールするのはdpkg
、デフォルトではなくなっていることがわからないため、それほど明確ではありません。「パッケージの新興企業はすでに現在のバージョンです。」dpkg --force-depends --force-remove-essential -r upstart
最初にできます。