Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

33.2.4. sbin/init プログラム

sbin/init プログラム (init とも 呼ばれる) は、ブートプロセスの残りの部分を調整し、ユーザーのために環境を設定します。
init コマンドが起動すると、システム上で自動的に起動するすべてのプロセスの親または祖父母になります。まず、/etc/rc.d/rc.sysinit スクリプトを実行し、環境パスの設定、スワップの開始、ファイルシステムのチェック、その他システム初期化に必要なすべてのステップを実行します。例えば、ほとんどのシステムはクロックを使用しているので、rc.sysinit は /etc/sysconfig/clock 設定ファイルを読み込んで、ハードウェアクロックを初期化します。他の例としては、初期化しなければならない特別なシリアルポートプロセスがある場合、rc.sysinit は /etc/rc.serial ファイルを実行します。
init コマンドは、次に、各 SysV init ランレベルにおいて、システムがどのように設定されるべきかを記述した /etc/inittab スクリプトを実行します。ランレベルは、SysV /etc/rc.d/rc<x >. d/ ディレクトリーに記載されているサービスによって定義される状態、または モード であり、<x>は ランレベルの番号である。SysV init のランレベルについての詳細は、「SysV Init Runlevels」 を参照してください。
次に、init コマンドは、システムのソース関数ライブラリーである /etc/rc.d/init.d/functions を設定し、プログラムの起動、終了、PID の決定方法などを設定する。
init プログラムは、適切な rc ディレクトリーで、/etc/inittab でデフォルトとして指定されたランレベルを探して、すべてのバックグラウンドプロセスを開始します。rc ディレクトリーは、ランレベルに対応した番号が付けられています。例えば、/etc/rc.d/rc5.d/は ランレベル 5 用のディレクトリーです。
ランレベル 5 で起動する場合、init プログラムは /etc/rc.d/rc5.d/ ディレクトリーを検索して、どのプロセスを起動停止するかを決定します。
以下は、/etc/rc.d/rc5.d/ ディレクトリーの一覧の例です。
K05innd -> ../init.d/innd 
K05saslauthd -> ../init.d/saslauthd 
K10dc_server -> ../init.d/dc_server 
K10psacct -> ../init.d/psacct 
K10radiusd -> ../init.d/radiusd 
K12dc_client -> ../init.d/dc_client 
K12FreeWnn -> ../init.d/FreeWnn 
K12mailman -> ../init.d/mailman 
K12mysqld -> ../init.d/mysqld 
K15httpd -> ../init.d/httpd 
K20netdump-server -> ../init.d/netdump-server 
K20rstatd -> ../init.d/rstatd 
K20rusersd -> ../init.d/rusersd 
K20rwhod -> ../init.d/rwhod 
K24irda -> ../init.d/irda 
K25squid -> ../init.d/squid 
K28amd -> ../init.d/amd 
K30spamassassin -> ../init.d/spamassassin 
K34dhcrelay -> ../init.d/dhcrelay 
K34yppasswdd -> ../init.d/yppasswdd 
K35dhcpd -> ../init.d/dhcpd 
K35smb -> ../init.d/smb 
K35vncserver -> ../init.d/vncserver 
K36lisa -> ../init.d/lisa 
K45arpwatch -> ../init.d/arpwatch 
K45named -> ../init.d/named 
K46radvd -> ../init.d/radvd 
K50netdump -> ../init.d/netdump 
K50snmpd -> ../init.d/snmpd 
K50snmptrapd -> ../init.d/snmptrapd 
K50tux -> ../init.d/tux 
K50vsftpd -> ../init.d/vsftpd 
K54dovecot -> ../init.d/dovecot 
K61ldap -> ../init.d/ldap 
K65kadmin -> ../init.d/kadmin 
K65kprop -> ../init.d/kprop 
K65krb524 -> ../init.d/krb524 
K65krb5kdc -> ../init.d/krb5kdc 
K70aep1000 -> ../init.d/aep1000 
K70bcm5820 -> ../init.d/bcm5820 
K74ypserv -> ../init.d/ypserv 
K74ypxfrd -> ../init.d/ypxfrd 
K85mdmpd -> ../init.d/mdmpd 
K89netplugd -> ../init.d/netplugd 
K99microcode_ctl -> ../init.d/microcode_ctl 
S04readahead_early -> ../init.d/readahead_early 
S05kudzu -> ../init.d/kudzu 
S06cpuspeed -> ../init.d/cpuspeed 
S08ip6tables -> ../init.d/ip6tables 
S08iptables -> ../init.d/iptables 
S09isdn -> ../init.d/isdn 
S10network -> ../init.d/network 
S12syslog -> ../init.d/syslog 
S13irqbalance -> ../init.d/irqbalance 
S13portmap -> ../init.d/portmap 
S15mdmonitor -> ../init.d/mdmonitor 
S15zebra -> ../init.d/zebra 
S16bgpd -> ../init.d/bgpd 
S16ospf6d -> ../init.d/ospf6d 
S16ospfd -> ../init.d/ospfd 
S16ripd -> ../init.d/ripd 
S16ripngd -> ../init.d/ripngd 
S20random -> ../init.d/random 
S24pcmcia -> ../init.d/pcmcia 
S25netfs -> ../init.d/netfs 
S26apmd -> ../init.d/apmd 
S27ypbind -> ../init.d/ypbind 
S28autofs -> ../init.d/autofs 
S40smartd -> ../init.d/smartd 
S44acpid -> ../init.d/acpid 
S54hpoj -> ../init.d/hpoj 
S55cups -> ../init.d/cups 
S55sshd -> ../init.d/sshd 
S56rawdevices -> ../init.d/rawdevices 
S56xinetd -> ../init.d/xinetd 
S58ntpd -> ../init.d/ntpd 
S75postgresql -> ../init.d/postgresql 
S80sendmail -> ../init.d/sendmail 
S85gpm -> ../init.d/gpm 
S87iiim -> ../init.d/iiim 
S90canna -> ../init.d/canna 
S90crond -> ../init.d/crond 
S90xfs -> ../init.d/xfs 
S95atd -> ../init.d/atd 
S96readahead -> ../init.d/readahead 
S97messagebus -> ../init.d/messagebus 
S97rhnsd -> ../init.d/rhnsd 
S99local -> ../rc.local
このリストにあるように、実際にサービスを起動停止するスクリプトは、/etc/rc.d/rc5.d/ ディレクトリーには一つも配置されていない。むしろ、/etc/rc.d/rc5.d/ にあるすべてのファイルは、/etc/rc.d/init.d/ ディレクトリーにあるスクリプトを指す シンボリックリンク である。シンボリックリンクは 各 rc ディレクトリーで使用され、シンボリックリンクを作成、変更、削除することにより、それらが参照する実際のスクリプトに影響を与えることなくランレベルを再設定することができます。
各シンボリックリンクの名前は、K または S の どちらかで始まります。K の リンクはそのランレベルで強制終了されるプロセスで、S で 始まるものは起動されるプロセスです。
init コマンドは、まず、/etc/rc.d/init.d/<command> stop コマンドを発行して、ディレクトリー内のすべての K シンボリックリンクを停止します (<command>は 停止するプロセスを表します)。そして、/etc/rc.d/init.d/<command> start を 発行して、すべての S シンボリックリンクを起動します。
注記
システムの起動が完了した後、root でログインして同じスクリプトを実行し、サービスを起動停止することができます。例えば、/etc/rc.d/init.d/httpd stop という コマンドは、Apache HTTP Server を停止させます。
各シンボリックリンクには、開始の順番を決めるための番号が振られています。この数値を変更することで、サービスの起動停止順を変更することができます。数字が小さいほど早く開始されます。同じ番号のシンボリックリンクは、アルファベット順に開始されます。
注記
init プログラムが最後に実行するものの 1 つが、/etc/rc.d/rc.local ファイルです。このファイルは、システムのカスタマイズに便利です。rc.local ファイルの使用方法については、「ブート時に追加プログラムを実行する」 を参照してください。
init コマンドがランレベルに適した rc ディレクトリーを進行した後、/etc/inittab スクリプトは、ランレベルに割り当てられた仮想コンソール (ログインプロンプト) ごとに /sbin/mingetty プロセスをフォークします。ランレベル 2~5 には 6 台すべてのバーチャルコンソールがあり、ランレベル 1(シングルユーザーモード) には 1 台、ランレベル 0 と 6 には 1 台もありません。sbin/mingetty プロセスは、tty デバイスへの通信経路を開きます。[14]を設定し、ログインプロンプトを表示し、ユーザーのユーザー名とパスワードを受け入れ、ログイン処理を開始します。
ランレベル 5 では、/etc/inittab で /etc/X11/prefdm という スクリプトが実行されます。prefdm スクリプトは、優先 X ディスプレイマネージャーを実行します。[15] - etc/sysconfig/desktop ファイルの内容に応じて、gdmkdmxdm のいずれかを使用します。
終了すると、ランレベル 5 で動作し、ログイン画面が表示されます。


[14] tty デバイスの詳細については、Red Hat Enterprise Linux Deployment Guide を参照してください。
[15] ディスプレイマネージャーの詳細については、Red Hat Enterprise Linux Deployment Guide を参照してください。