この記事について
Linux Level 2 取得を目標としている筆者です。
先日 Level 1 を取得しましたが、短期詰め込みの暗記がしんどかったので、Level2はじっくり時間をかけていいから、ちゃんと理解してやっていきたい。
一方で、暗記も暗記で重要。
ということで、理解を深めるためにと、暗記しやすいように、両方の目的で、覚えたことを Qiita に整理してまとめながら受験対策することにしました。
この分野で覚えること
大前提の知識
init プログラムと呼ばれるプログラムの中に、以下の3つの種類がある。
名前 | 説明 |
---|---|
SysVinit | 古いinitプログラム/etc/inittab の設定にしたがって起動する |
systemd | 最近のLinuxの主流 |
Upstart | 初期処理が高速化されている |
SysVinitにおける「ランレベル」に相当する概念が、systemdでは「ターゲット」と呼ばれていて、この対応づけがけっこう試験に出る。
SysVinitにおける ランレベル |
systemdにおける ターゲット |
補足 |
---|---|---|
0 | poweroff.target | |
1 | rescue.target | いわゆるシングルユーザーモード。基本的には、何か障害があったときの調査などで使われるモードなので rescue.target |
2〜4 | multi-user.target | サーバーとして普通に動かす場合のモードはこれ |
5 | graphical.target | GUI |
6 | reboot.target | 再起動用 |
コマンド
inittab
初期システムとしては、最近のLinux では systemd が主流になっているが、それ以前は inittab が使われていた。
inittab が使われているシステムだと、 /etc/inittab
ファイルが存在する。
/etc/inittab
の設定書式と例
id:ランレベル:アクション:実行するコマンド
idは必須で、プロセスのジョブ名として認識される。
ランレベルは、アクションが boot
, bootwait
, sysinit
のいずれかの場合は省略されることが多い(書いてあっても無視される)。
# /etc/inittab
id:3:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
# Script to run when going single user.
su:S:wait:/etc/rc.d/rc.single
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
/etc/inittab
のアクションの種別
アクション指定子 | 意味 |
---|---|
initdefault | デフォルトランレベルの指定 |
once | 指定ランレベルになった際に、一度だけ処理を実行 |
wait | onceと同様だが、プロセスの終了を待つ |
boot★ | ブート時に実行する |
bootwait★ | bootと同様だが、プロセスの終了を待つ |
sysinit★ | bootと同様だが、より先に実行する(ブート時に最優先で実行) |
respawn | プロセスが終了しても自動的に再起動 |
★ ... /etc/inittab
の設定のランレベルの指定不要(空欄にしておく)
systemd
Linuxシステムの初期化およびシステム管理プロセスを担当するためのシステムおよびサービスマネージャ。
ユニット
systemdでは、Unit(ユニット)という単位で各種処理が進められる。
ユニットには、以下がある。
ユニット名 | 説明 |
---|---|
device | udevによって認識されたデバイス |
mount | ファイルシステムをマウントする(/etc/fstab から自動生成) |
service | 各種のサービスを起動・停止する |
target | ユニットをグループ化するユニット |
systemd の設定ファイルを置くディレクトリ
ディレクトリ | 中身(格納しているもの) | 優先度 |
---|---|---|
/usr/lib/systemd/system または /lib/systemd/system (ディストリビューションによる) |
永続的なユニット・ターゲットの定義ファイルが置かれる(パッケージのインストールなどで格納先となる) | 低 |
/run/systemd/system | 再起動すると削除されるディレクトリ | 中 |
/etc/systemd/system | カスタム用 起動時に開始するターゲットを定める default.target はここに置く(通常はシンボリックリンク) |
高 |
usr/lib/systemd/system が永続的な定義ファイルなので、なんとなく起動時の開始ターゲットもここにあると思ってしまいがちだが、実際は /etc/systemd/system である。
上記のディレクトリを ls すると、以下のようなファイルが入っている
ubuntu@ip-10-0-0-20:/etc/systemd/system$ ls
chronyd.service snap-core20-2015.mount
cloud-final.service.wants snap-core20-2105.mount
cloud-init.target.wants snap-lxd-24322.mount
dbus-org.freedesktop.resolve1.service snap-snapd-20290.mount
dbus-org.freedesktop.timesync1.service snap-snapd-20671.mount
emergency.target.wants snap.amazon-ssm-agent.amazon-ssm-agent.service
final.target.wants snap.lxd.activate.service
getty.target.wants snap.lxd.daemon.service
iscsi.service snap.lxd.daemon.unix.socket
mdmonitor.service.wants snap.lxd.user-daemon.service
multi-user.target.wants snap.lxd.user-daemon.unix.socket
xxx.target
xxx.service
xxx.wants
xxx.timer
xxx.mount
xxx.socket
起動スクリプト(init)
ファイルの実体
起動スクリプトのファイルの実体は、 /etc/init.d/
配下に置かれている
ランレベルに応じた起動スクリプトのシンボリックリンク
/etc/rc[0-6].d
ディレクトリ配下に、 /etc/init.d/
へのシンボリックリンクが配置されている。
こんな感じ。
ubuntu@ip-10-0-0-20:/etc/rcS.d$ ls
K01iscsid S01cryptdisks S01kmod S01procps S01ufw
K01open-iscsi S01cryptdisks-early S01lvm2 S01screen-cleanup
S01apparmor S01keyboard-setup.sh S01plymouth-log S01udev
例えば上記の K01iscsid の場合、実体は /etc/init.d/iscsid
である。
スクリプトの先頭のKは Kill, S は Start を意味する。
スクリプトは K -> S の順で実行され、各アルファベットの後に続く2桁の数字が少ない順に実行される。
数字も同じ場合は、そのあとに続くアルファベット順に実行される。
update-rc.d コマンド
バージョン6.0より前のDebian系ディストリビューションで、各種サービスを自動起動するかどうかの設定を行う。
コマンド例
update-rc.d [オプション] サービス 操作 [優先度] [ランレベル - 複数の場合はスペース区切りで、最後に.(ドット)]
# S25crond を /etc/rc{3,5} に作ってね
update-rc.d crond start 25 3 5 .
操作の選択肢
操作 | 説明 |
---|---|
start | Sで始まるリンクを作る |
stop | Kで始まるリンクを作る |
defaults | ランレベルに応じて、SかKで始まるリンクを作る |
remove [-f] | リンクを削除する (-fをつけると強制) |
「自動起動しないように設定」する場合は stop の操作では足りない(ランレベルを抜けたときに kill するだけだから)
-> この場合は、 remove -f によってSで始まるリンクを削除する対応が必要。
chkconfig コマンド
RedHat系の6.xまでのディストリビューションで、各種サービスを自動起動するかどうかの設定を行う。
設定コマンド
chkconfig [--level ランレベル] サービス on|of|reset
ランレベル は --level 234
のように複数指定することも可能、省略も可能。
確認コマンド
chkconfig --list [サービス]
自動起動するかどうかを設定するコマンド
insserv
SUSE 系やバージョン 6.0 以降の Debian 系ディストリビューションで利用される。
使い方↓
その他の暗記事項
以上!
勉強が進んだら適宜追記・修正などしていきます。