Help us understand the problem. What is going on with this article?

initまとめ(ざっくり)

initとは

initは他のプロセスを起動させる役割を持っており, 全てのプロセスの親である.
Linuxカーネルの起動後, 一番最初に起動される.
PIDは1が付与されている.
以下はPIDが1かどうかの確認と, 全てのプロセスの親になっているかどうかの確認.

$ ps 1
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:01 /sbin/init maybe-ubiquity
$ pstree
systemd─┬─accounts-daemon───2*[{accounts-daemon}]
        ├─atd
        ├─cron
        ├─dbus-daemon
        ├─irqbalance───{irqbalance}
        ├─login───bash
        ├─lvmetad
        ├─lxcfs───2*[{lxcfs}]
        ├─networkd-dispat───{networkd-dispat}
        ├─polkitd───2*[{polkitd}]
        ├─rsyslogd───3*[{rsyslogd}]
        ├─snapd───11*[{snapd}]
        ├─sshd───sshd───sshd───bash───pstree
        ├─systemd───(sd-pam)
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-network
        ├─systemd-resolve
        ├─systemd-timesyn───{systemd-timesyn}
        ├─systemd-udevd
        └─unattended-upgr───{unattended-upgr}

initの歴史

init 説明
SysVinit 最初期のinit.
プロセスの起動を並列処理できないといった欠点を持つ.
launchd 2005年に登場.
macOSで採用されている.
Upstart 2006年に登場.
SysVinitと完全な互換性を持ちながらも並列処理に対応していた.
しかし, プロセスが起動する条件を設定ファイルに記述する必要があり, 条件が揃うと無条件で起動/停止されるため, 不必要な操作が行われる可能性があった.
Systemd RedHat社のLennart Poettering, Kay Sieversらによって2010年にリリースされた.
起動を高速にし, 設定をシンプルにすることを設計思想としている.
批判的な意見もあったが, 2011年頃からFedoraを皮切りに主要なLinuxディストリビューションで採用され始めた.
RHEL, CentOS, Debian, Ubuntu, Arch Linux等で採用されている.
Upstartと違い, 必要なプロセスのみを起動できる作りになっている.
並列処理が可能.
OpenRC Gentoo Linuxで採用されているinit.

SysVinit/Upstartの起動の流れ

SysVinit/Upstartではサービスと呼ばれる単位で処理を管理している.
起動の流れとしては, まず /sbin/init がPID=1として実行され, その後, /etc/inittab によって2つのファイルが実行される.
まず1つ目は, /etc/rc.d/rc.sysvinit によってシステムの初期化(ファイルシステムの整合性チェック, マウント処理, スワップの有効化等)が行われる.
そして2つ目は, /etc/rc.d/rc によって /etc/init.d/ 以下に存在するファイルが順番に実行され, サービスが起動される.

また, SysVinit/Upstartは service コマンドによって操作することができる.

Systemdの起動の流れ

SystemdはUnit(後述)と呼ばれる単位で処理を管理している.
Systemd環境でも /sbin/init は存在するが, 大抵は /lib/systemd/systemd へのシンボリックリンクとなっている.
起動の流れとしては, まず /usr/lib/systemd/systemd が起動する.
その後, Unitの依存関係を検索し, 有効化すべきUnitの一覧が作成される.
一覧を基に, 順序関係に基づいてUnitを順番に有効化する.
順序関係を持たないUnitは並列に起動処理が行われる.
ちなみに設定ファイルは /usr/lib/systemd/system/etc/systemd/system に配置されている.
前者はシステムが用意したデフォルトの設定ファイルで, 後者は管理者がカスタマイズするための設定ファイルである.
同名の設定ファイルがある場合, /etc/systemd/system が優先される.

また, Systemdは systemctl コマンドで操作することができる.

Unitとは

/usr/lib/systemd/system/etc/systemd/system 以下に配置されているファイルは, 拡張子が主に以下の5つのどれかになっており, 拡張子によってUnitの種類が判別される.

Unit 説明
service サービス(デーモン)
target ターゲット(複数のUnitをグループ化したもの)
mount マウントポイント
swap スワップ領域
device デバイス

journald

journaldはSystemd環境で標準で提供されているログの管理サービスで, システムやサービスのログを収集している.
また, Linuxではrsyslogというログの管理サービスが存在するが, これはjournaldが必要に応じてrsyslogに転送している.

また, journaldは, journalctl コマンドで操作することができる.

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away