Linuxの「/etc/init.d」ディレクトリと「/etc/rcX.d」ディレクトリ間の接続は何ですか?


25

Linux Command Line and Shell Scripting Bible、Second Edition」という本からコマンドラインを学んでいます。本はこれを述べています:

一部のLinux実装には、起動時に自動的に開始するプロセスのテーブルが含まれています。Linuxシステムでは、このテーブルは通常、特殊ファイル/ etc / inittabsにあります。

他のシステム(人気のあるUbuntu Linuxディストリビューションなど)は、ブート時に個々のアプリケーションを開始および停止するためのスクリプトを含む/etc/init.dフォルダーを利用します。スクリプトは、/ etc / rcX.dフォルダーの下のエントリーを介して開始されます(Xは実行レベルです)。

おそらく私はLinuxが初めてなので、引用した2番目の段落の意味を理解できませんでした。誰かがもっと平易な言語で同じことを説明できますか?


これは以前に
-bsd

@bdowningこれは違います。コンテキストがあります。リンクしたページに表示される質問は、IMOとは異なります。
its_me

@bdowning off、しかしそうであれば、重複としてフラグを立てることはより有益
でした-n611x007

回答:


30

init.dまたはrcx.d、物事を非常に単純にしておきましょう。他のスクリプトを1つずつ実行または強制終了することが唯一の責任であるプログラムをプログラミングしていると想像してください。

ただし、次の問題は、それらが順番に実行されることを確認することです。どのように実行しますか?

そして、このプログラムがscriptsスクリプトを実行するためのフォルダーの中にあると想像してください。スクリプトの優先順位を指定するには、番号順に並べます。この順序は関係規定するものですinit.dとしrc

つまりinit.d、実行するスクリプトと実行rcX.dする順序が含まれています。

XrcX.d は実行レベルです。これは、OSの現在の状態に大まかに変換できます。

rcX.dスクリプトを掘り下げると、次のフォーマットが見つかります。

Xxxabcd
  • XKまたはSに置き換えられます。これは、スクリプトを現在の実行レベルにするkilledstarted、現在の実行レベルにするかを表します。
  • xx は注文番号です
  • abcd はスクリプト名です(名前は無関係ですが、それが指す場所はこれが実行するスクリプトです)

2
素晴らしい説明、非常に明確。ありがとう@whoami
its_me

9

Linuxにはいくつかの異なる初期化システムがあります。主なものは、SysVinit(従来のもの)、Upstart(Ubuntuの代替品)、およびSystemD(FedoraとGnomeによってプッシュされます)です。ディレクトリ/etc/init.d/etc/rc?.dは、SysVinitによって使用されます。本は、Ubuntuに関する情報が少し古い(Ubuntuは他の人と同じようにSysVinitを使用していた)ため、またはそれらのディレクトリが互換性のためにまだ存在するため、Ubuntuに関してそれらに言及している場合があります。

/etc/init.dには多数のスクリプトが含まれており、各スクリプトにはサービスを開始および停止するための指示が含まれています。これらのサービスの一部は、ブート時に開始する必要があります。他のユーザーは、マルチユーザーモードで起動する必要がありますが、シングルユーザーメンテナンスモードで起動する必要はありません。また、目的のサービスの異なるセットで異なるモードを定義することもできます。SysVinitはこれをランレベルで管理します。このディレクトリに/etc/rc$N.dは、ランレベルN(/etc/rc$N.d/S*)に入るときに実行するスクリプトと、ランレベルN(/etc/rc$N.d/K*)を出るときに実行するスクリプトが含まれています。多くのランレベルには共通のスクリプトがあるため、各ランレベルのスクリプトのコピーを保存するのではなく、スクリプトはすべて単一の場所に保存され/etc/init.d、ランレベル固有のディレクトリ/etc/rc?.dシンボリックリンクが含まれます。さらに、シンボリックリンクの名前は、そのランレベルでサービスを開始する(S*)か、停止する(殺す)かK*を示し、数値のプレフィックスを使用してスクリプトの実行順序を制御します。

トラバースを担当するスクリプトは次のとおり/etc/rc$N.dです/etc/init.d/rc(Upstart以前のUbuntuおよびDebian上。他のLinuxディストリビューションでは場所が異なる場合があります)。


それでは、Ubuntuはもう使用/etc/init.dしておらず/etc/rc?.d、代わりにUpstartを使用していますか?
its_me

1
@ KrishD'Souzaそうではありません。Ubuntuは成り上がりの代わりはsysvinitを使用していますが、多くのパッケージはまだでスクリプトを出荷/etc/init.d(成り上がりの代わりに.conf内のファイル/etc/init成り上がりはまだサポートしているので、)/etc/init.d/etc/rc?.dの互換性のために。
ジル「SO-停止されて悪」

Ubuntuは15.04以降、Upstartからsystemdに切り替えました。そのため、現時点(16.04)でUbuntuにはSysVinit、Upstart、systemdの3つの初期化システムがあります。1つ目と2つ目は、後方互換性のために残されています。
ペトロクリフ

4

/etc/init.d initスクリプトが属するディレクトリです。

etc/rcX.dランレベルを入力するときに、サービスが殺さまたは開始されている制御するところのリンクですXrcX.dK で始まるファイルはパラメータstopで実行され、で始まるファイルはパラメータでS実行されますstartKまたはの後に2桁の数字を使用して、起動と停止の順序を決定するのが一般的Sです。適切な開始と停止の順序を確保するために、2つのシーケンスの合計が100になるのが一般的です。

プログラムは、リンクを削除したりした場合変更することにより、実行レベルで無効にすることができKたりSするkかをs

編集:管理者は通常/etc/init.d、配布に応じて別のディレクトリへのシンボリックリンクとなるスクリプトを実行します。(異なるディストリビューションには異なる標準があります。)

rcX.d実行レベルを変更するために初期化コードで使用されています。


ほとんどのシステムで/etc/init.dは、次のディレクトリへのシンボリックリンクです/etc/rc.d/init.d
ニヒルマルリー

1
だから、基本的に/etc/init.dなしでは無駄/etc/rcX.dです?また、/etc/rcX.d起動時に起動されるプログラムのコントローラーは機能しているので、その機能はに似てい/etc/init.dますか?
-its_me

これはシステムに依存します。たとえば、Gentooは、initファイルに/etc/init.dのみを使用します。/etc/rc*.dディレクトリはありません。同様に、Arch Linuxには/etc/init.dではなく、/ etc / rc.dのみがあります。
-laebshade

1

@BillThorは非常によく答えましたが、ここに私の理解が/etc/rcX.dあり/etc/init.dます:

  • /etc/init.d 起動時に個々のアプリケーションを起動および停止するためのスクリプトが含まれています。
  • /etc/rc?.dディレクトリはさまざまな実行レベルを表し、その中に含まれるスクリプトは、/etc/init.dディレクトリ内の実際のスクリプトへのシンボリックリンクにすぎません。実行レベルを変更すると、非常に基本的なシングルユーザーモードから高度なグラフィカルインターフェイスへのコンソール専用モードのように、システムのモードが変更されます。

したがって、それ自体/etc/rc?.dなしではディレクトリを使用することはできません/etc/init.d(もちろん、その逆も同様です)。

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