LinuCレベル2 201試験の出題範囲「2.01.2 システム起動のカスタマイズ」の解説まとめ

IT資格

LinuCレベル2 201試験の出題範囲「2.01.2 システム起動のカスタマイズ」の技術的内容についての解説をまとめました。

重要度3
概要さまざまなターゲットのシステムサービスの動作を照会および変更する。systemd と Linux のブートプロセスについての十分な理解が必要である。これには、systemd ターゲットの操作も含まれる。
詳細systemd/usr/lib/systemd/, /etc/systemd/, /run/systemd/, systemctl, systemd-deltasystemctl status,systemctl list-units,systemctl start/stop,systemctl enable/disable,systemctl mask/unmasksystemd のrescue モードと emergency モード。
LinuCレベル2 201試験 出題範囲 | LPI-Japan
仮想環境を含むLinuxのシステム設計・ネットワーク構築において、アーキテクチャに基づいた設計、導入、問題解決ができるエンジニアであることを認定します。試験センターの他に自宅でも受験できます。受験費用は税込16,500円。

SysVinitの概要

SysVinitは、初めにinitプロセスを開始します。initプロセスは、/etc/inittabに記述されたプロセスを順に起動します。

SysVinitは前のプロセスの終了を待って次のプロセスを起動する事から、いずれかのプロセスの終了までに時間がかかると後続のプロセス全てが遅れることとなり、結果として最終的な起動までに時間がかかるという問題(デメリット)がありました。

現在ではこの問題を改善した、Upstartやsystemdといった新しい仕組みが採用されることが多くなっています。

Red Hat Enterprise Linux 9.6ではSysVinitの新しい仕組み、systemdが使われているため、/etc/inittabファイルを参照すると以下のように記載されています。

[root@RHEL96 ~]# cat /etc/inittab
# inittab is no longer used.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target

Upstartの概要

UpstartはSysVinitの新しいシステムです。SysVinitとの違いは、イベント駆動型である点です。

Upstartではイベントをトリガーとしてジョブを起動し、プロセスが起動させます。

systemdの概要

systemdはUpstartより新しい、Linux OSのシステムとサービスを管理するデーモンです。デーモンの詳細は以下でまとめています。

詳細はsuseのドキュメントで詳しく内容を確認できます。

systemdは、Linuxオペレーティングシステムのシステムおよびサービスマネージャです。

systemdサービスの管理
systemdサービスの説明

initの概要

initはOS起動時に最初に起動されるプロセスで、PID(プロセス ID)は必ず 1 になります。

initは他のすべてのプロセスの親となるプロセスで、SysVinitとも呼ばれ、1970年代から使われています。

SysVinitは、SysVinit ⇒ Upstart ⇒ systemdの順に新しい仕組みとなっています。本質的にはこれらの仕組みはすべてinitを最初に起動する仕組みになっています。

SysVinitを使用するシステムの場合、設定ファイル /etc/inittab の記述に基づいて、自動起動するべきプロセスを立ちあげるなど、アプリケーションレベルの初期化を行います。
以降、init プロセスは全てのプロセスの親プロセスとして起動し続けます。

Upstartやsystemdでは、「/etc/inittab」ファイルは使用されません。

systemctlコマンド

systemdは、systemctlコマンドで操作を行います。

systemctlは、initシステムを制御する中央管理ツールです。systemdシステムおよびサービスマネージャの状態を調べ、制御するために使用されます。

systemdサービスの管理
systemdサービスの説明

サブコマンドを含めた、systemctlコマンドの使い方を表にまとめました。

コマンド説明
systemctl start <ユニット(サービス等)>ユニット(サービス等)を開始
systemctl stop <ユニット(サービス等)>ユニット(サービス等)を停止
systemctl status <ユニット(サービス等)>ユニット(サービス等)の状態を表示
systemctl enable <ユニット(サービス等)>ユニット(サービス等)の自動起動の有効化
systemctl disable <ユニット(サービス等)>ユニット(サービス等)の自動起動の無効化
systemctl mask <ユニット(サービス等)>ユニット(サービス等)の無効化(マスク)
systemctl unmask <ユニット(サービス等)>ユニット(サービス等)の有効化(アンマスク)
systemctl get-defaultデフォルトターゲットの名前を表示
systemctl set-default <ターゲット名>デフォルトターゲットを設定
systemctl list-unitsユニット(サービス等)の一覧を表示する
–type=service サービスユニットを表示
–type=target ターゲットユニットを表示
systemctl isolate他のユニットを停止して対象のユニットを起動

ターゲットとランレベル

Linuxは起動時に.targetファイルによってGUIで起動する、CUIで起動するなどを決定しています。各ランレベルによってCUI、GUIが決まり、ランレベルごとにターゲットが決まっています。

ブートプロセスは、特定のターゲットユニットの実行順に並列化されます。systemdは、/etc/systemd/system/default.targetファイルを使用して、Linuxシステムをブートするターゲットを判断します。このファイルは、グラフィカルログインマネージャをブートするgraphical.targetへのリンクになっています。systemdは、default.targetの依存関係であるすべてのターゲットユニットを有効にし、さらにこれらの依存関係の依存関係すべてを再帰的に有効にします。すべてのサービスが開始されると、システムの使用準備が整い、ログインマネージャが表示されます。これで、システムにログインして、システムの使用を開始できるようになります。

systemdサービスの管理
systemdサービスの説明

systemdでは、システムが起動する際、デフォルトでは「default.target」というターゲットが起動されます。「default.target」はSysVinitでのデフォルトのランレベルに相当します。

ランレベルターゲット
0poweroff.target
1rescue.target
2~4multi-user.target
5graphical.target
6reboot.target

以下のsystemctl set-default <ターゲット名>コマンドで、起動時のターゲットを変更することでGUI、CUIなどでの操作を決めるランレベルを設定します。

systemctl set-default <ターゲット名>

現在設定されているターゲットについては以下のコマンドで行います。

systemctl get-default

たとえば、Red Hat Enterprise Linux 9.6でターゲットとランレベルを確認すると以下のようになります。

[root@RHEL96 ~]# systemctl get-default
graphical.target
[root@RHEL96 ~]# runlevel
N 5

ユニットやターゲットファイルの格納場所

systemctlコマンドで起動するユニット(サービス)や、起動時のターゲットに関するファイルは以下の場所に保存されています。

/usr/lib/systemd/system

Red Hat Enterprise Linux 9.6(RHEL9.6)で実際に確認してみます。

上図のように、ターゲットファイルとユニットファイル(サービスに関するファイル)が保存されています。

タイトルとURLをコピーしました