今回はinitについて説明しようと思います。
まずUnix系OSで使用されてきたOS起動の仕組みとして「SysVinit」、「Upstart」、「Systemd」というものが有ります。
この中の「SysVinit」という仕組みでinitというプロセスが使用されています。
現在は「Systemd」の方が主流ではありますが、現在も一部「SysVinit」の仕組みが残っているので、今回調べてみたいと思いました。
initにはinitプロセスとinitコマンドが有るので両方とも説明したいと思います。
まずinitプロセスというのは「SysVinit」において、カーネルが最初に起動するプロセスです。
LinuxOSが起動する流れとしてはBIOS→ブートローダ→カーネル→initという順番に起動・制御の引き渡しが行われ、ユーザーが入力するためのプロンプト画面やGUI画面が起動されます。
つまり、initプロセスというのはLinuxOS起動時に最初に起動される第一のプロセスであり、全てのプロセスの親プロセスとなります。なのでPIDも「1」に固定されています。
initの基本的な役割としてはinitの設定ファイルである「/etc/inittab」の設定内容に従ってプロセスを作り出すことです。
まず、「/etc/inittab」の各行は「id:runlevel:action:process」という書式になっています。
:で区切られている各項目の説明を下記に示します。
「/etc/inittab」の設定項目
◎id・・・エントリの識別子。1~4文字のユニークな文字列でなければならない。
◎runlevel・・・ランレベルの指定。1~6までの数字を複数指定できる。省略するとデフォルトランレベルとなる。
◎action・・・プロセスの起動または終了時の動作。
◎process・・・起動するプログラム。
ランレベルというのはOSの動作モードを取り扱うために使用されているSysVinit内での考え方です。(Systemdだとターゲットと呼ばれたりする)
各ランレベルについての説明を下記に示します。(ランレベルは0~6、sがあります。)
ランレベル
◎0・・・停止、シャットダウンの状態
◎1・・・シングルユーザーモード、rootユーザーによるシステムメンテナンス時に用いられる。
◎2~4・・・マルチユーザーモード、基本的にCUI画面での操作。
◎5・・・マルチユーザーモード、GUI画面での操作。
◎6・・・再起動。
◎Sまたはs・・・シングルユーザーモード。
上記のようにランレベルには様々な種類が有りますが、例えば「/etc/inittab」に「id:3:initdefault:」と記載されていた場合、毎回OSを起動する際はランレベルを3(マルチユーザーモード、CUI画面)で起動する設定となります。
ただし、現在は「Systemd」が主流ですので、「/etc/inittab」ファイルが無い可能性が有りますので、ご注意ください。
次にinitコマンドについて説明します。
initコマンドはランレベルを手動で変更するために使用するコマンドです。
initコマンドの書式を下記に示します。
init ランレベル
例えば現在のランレベルが3だとして、システムメンテナンスのためにランレベル1に変更したい時、「init 1」や「init s」と入力して実行すればランレベルが1の状態へ変更されます。
ランレベル3に戻りたい場合は「init 3」を入力して実行すればランレベル3に変更されます。
「Systemd」内でもinitコマンドは使用することができます。
ただし、使用権限がrootユーザーのみの場合は権限変更やrootユーザーへのログインを行う必要が有ります。
今回は「SysVinit」について説明させていただきました。
別の機会に「Systemd」についても調べて説明したいと考えています。
参考資料
・【LPIC101】SysVinitとsystemd | やっさんハック (yassanabc.com)
・Linux起動の仕組みを理解しよう[init/inittab編]:Windowsユーザーに教えるLinuxの常識(10)(1/2 ページ) - @IT (itmedia.co.jp)