Linux initの詳細な説明

  
 

initは、Linuxシステムの運用に不可欠なプログラムの1つです。

いわゆるinitプロセス。カーネルによって開始されるユーザーレベルのプロセスです。

カーネルが起動した後(メモリにロードされ、実行を開始し、すべてのデバイスドライバとデータ構造が初期化されたなど)、ブートプロセスはユーザーレベルのプログラムinitを起動することによって完了します。したがって、initは常に最初のプロセスです(そのプロセス番号は常に1です)。

カーネルはinitが過去に使用されたことがあるいくつかの場所でそれを調べます(Linuxシステムの場合)/sbin /init。カーネルがinitを見つけられない場合は/bin /shを実行しようとしますが、実行に失敗するとシステムは起動しません。

まず、INITとは何ですか。initは、Linuxシステムの運用に不可欠なプログラムの1つです。

いわゆるinitプロセス。カーネルによって開始されるユーザーレベルのプロセスです。

カーネルが起動した後(メモリにロードされ、実行を開始し、すべてのデバイスドライバとデータ構造が初期化されたなど)、ブートプロセスはユーザーレベルのプログラムinitを起動することによって完了します。したがって、initは常に最初のプロセスです(そのプロセス番号は常に1です)。

カーネルはinitが過去に使用されたことがあるいくつかの場所でそれを調べます(Linuxシステムの場合)/sbin /init。カーネルがinitを見つけられない場合は/bin /shを実行しようとしますが、実行に失敗するとシステムは起動しません。

次に、実行レベル

では、実行レベルはどうなりますか。

簡単に言うと、ランレベルは OS
が現在実行している機能のレベルです。このレベルは1から6の範囲で、さまざまな機能があります。

さまざまなランレベルが次のように定義されています。(Red Hat Linuxの/etc /inittabを参照)

#0 - ダウンタイム(initdefaultを0に設定しないでください)

#1 - シングルユーザーモード

#2 - マルチユーザー、NFSなし

#3 - フルマルチユーザーモード(標準実行レベル)

#4 - 未使用

#5 - X11(xwindow)

#6 - 再起動(initdefaultを6に設定しないでください)

これらのレベルは/etc /inittabにあります。ファイルに指定されています。このファイルはinitプログラムが探すメインファイルで、最初に実行するサービスは/etc/rc.dディレクトリにあるファイルです。ほとんどのLinuxディストリビューションでは、起動スクリプトは/etc/rc.d/init.dにあります。これらのスクリプトは、lnコマンドを使用して/etc/rc.d/rcn.dディレクトリに接続されています。 (ここでのnは実行レベル0〜6です)

3番目に、実行レベルの設定

実行レベルの設定は、以下に示すように/etc /inittab行で行われます。

12:2:wait:/etc /init.d /rc 2

最初のフィールドは任意に指定されたラベルです。

2番目のフィールドはこの行が適用されることを示します。そのレベルを実行します(ここでは2です)。

3番目のフィールドは、ランレベルに入るときにinitが4番目のフィールドでコマンドを1回実行し、initがコマンドの終了を待つことを示します。 /etc/init.d/rcコマンドは、レベル2の実行に必要なコマンドを取得するために開始および停止入力を実行します。

4番目のフィールドのコマンドは、実行レベルを設定するときにすべての操作を実行します。まだ実行されていないサービスを開始し、新しい実行レベル内で実行されるべきではないサービスを終了します。 Linuxのバージョンによって、使用される特定のコマンドが異なり、実行レベルの設定も異なります。

initが起動すると、/etc /inittabでデフォルトのランレベルを指定するコード行を探します。

id:2:initdefault:

カーネルに「単一」または「緊急」のコマンドライン引数を指定することで、起動時にinitにデフォルト以外のランレベルを入力するように要求できます。たとえば、カーネルコマンドラインパラメータの指定はLILOによって実行できます。このようにして、シングルユーザーモード(ランレベル1)を選択できます。

telinitコマンドは、システムの稼働中に実行レベルを変更します。ランレベルが変わると、initは/etc /inittabから適切なコマンドを実行します。

4番目に、/etc /inittabの特別な設定

/etc /inittabには、initが特別なイベントを再開できるようにする特別な機能がいくつかあります。これらの特別な機能は、3番目のフィールドで特別なキーワードでマークされています。例:

1. powerwait

initは電源がオフになったときにシステムをシャットダウンすることを許可します。前提は、U P SとU P Sを監視し、initに電力が遮断されたことを通知するソフトウェアがあることです。

2. ctrlaltdel

ユーザーがコンソールキーボードのCtrl + Alt + Delを押したときにinitがシステムを再起動することを許可します。システムが公共の場所に置かれている場合、システム管理者はC t r l + A l t + D e lキーの組み合わせを設定して、無視などの他のアクションを実行できます。

3. sysinit

システム起動時に実行されるコマンドです。たとえば、このコマンドは/tmpをクリアします。

上記の特別なキーワードはまだ完成していません。他のキーワードとその使用法の詳細については、inittabのマニュアルページを参照してください。

V.シングルユーザーモードでの起動

重要なランレベルはシングルユーザーモード(ランレベル1)です。このモードでは、1人のシステム管理者だけが特定のマシンを使用します。ログインを含め、システムサービスをできるだけ実行します。シングルユーザーモードは、パーティションをマウント解除する必要があるため、いくつかの管理作業(/usrパーティションでfsckを実行するなど)に必要ですが、これはすべてのサービスシステムが強制終了されない限り不可能です。

実行中のシステムはinitを使用して実行レベル1を要求することでシングルユーザーモードに入ることができます。カーネルが起動したら、カーネルのコマンドラインでsingleまたはemergencyキーワードを指定してランレベル1を入力できます。 initは、デフォルトのランレベルを使用しないことをキーワードから認識しています(カーネルのコマンドライン入力方法は、システムの起動方法に関連しています)。

パーティションをロードする前、または少なくともscatter /usrパーティションをロードする前に、ユーザーが手動でfsckを実行することができるように、シングルユーザーモードで起動する必要がある場合があります。システム上で何らかの操作を行うと、システムが細分化される可能性があるため、可能な限りfsckを実行してください。

自動起動fsckが起動時に失敗した場合、起動スクリプトinitは自動的にシングルユーザーモードに入ります。これは、f s c kが自動的に修復しないコヒーレントファイルシステムをシステムが使用するのを防ぐために行われます。矛盾したファイルシステムは非常にまれであり、しばしば矛盾した、または実験的なカーネルリリースのハードドライブをもたらしますが、それが起こらないようにするのが最善です。

セキュリティ上の理由から、シングルユーザーモードでは、適切に設定されたシステムではシェルスクリプトを起動する前にユーザーにrootパスワードの入力を要求します。さもなければ、それは単にLILOのための適切なコード行を入力し、rootとしてログインするでしょう(もちろん、/etc /passwdがファイルシステム問題のために首尾一貫していないなら、これを扱うためにそれはこの原則に適していません)その場合は、いつでも起動ディスクを準備することができます。

実行レベルが異なると用途が異なりますので、状況に応じて設定する必要があります。

たとえば、rootのパスワードを紛失した場合、コンピュータをシングルユーザー状態で起動することができます。起動時のliloプロンプトで、次のように入力します。

init = /bin /sh rwマシンを実行レベル1にして、ルートファイルシステムを読み書き可能な状態にします。彼はすべてのシステム認証をスキップするので、rootパスワードを変更して新しいランレベルで起動するためにpasswdプログラムを使用することができます。
zh-CN"],null,[1],zh-TW"]]]

Copyright © Windowsの知識 All Rights Reserved