Linux起動シーケンスとは
Linux起動シーケンスとは、コンピュータの電源を入れてからログインして、Linuxを使用できるようにするまでの流れ**のことです。
一般的には、Linuxの起動シーケンスは以下の通りです。
- 電源ON
- BIOS起動
- ブートデバイス(HDDなど)確認
- GPT(ブートローダ位置情報など記載の領域)読み込み
- ブートローダ(OS起動プログラム格納の領域)読み込み
- カーネル起動
- 初期プロセス起動
- 起動対象サービス確認
- サービス起動
- ログイン画面表示
カーネルとは
カーネルとはOSの中の中核です。
簡単に言うと、OSの心臓です。
カーネルは、ユーザやOSが直接やりとりできません。
シェルとは
シェルとは、OSとカーネル間を持ち、OSを操作できるソフトウェアのことです。
つまり、OSとカーネルの翻訳者のようなものです。
ここまでのOS・カーネル・シェルをまとめている図があります。
参考:note(とよももさん)
シェル(shell)は貝という意味で、カーネルを包み込んでいることがわかります。
このように、カーネルとやりとりできるのがシェルということです。
それでは、私たちユーザはどのようにシェルとやりとりするのでしょうか。
ユーザはOSやシェルと直接やりとりすることはできません。
OSやシェルとやりとりするには、アプリケーションを介して行います。
シェルとのやりとりを行う際に使用するアプリケーションが、コマンドプロンプト(Windows)またはターミナル(Mac)です。
この流れが、以下の図の通りです。
参考:note(とよももさん)
シェルの種類
一般的にシェルは、UNIX系OSのシェルを指すことが多いです。
UNIX系のシェルにもいくつかの種類がありますが、ここでは代表的なものだけ紹介します。
- sh:最も古いシェル。
- bash:shの上位互換。最も標準的。
- tcsh:C言語と相性が良い。
- zsh:さまざまなシェル機能を持った万能型。
シェルの実行・確認方法
シェルの実行はシンプルに以下のコマンドで行います。
$ シェル名
実行の確認はpsコマンドを実行し、プロセスが増えているかを確認します。
$ ps
また、シェル実行環境プロセスを終了するには、exitコマンドを実行します。
$ exit
systemd
systemdはサービスを起動するための初期プロセスです。
カーネル(PPID:0)から起動され、PID(プロセス番号)は1です。
PPIDとPIDの確認は「ps -ef」コマンドで行います。
$ ps -ef
ターゲットユニットファイル
ターゲットユニットファイルとは、サービスユニットをグループ化しているファイルです。
用途ごとに様々なターゲットユニットファイルが存在します。
ターゲットユニットファイルを読み込むことで、Linuxの動作モードが決定されます。
実際のターゲットユニットファイルは、以下のディレクトリ配下に「.target」という末尾で存在するファイルです。
/usr/lib/systemd/system/(*.target)
主なターゲットユニットファイル例は以下の通りです。
ユニットファイル名 | 説明 |
---|---|
poweroff.target | システム停止用 |
rescue.target | rootユーザのみ操作可能 |
multi-user.target | 複数ユーザが操作可能 |
graphical.target | GUIで操作(一般的にはOFF) |
reboot.target | 再起動用 |
emergency.target | rootユーザのみ操作可能(rescueよりも緊急) |
systemctl (オプション) (サブコマンド)
ターゲットユニットを管理する。(その他用途もあり)
主なオプションは以下。
オプション名 | 機能 |
---|---|
--type=ユニットタイプ | 操作対象のユニットタイプを指定する |
主なサブコマンドは以下。
ユニットファイル名 | 説明 |
---|---|
get-default | ターゲットユニットファイルを確認する |
set-default ターゲット | ターゲットユニットファイルを設定する |
isolate ターゲット | ターゲットユニット(動作モード)を変更する(--typeオプションと併用) |
list-units | 現在動作しているユニット一覧を確認する |
サービスユニットファイル
サービスユニットファイルとは、サービスの起動・停止などの情報が記載されているファイルです。
ターゲットユニットファイルを読み込みに応じて、サービス(プロセス)を起動します。
実際のサービスユニットファイルは、以下のディレクトリ配下に「.service」という末尾で存在するファイルです。
/usr/lib/systemd/system/(*.service)