initが削除されたらどうなりますか?


22

単なる理論的な質問...

しかし、init(in /sbin/init)が削除されるとどうなりますか?


lnを試さないでください-L-動作しません。cp /proc/fd/1/exe /sbin/init && chmod 755 /sbin/initしかし動作します。APTを使用してupstartを再インストールするのはdpkg、デフォルトではなくなっていることがわからないため、それほど明確ではありません。「パッケージの新興企業はすでに現在のバージョンです。」dpkg --force-depends --force-remove-essential -r upstart最初にできます。
ジョシュア14年

1
apt-get install --reinstall upstart。また、/proc/fdディレクトリがありません。そして、私はチェックln -L /proc/1/exe /tmp/initしました。/sbin/init名前を/sbin/init.bakに変更して動作します。つまり、問題なく読むことができます/tmp/init
ルスラン14年

@muru OK。次に、タグシノニムを追加します。
カズウルフ14

回答:


31

ブートローダーはカーネルをロードしますが、カーネルは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
ルスラン14年

そして、/bin/shファイルがない場合はどうなりますか?それとも/bin/bash/bin/dashなど?これらをすべて同時に削除する方法はわかりませんが、理論的にはどうなりますか?
トリシス14年

さて、修正行の上の回答の一部であるカーネルパニックが表示されます。ただし、必要なシステムでは実行しないでください。真剣に、しないでください。Virtualbox VMを作成して試してみたい(そしてそれが良い練習になる)場合は、それを壊して修正してみてください。ところで、200_successによる答えも悪くありません。
sмurf

12

再起動を試みるまで、何も起こりません。システムが実行されており、/sbin/init nを実行してランレベルを切り替えようとしない限り、システムが消滅したことすら気付かないでしょう。

実際、/sbin/init間違えを早く気づいて落ち着いた場合、の削除は元に戻せません。システム管理者は、オペレーティングシステムを実行したまま、多くの厄介な「ロボトミー」から回復しました

の削除から回復する1つの方法/sbin/initは、upstartAPTを使用してパッケージを再インストールすることです。

回復するためのマッチョな方法は、マシン自体のリソースのみを使用することです。あなたの好意の1つの要因は、/sbin/init常に実行されていることです。したがって、を実行するrm /sbin/initと、ファイルはファイルシステムからリンク解除されるだけです。iノードとファイルの内容は、PID 1が終了するまでディスクとメモリに残ります。/sbin/init適切なiノードから再作成するだけです 。

それを達成する最も簡単な方法は次のとおりです。

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.