English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Linux システムの起動プロセス

Linuxが起動すると、多くの起動情報が表示されます。

Linuxシステムの起動プロセスは、想像以上に複雑ではありません。そのプロセスは、以下のように分類できます。5個の段階:

  • カーネルのブート。

  • initの実行。

  • システムの初期化。

  • 端末を構築。

  • ユーザーがシステムにログインする。

initプログラムのタイプ:

  • SysV: init, CentOS 5以前、設定ファイル: /etc/inittab。

  • Upstart: init, CentOS 6, 設定ファイル: /etc/inittab, /etc/init/*.conf。

  • Systemd: systemd, CentOS 7, 設定ファイル: /usr/lib/systemd/system、 /etc/systemd/system。

カーネルのブート

コンピュータの電源を入れたとき、まずBIOSの起動自検が行われ、BIOSに設定された起動デバイス(通常はハードディスク)に起動します。

オペレーティングシステムがハードウェアを管理する後、まず読み込む /bootディレクトリのカーネルファイル

initの実行

initプロセスはシステムのすべてのプロセスの起点であり、システムのすべてのプロセスの祖父母として比喩できます。このプロセスがなければ、システムのどのプロセスも起動しません。

initプログラムはまず設定ファイルを読み取る必要があります /etc/inittab。

運行レベル

多くのプログラムは起動時に実行する必要があります。これらはWindowsでは「サービス」(service)と呼ばれ、Linuxでは「デーモン」(daemon)と呼ばれます。

initプロセスの主要なタスクの1つは、これらの起動プログラムを実行することです。

しかし、異なるシーンには異なるプログラムが必要で、例えばサーバーとして使用する場合、Apacheを起動する必要がありますが、デスクトップとして使用する場合は必要ありません。

Linuxは、異なるシーンに応じて異なる起動プログラムを割り当てることができます。これを「運行レベル」(runlevel)と呼びます。つまり、起動時に「運行レベル」に基づいてどのプログラムを実行するかを決定します。

Linuxシステムには7個の運行レベル(runlevel):

  • 運行レベル0:システム停止状態、システムのデフォルトの運行レベルは0に設定できない、それでは正常に起動できない

  • 運行レベル1:単一ユーザー作業状態、root権限、システムメンテナンス用、リモートログインを禁止

  • 運行レベル2:マルチユーザー状態(NFSを使用していません)

  • 運行レベル3:完全なマルチユーザー状態(NFSを使用)、ログイン後コントロールターミナルコマンドラインモードに入ります

  • 運行レベル4:システム未使用、保持

  • 運行レベル5:X11コンソール、ログイン後グラフィカルGUIモードに入ります

  • 運行レベル6:システムが正常にシャットダウンし、再起動し、デフォルトの運行レベルは設定できない6、それでは正常に起動できない

システム初期化

initの設定ファイルには以下の行があります:si::sysinit:/etc/rc.d/rc.sysinitを呼び出し実行/etc/rc.d/rc.sysinit、rc.sysinitはbashシェルスクリプトで、システム初期化の作業を主に行います。rc.sysinitは各実行レベルで最初に実行される重要なスクリプトです。

主に以下の作業を行います:スワップパーティションを有効にし、ディスクをチェックし、ハードウェアモジュールをロードし、優先して実行する必要がある他のタスクも行います。

l5:5:wait:/etc/rc.d/rc 5

この行は、5をパラメータとして実行/etc/rc.d/rc、/etc/rc.d/rcはShellスクリプトで、5パラメータとして、/etc/rc.d/rc5.d/ディレクトリ下のすべてのrcスタートアップスクリプトです。/etc/rc.d/rc5.d/ディレクトリのこれらのスタートアップスクリプトは実際にはリンクファイルであり、rcスタートアップスクリプトではありません。実際のrcスタートアップスクリプトは/etc/rc.d/init.d/ディレクトリ下。

これらのrcスタートアップスクリプトは似たような使い方をしており、start、stop、restart、statusなどのパラメータを受け入れます。

/etc/rc.d/rc5.d/のrcスタートアップスクリプトは通常KまたはSで始まるリンクファイルであり、Sで始まるスタートアップスクリプトの場合、startパラメータで実行されます。

そして、Kで始まるスクリプトが存在し、既に実行中である場合(/var/lock/subsys/のファイルが存在する場合、まずこれら既に起動しているデーモンプロセスをstopパラメータで停止し、再び実行します。

これは、initが実行レベルを変更する際に、すべての関連するデーモンプロセスが再起動することを保証するためです。

各実行レベルでどのデーモンプロセスが実行されるかは、ユーザーがchkconfigやsetupの「System Services」から自分で設定できます。

端末を確立

rcが終了し、initに戻るとき、基本的なシステム環境が設定され、さまざまなデーモンプロセスが起動します。

initが次に6つの端末を定義し、ユーザーがシステムにログインできるようにします。inittabの以下の6行は、6つの端末:

1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

上記から、2、3、4、5の実行レベルでは、mingettyプログラムをrespawn方式で実行します。mingettyプログラムは端末を開き、モードを設定できます。

同時にテキストログインインターフェースが表示され、これはよく見るログインインターフェースです。このログインインターフェースでは、ユーザーがユーザー名を入力し、そのユーザーがloginプログラムにパラメータとして渡され、ユーザーの身元を確認します。

ユーザーがシステムにログイン

一般的に、ユーザーのログイン方法は3種類あります:

  • (1コマンドラインログイン

  • (2sshログイン

  • (3)グラフィカルインターフェースログイン

レベルが5グラフィカル方式のユーザーにとって、彼らのログインはグラフィカルなログインインターフェースを通じて行われます。ログイン成功後、KDE、Gnomeなどのウィンドウマネージャーに直接入ることができます。

本文では、テキスト方式のログインについて説明します:mingettyのログインインターフェースが見えたら、ユーザー名とパスワードを入力してシステムにログインできます。

Linuxのアカウント認証プログラムはloginであり、loginはmingettyから渡されるユーザー名をユーザー名引数として受け取ります。

その後、loginはユーザー名を分析します:ユーザー名がrootでない場合、 /etc/nologinファイルが存在する場合、loginはnologinファイルの内容を出力し、ログアウトします。

これは通常、システムメンテナンス中に非rootユーザーのログインを防ぐために使用されます。/etc/securettyに登録されたテーメルのみがrootユーザーのログインを許可します。このファイルが存在しない場合、rootユーザーはどのテーメルでもログインできます。

/etc/userttyファイルを使用してユーザーに対する追加のアクセス制限を行います。このファイルが存在しない場合、他の制限はありません。

ユーザー名を分析した後、loginは /etc/passwdおよび /etc/shadowを使用してパスワードを確認し、アカウントの他の情報(例えば:ホームディレクトリは何か、どのshellを使用するか)を設定します。ホメディレクトリが指定されていない場合、デフォルトでルートディレクトリになります;shellが指定されていない場合、デフォルトで /bin/bash。

グラフィカルモードとテキストモードの切り替え方法

Linuxは6つのコマンドウィンドウターミナルを提供しており、ログインします。

デフォルトでは、最初のウィンドウ、つまりttyにログインしています。1、この6つのウィンドウはttyです。1,tty2 … tty6、Ctrlを押して + Alt + F1 ~ F6 を通じて切り替えます。

グラフィカルインターフェースをインストールしている場合、デフォルトではグラフィカルインターフェースに入ります。その場合、Ctrlを押して切り替えることができます。 + Alt + F1 ~ F6を通じて、その中の1つのコマンドウィンドウインターフェースに入ります。

コマンドウィンドウのインターフェースに入った後、グラフィカルインターフェースに戻るにはCtrlを押します。 + Alt + F7 それで戻ってきます。

VMware仮想マシンを使用している場合、コマンドウィンドウの切り替えのショートカットキーはAltです。 + Space + F1~F6。グラフィカルインターフェースであれば、Altを押してください。 + Shift + Ctrl + F1~F6 コマンドウィンドウに切り替えます。

Linux シャットダウン

Linuxの分野ではほとんどサーバーで使用され、シャットダウンの操作はめったにありません。なぜなら、サーバー上でサービスを実行することは終わりがないため、特殊な状況でなければシャットダウンは行われません。

正しいシャットダウンプロセスは:sync > shutdown > reboot > haltです。

シャットダウンコマンドは:shutdown、man shutdownでヘルプドキュメントを確認できます。

例えば、以下のコマンドでシャットダウンできます:

sync メモリ内のデータをハードディスクに同期します。
shutdown シャットダウンコマンドについて、man shutdown を見て帮助文書を確認できます。例えば、以下のコマンドでシャットダウンできます:
shutdown –h 10 ‘This server will shutdown after 10 mins’ このコマンドは、コンピュータが10分後にシャットダウンし、ログインしているユーザーの現在のスクリーンに表示されます。
shutdown –h now 立ち即ちシャットダウンします
shutdown –h 20:25 システムは今日20:25シャットダウン
shutdown –h +10 10分後にシャットダウンします
shutdown –r now システムはすぐにリブートします
shutdown –r +10 システムは10分後にリブートします
reboot はリブートを意味し、shutdown –r now と同義
halt システムを关闭する、shutdown –h now または poweroff と同義

最後にまとめると、システムをリブートするか关闭するかに関わらず、まず実行するのは sync コマンドを実行すると、メモリ内のデータをディスクに書き込む。

シャットダウンするコマンドには shutdown –h now halt poweroff および init 0 システムをリブートするコマンドには shutdown –r now reboot init 6

参考記事: