今回もシステムアーキテクチャの章の続きを書いていこうと思います。
今回はランレベルについてのお話をしていきます。
Contents
ランレベルとは
SysVinitやUpstartで起動するLinuxではランレベルと呼ばれるいくつかの動作モードがあります。
ランレベルとは、どのようにLinuxを起動するか決定する起動方法のことです。
起動時のランレベルによって、どのようにLinuxを起動させるのかを決定します。
設定されているランレベルは以下の通りです。
ランレベル | RedHat系 | Debian系 |
0 | 停止 | 停止 |
1 | シングルユーザモード | シングルユーザモード |
2 | マルチユーザモード(CUI) | マルチユーザモード |
3 | マルチユーザモード(CUI) | マルチユーザモード |
4 | 未使用 | マルチユーザモード |
5 | マルチユーザーモード(GUI) | マルチユーザモード |
6 | 再起動 | 再起動 |
S or s | シングルユーザーモード | シングルユーザモード |
それぞれの動作を見ていきましょう。
ランレベル1:シングルユーザモード
シングルユーザモードは、メンテナンス専用のモードです。
メンテナンスを行うときや、システム起動時に異常が発生した場合にシングルユーザモードとしてLinuxが起動します。
シングルユーザモードでは、rootユーザのみ操作が可能であり、ネットワークへの接続なども一切行いません。
ちなみに、Systemd以降のシステムではエマージェンシーモードと呼ばれています。
ランレベル2,3,4:マルチユーザモード(CUI)
ランレベル2,3,4はマルチユーザモード(CUI)となっています。
マルチユーザモードとは、通常の起動状態のことでネットワークへの接続も行います。
CUIでの起動を行うため、文字のみでの操作が可能です。
多少の動作の違いから、ランレベルが分かれていますが、ほとんどの場合ランレベル3がCUIという認識です。
ランレベル5:マルチユーザモード(GUI)
ランレベル5は、マルチユーザモード(GUI)となっています。
GUIでの起動を行います。
要するにいつものモードですね。
ランレベル0,6:シャットダウン、再起動
ここからは少し特殊なモードです。
ランレベル0は、システムのシャットダウンとなっています。
ランレベル0として、起動するとシステムはシャットダウンします。
ランレベル6は、システムの再起動となっています。
ランレベル6として、起動するとシステムは再起動します。
ランレベルは、Redhat系とDebian系とで多少動作が異なりますが、ほとんどないも同然なので、あまり気にしなくても問題はありません。
ランレベルの確認
ランレベルは、「runlevel」コマンドで確認することができます。
特にオプションはありません。
表示形式としては、「ひとつ前のランレベル 現在のランレベル」となっています。
そのため、この場合一つ前はランレベル1で、現在はランレベル3であることがわかります。
ランレベルの変更
ランレベルの変更は「init」コマンド、または「telinit」コマンドで変更します。
この二つに特に機能に違いはありません。
構文:init <ランレベル>
上記のコマンドを入力すると、ランレベル5に移行します。
※rootユーザでのみ実行可能です。
他のランレベルへの変更も行ってみましょう。(特に0と6)
デフォルトのランレベルの変更
※この手順はSysVinitとUpstartが搭載されているシステムでのみ実行可能です。
デフォルトのランレベルを変更することが可能です。
そのためには、「/etc/inittab」ファイルを編集します。
中の記述を探すと、「id:ランレベル:initdefault」という行が見つかるはずです。
このランレベルの部分を自分がデフォルトで起動したいランレベルへ変更しましょう。
※この時ランレベルを0か6に指定しないようにしましょう。
システムが起動できなくなり、復旧作業が必要となります。
Systemdの場合
Systemdでデフォルトの起動モードを変更する場合は、少し手順が必要です。
まず、Systemdでは、起動モードをランレベルではなくtargetという単位で管理をしています。
そして、デフォルトで起動するターゲットを変更することで、起動モードを変更することができます。
まずは、ランレベルとターゲットとの対応表を見ていきましょう。
ランレベル | ターゲット | 起動モード |
0 | poweroff.target | 停止 |
1 | rescue.target | シングルユーザモード |
2 | multi-user.target | マルチユーザモード |
3 | multi-user.target | マルチユーザモード |
4 | multi-user.target | マルチユーザモード |
5 | graphical.target | マルチユーザモード |
6 | reboot.target | 再起動 |
S or s | rescue.target | シングルユーザモード |
例えば、CUIで起動を行いたい場合は、「multi-user.target」を起動するようにすればいいわけですね。
それでは、実際の手順を見ていきましょう。
まず、デフォルトのランレベルは「/etc/systemd/system/defaults.target」として格納されています。
lsコマンドで確認してみると、/etc/systemd/system/default.target – > /lib/systemd/system/graphical.targetとなっていることがわかります。
これは、default.targetがgraphical.targetにリンクしているという意味で、後程説明するシンボリックリンクというものが関係してきます。
ここでは、単純につながっていると思ってください。
それでは、このdefault.targetのリンクをgraphicalからmulti-userへ切り替えてみましょう。
以下のコマンドを入力します。
このコマンドを入力すると、default.targetをmulti-user.targetと紐づけることができます。
以下のコマンドを入力して、現在のデフォルトの起動モードを確認してみましょう。
multi-user.targetに変わっていますね。
しかしこの作業、面倒ですよね。
実は、「systemctl set-default」コマンドを使うことで、お手軽に起動モードを変更することができます。
systemctlコマンドは後程解説しますが、Systemdにおいて便利な機能が詰まっているので、積極的に活用していきましょう。
ひとまず、ランレベルの説明は以上です。
※試験対策ポイント!
ランレベルの対応表は必ず覚えよう!
デフォルトのランレベルを0か6に変更してはいけない理由を理解しよう!
Systemdでの起動モード管理について理解しよう!
システムのシャットダウン
次は、システムのシャットダウン用コマンドの説明をしていきます。
先ほどのinitコマンドでもランレベル0を指定すればシャットダウンをすることができますが、Linuxはサーバとして利用することが多いOSであり、サーバとして利用している際に周知もせずにシャットダウンを行ってもいいのでしょうか?
よくないですよね。
そのため、Linuxでは時刻設定をして、ログイン中のユーザにメッセージを発信することで、シャットダウンの予告をすることができるコマンドがあります。
「shutdown」コマンドを使えば、可能です。
構文:shutdown [オプション] [時刻] [メッセージ]
shutdownコマンドでは、複数のオプションがあり、オプションによって動作が異なります。
オプション | 動作 |
-h | (=halt) シャットダウンを行います。 |
-r | (=reboot)再起動を行います。 |
-k | (=known) シャットダウンを行わず、メッセージの通知のみを行います。 |
オプションを指定したら、処理を行う時刻を設定します。
時刻のフォーマットは次の通りです。
「mm:hh」 もしくは 「+mm」。
また、今すぐ処理を行いたい場合は、「now」と指定します。
そして、メッセージを伝えたい場合は、最後にメッセージを記述します。
ただシャットダウンや再起動がしたいだけなら・・・
上記のコマンドを使えば、全体へ通知を行い安全にシャットダウンを行うことができますが、個人で利用する場合は、こんな作業必要ないですよね。
その場合にもコマンドが用意されています。
シャットダウン:「poweroff」コマンド
再起動:「reboot」コマンド
せっかくなので、一緒に覚えてしまいましょう。
※試験対策ポイント!
shutdownコマンドを使えば、ログイン中のユーザに通知を行うことができる。
wallコマンドでも、メッセージの通知を行うことができる。
poweroffコマンドとrebootコマンドの用途を覚えよう。
以上で、ランレベルについての解説を終わります。