この記事はLinuC Level1 主題1.01.3「ブートプロセスとsystemd」に対応した要点解説です。試験で問われる範囲に絞り、電源オンからログインまでの流れ、systemctlの主要サブコマンド、ブートターゲットの切替と永続化を整理しました。
LinuC Level1 完全攻略マップ(全39サブ項目)へ戻る
目次
- この記事でできるようになること
- ブートプロセスの順序
- initシステムとinittab
- systemdのユニット
- systemctlでサービスを操作する
- ブートターゲットとデフォルト設定
- 停止・再起動のコマンド
- よくある質問(FAQ)
- まとめ
- 模擬問題にチャレンジ(ランダム出題)
1. この記事でできるようになること
LinuC 主題1.01.3 の出題範囲のうち、本記事で押さえる要点:
- ブートプロセスの順序(UEFI/BIOS → ブートローダ → カーネル → init/systemd → 各サービス)
- ブートローダ(GRUB2)の役割とカーネルの役割
/etc/inittabを使うinit(SysVinit)と使わないinit(systemd / Upstart)- systemdのユニット種別(
.service/.target/.socket/.mount/.timer/.device/.path) systemctlの主要サブコマンド(start/stop/restart/reload/enable/disable/is-active/status/list-units)- ブートターゲット(
multi-user/graphical/rescue/emergency/poweroff/reboot)の使い分け get-default/set-default/isolateの違いと、default.targetのシンボリックリンクを直接書き換える方法systemctl poweroff/halt/reboot/suspend、および従来のreboot/shutdown -r nowの使い分け
2. ブートプロセスの順序
Linuxの電源オンからログインまでは、固定された順序で処理が進みます。試験では並び替え問題として頻出します。
- UEFI / BIOS 起動
POST(Power-On Self Test)でハードウェアを診断し、ブートメディアの優先順位を決める。
- ブートローダ起動(GRUB2 等)
OS選択メニューを表示し、選択されたカーネルと
initramfsをメモリへ読み込んでカーネルに制御を渡す。 - カーネル起動
ハードウェアを初期化し、ルートファイルシステムをマウント。最初のユーザプロセス(PID 1 = init / systemd)を起動する。
- init(systemd)起動
PID 1として
default.targetを読み、必要なユニットを依存順に並列起動。 - 各サービスの起動・ログイン可能状態
sshd・cron・Display Manager などが立ち上がり、コンソール/SSH/GUIログインが受付可能になる。
2-1. ブートローダ(GRUB2)の役割
ブートローダはOSカーネルを起動する前段のプログラムです。役割は次の通り。
- 複数のカーネル・複数OSからどれを起動するかの選択メニューを表示する
- 選択されたカーネルと
initramfsをメモリに読み込む - カーネルパラメータを指定してカーネルに制御を渡す
GRUB2 が最も一般的です。POST(ハードウェア診断)はUEFI/BIOSの役割で、ブートローダは行いません。
2-2. カーネルの役割
Linuxカーネルは OS の中核ソフトウェアで、次の責務を持ちます。
- CPU・メモリ・デバイスなどハードウェア資源の管理
- プロセス管理、ファイルシステム、ネットワークなどシステム基盤機能の提供
- GRUBからメモリへロードされ、初期化を終えると PID 1 のプロセス(init / systemd)を起動
Webブラウザやエディタなどのアプリ本体はカーネルに含まれません。GUIログイン画面も Display Manager というユーザ空間プログラムが提供します。
3. initシステムとinittab
initは PID 1 として最初に起動し、他のサービス群を順に立ち上げる役割を持ちます。Linuxでは歴史的に3世代のinitが使われてきました。
| init | 世代 | 設定の持ち方 | /etc/inittab |
|---|---|---|---|
| SysVinit | 古典的 | /etc/inittabとランレベル別の/etc/rc*.d/ |
使用する |
| Upstart | 過渡期 | イベント定義ファイル(/etc/init/*.conf) |
使用しない |
| systemd | 現代の主流 | ユニットファイル(.service / .target など) |
使用しない |
ポイントは「/etc/inittabを使うのはSysVinitだけ」という点です。systemdとUpstartはいずれも/etc/inittabを使いません。BusyBox init や runit など別実装の多くも独自の設定を使います。
systemdを中心に操作するコマンドがsystemctlです。サービスの起動・停止、ターゲットの切替、ユニット一覧の取得までをまとめて扱います。ログ参照はjournalctlという別コマンドになります。
4. systemdのユニット
systemd は「ユニット」という単位で全てを管理します。ユニットは拡張子で種別が分かります。
| 拡張子 | 役割 | 例 |
|---|---|---|
.service |
サービス(デーモン) | sshd.service |
.target |
ユニットのグループ(ランレベル相当) | multi-user.target |
.socket |
ソケット(アクティベーション用) | cups.socket |
.mount |
マウントポイント | tmp.mount |
.timer |
タイマー(cron代替) | apt-daily.timer |
.device |
デバイス | dev-sda.device |
.path |
パス監視(ファイル変更で発火) | cups.path |
試験では「ユニットとして正しいものを選べ」という形で出題されます。.config、.runlevel、.inittab、.rc、.kernel などはユニットには存在しないので除外できます。
4-1. ユニット一覧の確認
現在ロードされているユニットの一覧を取得するのはlist-units。ファイルとして定義されているユニット全体を見たいときはlist-unit-filesです。
# 現在ロード中のユニット一覧
$ systemctl list-units
# targetユニットだけに絞る
$ systemctl list-units --type=target
# ファイルとして定義されているユニット全体
$ systemctl list-unit-files
list-unitsの典型的な出力は「Unit / Load / Active / Sub / Description」のテーブル形式です。
UNIT LOAD ACTIVE SUB DESCRIPTION
sshd.service loaded active running OpenSSH server daemon
nginx.service loaded active running A high performance web server
...
複数ユニットを列挙するこの形式を見たらlist-unitsと判断します。statusは特定ユニットの詳細ログまで含めて出すので出力形式が異なります。
5. systemctlでサービスを操作する
個別サービス(例: sshd、httpd、postfix、mysqld、nginx)を操作するsystemctlの主要サブコマンドです。
| サブコマンド | 動作 | 例 |
|---|---|---|
start |
サービスを今すぐ起動 | systemctl start mysqld |
stop |
サービスを今すぐ停止 | systemctl stop postfix |
restart |
停止してから起動し直す(既存接続は切れる) | systemctl restart nginx |
reload |
プロセスを維持したまま設定ファイルだけ再読込 | systemctl reload postfix |
enable |
次回起動時から自動起動するよう登録 | systemctl enable httpd |
disable |
自動起動登録を解除 | systemctl disable httpd |
status |
状態・最近のログ抜粋・PID等を表示 | systemctl status httpd |
is-active |
稼働中かどうかだけ端的に返す(active / inactive / failed) | systemctl is-active httpd |
is-enabled |
自動起動登録の有無を返す | systemctl is-enabled httpd |
5-1. startとenableは別物
試験で混同しやすいのがstartとenableです。
systemctl start httpd― 今すぐhttpdを起動する(次回起動時の挙動は変わらない)systemctl enable httpd― 次回起動から自動起動するよう登録する(その場では起動しない)
両方まとめて行いたい場合はsystemctl enable --now httpd。chkconfigやserviceはSysVinit時代のコマンドで、systemd環境では基本的に使いません。
5-2. stopとdisableも別物
systemctl stop postfix― 今動いているpostfixを止めるsystemctl disable postfix― 自動起動の登録を外す(今動いているものは止めない)
5-3. restartとreloadの違い
restartはプロセスを一度停止してから起動し直すので既存接続は切れます。reloadはSIGHUP等でプロセスに設定ファイルだけ読み直させるもので、接続を切らずに設定変更を反映できます。本番サービスで設定だけ変えたいときはreloadが安全です。
5-4. 稼働確認はis-active
「稼働中か」だけを端的に知りたいときはis-activeです。詳細ログも見たいときはstatus、自動起動登録の有無を問うのはis-enabledで観点が異なります。
$ systemctl is-active httpd
active
$ systemctl is-enabled httpd
enabled
6. ブートターゲットとデフォルト設定
ブートターゲットはSysVinit時代のランレベルに相当する概念で、「システムが今どの状態にあるか/どの状態で起動するか」を表します。
6-1. 主要ターゲット
| ターゲット | 旧ランレベル | 用途 |
|---|---|---|
poweroff.target |
0 | 電源オフ |
rescue.target |
1, s, S | シングルユーザモード(rootシェル+最小サービス) |
multi-user.target |
2, 3, 4 | マルチユーザー CUI(サーバ運用の標準) |
graphical.target |
5 | マルチユーザー GUI(デスクトップ運用) |
reboot.target |
6 | 再起動 |
emergency.target |
– | 緊急モード(/を読み取り専用でマウント、rescueよりさらに最小) |
default.target |
– | デフォルト起動ターゲットへのシンボリックリンク |
サーバ運用としてはCUI中心のmulti-user.targetが一般的、GUIも必要ならgraphical.targetを選びます。メンテナンス用途ではrescue.targetか、より深刻な障害用のemergency.targetを使います。basic.targetは他のターゲットから依存される中間ターゲットで、通常単独で指定するものではありません。
6-2. 現在のデフォルトターゲットを確認する
次回起動時にどのターゲットに入るかを確認する方法は2つあります。
# systemctlのサブコマンドで取得
$ systemctl get-default
graphical.target
# default.target はシンボリックリンクなので ls -l でリンク先を確認してもよい
$ ls -l /etc/systemd/system/default.target
lrwxrwxrwx 1 root root 40 ... /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target
systemctl list-targetsやsystemctl show-targetといったコマンドは存在しません。runlevelはSysVinit用です。
6-3. デフォルトターゲットを変更する(次回起動から反映)
永続的に変更するのはset-defaultです。
# 次回起動からCUI運用に
$ sudo systemctl set-default multi-user.target
# 次回起動からGUI運用に
$ sudo systemctl set-default graphical.target
set-defaultの実体は/etc/systemd/system/default.targetのシンボリックリンクを張り替える操作です。そのため、直接ln -sfで貼り替えても同じ結果になります。
# systemctlを使わず直接リンクを張り替える
$ sudo ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
6-4. 稼働中のシステムを即切り替える(isolate)
再起動せずにその場でターゲット相当の切替(例: multi-user → graphical)を行うのはisolateです。
# いまGUIを落としてCUIのみへ
$ sudo systemctl isolate multi-user.target
# CUIからGUIへ戻す
$ sudo systemctl isolate graphical.target
isolateは「指定ターゲットに必要なユニットだけを残し、不要なユニットは停止する」動作です。再起動するとdefault.targetに戻るため一時的な切替になります。永続化したい場合はset-defaultを併用します。
6-5. set-default と isolate の違い
| サブコマンド | いつ反映されるか | 永続性 |
|---|---|---|
systemctl set-default <target> |
次回起動から | 再起動後も維持 |
systemctl isolate <target> |
今すぐ | 再起動で元に戻る |
「今すぐ切替+次回以降も維持」したい場合は両方を実行します。enableはサービスの自動起動登録用で、ターゲット切替とは別物です。
6-6. poweroff.targetを明示的に start した場合の挙動
poweroff.targetは「電源オフの状態」を表すターゲットです。これを明示的にstartするとシステムはその状態へ遷移する、つまり電源オフになります。
# システムが停止(電源オフ)する
$ sudo systemctl start poweroff.target
実質的にsystemctl poweroffと同等の動作です。
6-7. rescueモードから通常起動状態に戻す
systemctl rescue(またはisolate rescue.target)でシングルユーザモードに入ってメンテナンスしたあと、通常運用状態に戻す方法は複数あります。
systemctl isolate multi-user.target― CUIサーバ状態へ切替systemctl isolate graphical.target― GUIデスクトップ状態へ切替systemctl default―default.targetで指定された状態に復帰reboot― 一度再起動して通常ブート
systemctl rescue --exitやshutdown haltといった書式は存在しません。
7. 停止・再起動のコマンド
systemdが稼働する環境ではsystemctlのサブコマンドで停止・再起動・サスペンドをすべて扱えます。
# 電源オフ
$ sudo systemctl poweroff
# システム停止(電源は切らず)
$ sudo systemctl halt
# 再起動
$ sudo systemctl reboot
# サスペンド(一時停止)
$ sudo systemctl suspend
# ハイバネート(休止状態)
$ sudo systemctl hibernate
停止(電源オフ)として扱われるのはpoweroffとhaltです。rebootは再起動、suspendはサスペンド、defaultはデフォルトターゲットへの遷移で、いずれも電源オフではありません。
7-1. 再起動のやり方
今すぐ再起動したい場合、次のいずれも使えます。
systemctl rebootrebootshutdown -r now
haltはシステム停止、poweroffは電源オフで、これらは再起動ではありません。
7-2. 従来コマンドはsystemctlのシンボリックリンク
systemd環境では、従来のshutdown/reboot/halt/poweroffも内部的にsystemctl相当の動作になります。
$ readlink -f /sbin/shutdown /sbin/reboot /sbin/halt /sbin/poweroff
/usr/bin/systemctl
/usr/bin/systemctl
/usr/bin/systemctl
/usr/bin/systemctl
8. よくある質問(FAQ)
systemdで/etc/inittabを編集する意味はあるか?
systemdは/etc/inittabを参照しません。ランレベルに相当する設定はsystemctl set-defaultでdefault.targetのシンボリックリンクを張り替える形になります。Upstartも/etc/inittabを使わず独自のイベント定義ファイルを使います。
startとenableは何が違うか?
startは今すぐ起動する操作で、次回起動時の挙動は変えません。enableは次回起動時に自動起動するよう登録する操作で、その場では起動しません。両方まとめてやるならsystemctl enable --now <unit>です。
isolateとset-defaultの違いは?
isolateは今すぐ切替えですが再起動で元に戻ります。set-defaultは次回起動から適用で再起動後も維持されます。「即変更+永続化」したい場合は両方を実行します。
restartとreloadはどう使い分けるか?
既存接続を切らずに設定ファイルの変更だけ反映したい場合はreload(SIGHUPで設定再読込)。プロセス自体を作り直したい場合はrestart(停止→起動)です。サービスによってはreloadが未実装でrestart相当の動作になります。
systemctl get-default以外でデフォルトターゲットを調べる方法は?
default.targetは/etc/systemd/system/default.targetに置かれたシンボリックリンクです。ls -l /etc/systemd/system/default.targetでリンク先(multi-user.targetやgraphical.target)を見れば同じ結果が得られます。
9. まとめ
- ブートプロセスは UEFI/BIOS → ブートローダ → カーネル → init(systemd) → 各サービス の順
- ブートローダは OS 選択とカーネル+initramfsロード、POST は UEFI/BIOS 側
/etc/inittabを使うのは SysVinit のみ。systemd と Upstart は使わない- systemd のユニット:
.service/.target/.socket/.mount/.timer/.device/.path - サービス操作:
start/stop/restart/reload/enable/disable、稼働確認はis-active - ユニット一覧は
systemctl list-units、典型的な出力は Unit/Load/Active/Sub/Description のテーブル - デフォルトターゲット: 確認は
get-defaultまたはls -l /etc/systemd/system/default.target - デフォルト変更:
set-default(次回起動から)。実体はdefault.targetのシンボリックリンク張替でln -sfでも同等 - 即切替:
isolate(再起動で元に戻る)。永続化したいときはset-defaultと併用 - サーバ運用=
multi-user/graphical、メンテ=rescue/emergency systemctl start poweroff.targetはsystemctl poweroffと同等- 停止:
poweroff/halt、再起動:systemctl reboot/reboot/shutdown -r now
10. 模擬問題にチャレンジ(ランダム出題)
ここまでの内容を本試験に近い形で確認できます。問題数を選んで「出題スタート」を押すと、主題1.01.3の問題プールからランダムに出題されます。選択肢をクリック/タップすると、正誤と解説がその場で表示されます。
合格ライン目安:75%以上。もっと幅広く解きたい場合は LinuC 模擬問題ポータル で他の分野と合わせて挑戦できます。




コメント