「 Linuxコマンドラインとシェルスクリプト聖書、第2版 」という本からコマンドラインを学んでいます。本はこれを述べています:
一部のLinux実装には、起動時に自動的に開始するプロセスのテーブルが含まれています。 Linuxシステムでは、このテーブルは通常、特殊ファイル/ etc/inittabsにあります。
その他のシステム(一般的なUbuntu Linuxディストリビューションなど)は、起動時に個々のアプリケーションを起動および停止するためのスクリプトを含む/etc/init.dフォルダーを利用します。スクリプトは、/ etc/rcX.dフォルダーの下のエントリーを介して開始されます。Xは実行レベルです。
たぶん私はLinuxが初めてなので、引用した2番目の段落が何を意味するのか理解できませんでした。誰かがもっと分かりやすい言語で同じことを説明できますか?
init.d
またはrcx.d
を忘れて、物事を非常に単純にしてみましょう。他のスクリプトを1つずつ実行または強制終了することを唯一の責任とするプログラムをプログラミングしていたとします。
ただし、次の問題は、それらが正常に実行されることを確認することです。どのように実行しますか?
そして、このプログラムがスクリプトを実行するためにscripts
フォルダー内を調べたとしましょう。スクリプトの優先順位を並べ替えるには、番号順に並べます。この順序は、init.d
とrc
の関係を決定するものです
つまり、init.d
には実行するスクリプトが含まれ、rcX.d
には実行するスクリプトの順序が含まれます。
rcX.d
のX
値は、実行レベルです。これは、OSの現在の状態に大まかに変換できます。
rcX.d
スクリプト内を掘り下げると、次のフォーマットが見つかります。
Xxxabcd
X
はK
またはS
に置き換えられます。これは、現在の実行レベルでスクリプトをkilled
またはstarted
にするかどうかを表しますxx
は注文番号ですabcd
はスクリプト名です(名前は関係ありませんが、ポイントする場所はこれが実行するスクリプトです)Linuxにはいくつかの異なるinitシステムがあります。主なものは SysVinit (従来のもの)、 pstart (Ubuntuの置き換え)、および SystemD (FedoraとGnomeによってプッシュされます)です。ディレクトリ/etc/init.d
および/etc/rc?.d
は、SysVinitによって使用されます。この本は、情報が少し古い(Ubuntuは他の皆と同じようにSysVinitを使用していた)か、互換性のためにこれらのディレクトリがまだ存在するため、Ubuntuに関してそれらについて言及している可能性があります。
/etc/init.d
には一連のスクリプトが含まれており、それぞれにサービスを開始および停止するための指示が含まれています。これらのサービスの一部は、ブート時に開始する必要があります。他のユーザーはマルチユーザーモードで起動する必要がありますが、シングルユーザーメンテナンスモードでは起動しません。また、目的のサービスの異なるセットを使用して、異なるモードを定義することもできます。 SysVinitは runlevels によってこれを管理します。ディレクトリ/etc/rc$N.d
には、ランレベルNに入るときに実行するスクリプト(/etc/rc$N.d/S*
)とランレベルNから出るときに実行するスクリプト(/etc/rc$N.d/K*
)が含まれています。多くのランレベルには共通のスクリプトがあるため、各ランレベルのスクリプトのコピーを保存するのではなく、スクリプトはすべて1つの場所/etc/init.d
に保存され、ランレベル固有のディレクトリ/etc/rc?.d
にはシンボリックリンクが含まれます。さらに、シンボリックリンクの名前は、そのランレベルでサービスを開始する(S*
)か停止する(killed、K*
)かを示し、数値プレフィックスを使用して、スクリプトが実行されます。
/etc/rc$N.d
のトラバースを担当するスクリプトは/etc/init.d/rc
です(起動前のUbuntuおよびDebianでは、場所は他のLinuxディストリビューションでは異なる場合があります)。
/etc/init.d
は、initスクリプトが属するディレクトリです。
etc/rcX.d
は、ランレベルX
に入るときに強制終了または開始されるサービスを制御するリンクです。 Kで始まるrcX.d
のファイルはパラメーターstop
で実行され、S
で始まるファイルはパラメーターstart
で実行されます。 K
またはS
の後に2桁の数字を使用して、起動と停止の順序を決めるのが一般的です。適切な開始と停止の順序を保証するために、2つのシーケンスの合計が100になるのは一般的です。
プログラムを実行レベルで無効にするには、リンクを削除するか、K
またはS
の大文字と小文字をk
またはs
に変更します。
編集:管理者は通常、/etc/init.d
からスクリプトを実行します。これは、配布によっては別のディレクトリへのシンボリックリンクになる場合があります。 (ディストリビューションごとに異なる標準があります。)
rcX.d
は、実行レベルを変更するために初期化コードによって使用されます。
@BillThorは非常にうまく応答しましたが、/etc/rcX.d
および/etc/init.d
についての私の理解は次のとおりです。
/etc/init.d
には、起動時に個々のアプリケーションを起動および停止するためのスクリプトが含まれています。/etc/rc?.d
ディレクトリはさまざまな実行レベルを表し、その中に含まれるスクリプトは/etc/init.d
ディレクトリ内の実際のスクリプトへのシンボリックリンクにすぎません。実行レベルを変更すると、非常に基本的なシングルユーザーモードからコンソールのみのモード、高度なグラフィカルインターフェイスなど、システムのモードが変更されます。そのため、/etc/rc?.d
自体なしでは/etc/init.d
ディレクトリを使用できません(もちろん、その逆も同様です)。