Menu Close
Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
30.2.4. /sbin/init 프로그램
/sbin/init
프로그램 (init
라고도 부름)은 나머지 부트 프로세스를 주관하며 사용자를 위한 환경을 설정합니다.
init
명령이 시작할 때, 이는 시스템에서 자동으로 시작하는 모든 프로세스의 부모 또는 조부모가 됩니다. 먼저, 이는 /etc/rc.d/rc.sysinit
스크립트를 실행하여 환경 설정, 스왑 시작, 파일 시스템 확인, 시스템 초기화에 필요한 다른 단계를 실행합니다. 예를 들어, 대부분의 시스템에서는 시간을 사용하므로, rc.sysinit
은 하드웨어 시간을 초기화하기 위해 /etc/sysconfig/clock
설정 파일을 읽습니다. 다른 예로서 초기화되어야 하는 특정 직렬 포트 프로세스가 있을 경우, rc.sysinit
은 /etc/rc.serial
파일을 실행합니다.
The
init
command then runs the /etc/inittab
script, which describes how the system should be set up in each SysV init runlevel. Runlevels are a state, or mode, defined by the services listed in the SysV /etc/rc.d/rc<x>.d/
directory, where <x> is the number of the runlevel. For more information on SysV init runlevels, refer to 30.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
로 시작되는 링크는 런레벨에서 시작되는 프로세스입니다.
The
init
command first stops all of the K
symbolic links in the directory by issuing the /etc/rc.d/init.d/<command> stop
command, where <command> is the process to be killed. It then starts all of the S
symbolic links by issuing /etc/rc.d/init.d/<command> start
.
참고
시스템이 부팅된 후, 루트로 로그인할 수 있게 되며 서비스를 시작 및 중지하기 위해 이와 동일한 스크립트를 실행하게 됩니다. 예를 들어,
/etc/rc.d/init.d/httpd stop
명령은 Apache HTTP 서버를 중지합니다.
각각의 심볼릭 링크는 시작 순서를 지정하기 위해 번호 매겨집니다. 서비스가 시작 또는 중지되는 순서는 이러한 번호를 바꾸어 변경될 수 있습니다. 낮은 번호일 수록 더 먼저 시작하게 됩니다. 같은 번호를 갖는 심볼릭 링크는 알파벳 순으로 시작됩니다.
참고
One of the last things the
init
program executes is the /etc/rc.d/rc.local
file. This file is useful for system customization. Refer to 30.3절. “부팅시 추가 프로그램 실행하기” for more information about using the rc.local
file.
After the
init
command has progressed through the appropriate rc
directory for the runlevel, the /etc/inittab
script forks an /sbin/mingetty
process for each virtual console (login prompt) allocated to the runlevel. Runlevels 2 through 5 have all six virtual consoles, while runlevel 1 (single user mode) has one, and runlevels 0 and 6 have none. The /sbin/mingetty
process opens communication pathways to tty devices[14], sets their modes, prints the login prompt, accepts the user's username and password, and initiates the login process.
런레벨 5에서
/etc/inittab
은 /etc/X11/prefdm
스크립트를 실행합니다. prefdm
스크립트는 선호하는 X 디스플레이 관리자를 실행합니다 [15] — /etc/sysconfig/desktop
파일의 내용에 따라 gdm
, kdm
, 또는 xdm
을 실행합니다.
실행이 완료되면, 시스템은 런레벨 5에서 작동하고 로그인 화면이 나타나게 됩니다.