Linux起動の流れ_コマンド操作(初心者)

ITインフラ

▪️目的と背景

前回の記事では、Linuxを実際に操作して必要最低限のシステムアーキテクチャ確認コマンドを紹介しました(LPICレベル1)。

前回の記事はこちら→「https://lovelabengineer.com/2026/05/04/linux基本コマンド操作_システムアーキテクチャ確認/

今回は、Linuxが実際に「どういう流れを経て起動していくのか」に焦点を当てていきます。OSの起動の流れを知ることはシステムを深く理解するという点で非常に重要です。システムの仕組みを構造的に理解することに繋がります。
例えば、実際にサーバを構築するとき、運用時に何かOS周りのトラブルがあった際などに効果抜群です。

まずは、「システム起動の流れ」について解説します。そのあと実際にコマンドを操作してその流れを体感的にも理解していきましょう。

▪️システム起動の流れ(Linux)

システムが起動するまでの流れは、そのコンピュータのアーキテクチャによって異なります。今回は一般的なコンピュータ(x86/x86_64アーキテクチャ)のシステム起動の流れについて解説します。
まず、ざっくりいうと以下の流れでシステムは起動します。

電源を入れる。電源を入れると「BIOS/UEFI」が起動する。この「BIOS/UEFI」が起動デバイスに書き込まれた「ブートローダー」を読み込む

② 「ブートローダー」が「カーネル」を「メモリ」上に読み込む

③ メモリに読み出された「カーネル」がメモリの初期化や「ルートファイルシステム(初期RAMディスク)」をマウントする。この「ルートファイルシステム(初期RAMディスク)」にはシステム起動に必要な「デバイスドライバ」が組み込まれており、これによりハードディスク等のデバイスにアクセスできるようになる

④ 「ルートファイルシステム」が使えるようになると、カーネルは最初のプロセスである「systemd」もしくは「init(最近は使われない)」を実行して、さらに他の必要なプロセスを起動していく

様々な用語が出てきましたが、わからない用語があったら以下の記事を参照してください。解説しています。
→「https://lovelabengineer.com/2026/03/28/os基盤周りの基本知識/

ざっくりいうと、「BIOS/UEFI」→「ブートローダー」→「カーネル」→「systemd」という順番です。以下からは実際にコマンドを実行してこれらが起動した形跡を追っていきましょう。

▪️起動時のログ確認

システムを起動した際、以下のコマンドを使用してログを確認することで、起動時のカーネルの操作について確認できます。

dmesg ・・・ システム起動時のカーネルの挙動確認

「dmesg」コマンドで確認もできますが、システム起動時のログは「/var/log/message」にも保存されるのでこのコマンドでは「cat」コマンド「head」コマンドを使用することで最新の上位20のログを表示しています。
「dmesg」も「/var/log/message」も収まりきれなくなった古いメッセージは消えていきます。

journalctl ・・・ システム起動時のカーネルの挙動確認

もしプロセスに「Systemd」を使用している場合、journalctlコマンドでもシステム起動時のカーネルのログを確認できます。「journalctl -kb」コマンドで確認できます。

▪️「Sysvinit」について

以前までは、システムの起動手順に関してはUNIX系OSでは「Sysvinit」が使われていました。ざっくりいうと「Sysvinit」では「サービスを順次起動」していきます。順次起動なのでこのサービスを立ち上げたらこのサービスを立ち上げるといったようにサービスの前後関係が重要になります。言い方を変えると前のプロセスが起動できなかったり、時間がかかるとその後のサービスも立ち上げられません。

しかし、このやり方では必要のないサービスまで立ち上げていたため、リソースの効率的な活用の観点から見ると適したやり方とは言えなくなりました。
そのため現在では必要なプロセスのみを立ち上げる「Systemd」が主流です。

「Sysvinit」の起動手順は以下です。
① initプロセスが「/etc/inittab」ファイルを読み込む
② initプロセスが「/etc/rc.sysinit」スクリプトを読み込む
③ initプロセスが「/etc/rc」スクリプトを実行する
④「/etc/rc」スクリプトがさらにランレベルに適した別のスクリプトを実行する

▪️「Systemd」について

現在では主流なので「Systemd」を使ったサービス起動です。順次サービスを立ち上げる「Sysvinit」とは違って、「Systemd」では「このサービスを立ち上げたらこのサービスをたちあげる」と言ったように依存関係に基づいてサービスを立ち上げます。
だから、必要なサービスしか立ち上げないのでリソースの無駄を削減します。

「Systemd」では「デーモン」というメモリに常駐して処理を行うプロセスが各々の役割に応じてプロセスを実行します。そのためデーモンは複数存在します。ちなみにこのプロセスは「Unit」という単位で分かれています。

例えば、以下では「systemctl start httpd」コマンドを実行しています。
これにより「Webサーバー」を構築する際に必死のプロセス「httpd」を起動しています。このように「Systemd」では必要なサービスをその都度立ち上げることができます。

またサーバーを立ち上げた際に、そのプロセスが実行されるように設定することも可能です。
その場合、「systemctl enabled httpd」を実行します。

▪️まとめ

今回はシステム起動の手順について解説しました。
次回以降もLinuxに関する記事をどんどん掲載していきます。ぜひ気軽に読んでください。

コメント

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