F.2.4. /sbin/init 프로그램

/sbin/init 프로그램 (init 라고도 부름)은 나머지 부트 프로세스를 주관하며 사용자를 위한 환경을 설정합니다.
init 명령이 시작할 때, 이는 시스템에서 자동으로 시작하는 모든 프로세스의 부모 또는 조부모가 됩니다. 먼저, 이는 /etc/rc.d/rc.sysinit 스크립트를 실행하여 환경 경로, 스왑 시작, 파일 시스템 확인, 시스템 초기화에 필요한 다른 단계를 실행합니다. 예를 들어, 대부분의 시스템에서는 클럭을 사용하므로, rc.sysinit은 하드웨어 클럭을 초기화하기 위해 /etc/sysconfig/clock 설정 파일을 읽습니다. 다른 예로서 초기화되어야 하는 특정 직렬 포트 프로세스가 있을 경우, rc.sysinit/etc/rc.serial 파일을 실행합니다.
init 명령은 그 후 /etc/event.d 디렉토리에 있는 작업을 실행합니다. 이 디렉토리는 시스템이 각각의 SysV init 런레벨에 따라 어떻게 설정될지를 지정합니다. 런레벨은 SysV /etc/rc.d/rc<x>.d/ (여기서 <x>은 런레벨 숫자) 디렉토리에 나열된 서비스들로 정의되는 시스템의 상태 또는 모드를 말합니다. SysV init 런레벨에 대한 더 자세한 정보는 F.4절. “SysV Init 런레벨”에서 참조하십시오.
다음으로, init 명령은 시스템에 대한 소스 기능 라이브러리 /etc/rc.d/init.d/functions을 설정하여, 프로그램의 시작, 종료, PID 결정 방법을 설정합니다.
init 프로그램은 /etc/inittab에서 기본값으로 지정된 런레벨에 대한 올바른 rc 디렉토리에 따라 모든 백그라운드 프로세스를 시작합니다. 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 명령은 디렉토리에 있는 모든 K 심볼릭 링크를 /etc/rc.d/init.d/<command> stop 명령을 내려서 중단합니다. 여기서 <command>는 중단될 프로세스를 말합니다. 그 후, 모든 S 심볼릭 링크를 /etc/rc.d/init.d/<command> start 명령을 내려서 시작합니다.

참고

시스템이 부팅된 후, 루트로 로그인할 수 있게 되며 서비스를 시작 및 중지하기 위해 이와 동일한 스크립트를 실행할 수 있습니다. 예를 들어, /etc/rc.d/init.d/httpd stop 명령은 Apache HTTP 서버를 중지합니다.
각각의 심볼릭 링크는 시작 순서를 지정하기 위해 번호 매겨집니다. 서비스가 시작 또는 중지되는 순서는 이러한 번호를 바꾸어 변경될 수 있습니다. 낮은 번호일 수록 더 먼저 시작하게 됩니다. 같은 번호를 갖는 심볼릭 링크는 알파벳 순으로 시작됩니다.

참고

init 프로그램이 마지막으로 실행하는 것 중 하나는 /etc/rc.d/rc.local 파일입니다. 이 파일은 시스템 사용자 정의에 유용합니다. rc.local 파일 사용에 관한 보다 자세한 정보는 F.3절. “부팅시 추가 프로그램 실행하기”를 참조하시기 바랍니다.
init 명령이 런레벨에 따라 적절한 rc 디렉토리를 처리한 다음, Upstart/sbin/mingetty 프로세스를 /etc/event.d 디렉토리의 작업 정의에 따라 런레벨에 할당된 각각의 가상 콘솔(로그인 프롬프트)에 대해 실행합니다. 런레벨 2부터 5까지는 모두 6개의 가상 콘솔을 가지며, 런레벨 1(단일 사용자 모드)은 하나만을 가지며, 런레벨 0과 6은 가상 콘솔이 없습니다. /sbin/mingetty 프로세스는 tty 장치[16]에 대한 통신 경로를 열고, 그 장치의 모드를 설정하고, 로그인 프롬프트를 표시한 후, 사용자의 사용자명과 암호를 입력받아 로그인 과정을 진행합니다.
런레벨 5에서 Upstart/etc/X11/prefdm라는 스크립트를 실행합니다. prefdm 스크립트는 지정된 X 디스플레이 관리자([17]) — 이는 /etc/sysconfig/desktop의 내용에 따라 gdm, kdm, xdm 등이 될 수 있습니다.
실행이 완료되면, 시스템은 런레벨 5에서 작동하고 로그인 화면이 나타나게 됩니다.


[16] Red Hat Enterprise Linux 운용 가이드에서 tty 장치에 대한 자세한 정보를 찾아보십시오.
[17] 디스플레이 관리자에 대해서는 Red Hat Enterprise Linux 운용 가이드를 참조하십시오.