부팅 과정 중 커널이 적재되고 장치 드라이버가 초기화되면 커널은 /etc, /bin 이나 /sbin에 있는 init 프로그램을 실생시킨다. init은 다목적 프로그램으로, 새로운 프로세스를 생성하거나 프로그램이 종료되었을 때 이를 다시 시작하는 기능이 있다. 또한 init은 여러 프로그램을 실행하고 시스템이 부팅할 때 스크립트를 실행할 책임을 진다. init의 모든 동작은 /etc/inittab 파일을 통해 제어한다.

 /etc/inittab 파일을 이해하기 위해서는 우선 실행 레벨이라는 개념을 이해해야 한다. init에서 실행 레벨은 현재 시스템 상태를 명시하는 숫자 또는 문자다. 예를 들어, 시스템 실행 레벨이 3으로 변경되면 /etc/inittab의 모든 항목 중 실행 레벨이 3이라고 되어 있는 것을 실행한다. 실행 레벨은 /etc/inittab 안의 항목을 그룹으로 묶는 유용한 방법이다.


현재 나의 데비안 시스템 inittab 설정 파일....

run level 2로 설정 되어 있다.. 주석을 보면
run level 0 : halt
run level 1 : single-user mode
run level 2-5 : multi-user mode
run level 6 : reboot 
으로 설정 되어 있는 것을 알 수 있다.

여기서 run level 0을 실행 시켜 보기 위해 
# init 0 
명령을 주자 시스템이 꺼졌다.

위 파일의 각 필드는 콜론(:)으로 구분한다. 
첫번째 필드는 임의의 식별자로 어떤 것이든 상관없으며 파일 내에서 다른 것과 총돌하지 않으면 된다. 
둘째 필드는 명령이 실행될 실행 레벨이다.
셋째 필드는 init이 그 항목을 어떻게 처리할 것인지 지시한다.
넷째 필드는 init이 실제 실행할 명령이다.

id : 2 : initdefault     -> 디폴티 run level 2로 설정

si : : sysinit : /etc/init.d/rcS     -> 시스템을 부팅할 때 init에게 /etc/init.d/rcS을 실행 하도록 한다. 이 파일은 기본 시스템 초기화를 처리해주는 명령을 담은 간단한 셸 스크립트다. 예를 들면, 스와핑 긴능을 켜고 파일시스템을 점검하고, 마운트하며, 시스템 시간을 CMOS 시간에 맞춘다.

10 : 0 : wait : /etc/init.d/rc 0
11 : 1 : wait : /etc/init.d/rc 1
12 : 2 : wait : /etc/init.d/rc 2
13 : 3 : wait : /etc/init.d/rc 3
14 : 4 : wait : /etc/init.d/rc 4
15 : 5 : wait : /etc/init.d/rc 5
16 : 6 : wait : /etc/init.d/rc 6
-> 실행 레벨 0부터 6까지, 어디로 들어가든 /etc/init.d/rc 스크립트에 적절한 실행 레벨 인수를 사용하여 실행한다. rc는 다목적 시동 스크립트로서, 각 실행 레벨에 알맞은 스크립트를 실행시켜 준다. 여기서 action 필드는 wait다. init에게 주어진 command를 실행하고, 종료할 때까지 기다린 후 다음 작업으로 넘어가라는 지시다.
-> 각 실행 레벨의 스크립트는 (데비안의 경우) /etc/rcN.d에 있다. 여기서 N은 시작할 실행 레벨 번호다. 따라서 실행 레벨 2라면 /etc/rc2.d의 스크립트를 사용한다. 이 디렉토리들의 내용을 살펴 보면 Snnxxxx나 Knnxxxx 형태의 파일을 볼 수 있는데 K로 시작하는 서비스를 죽이는 스크립트이며, S로 시작하는 스크립트는 서비스를 시작할 때 사용하는 스크립트다. 이름에 들어 있는 nn은 서로의 실행 순서를 맞추려는 것으로 낮은 번호의 스크립트는 높은 번호의 스크립트보다 먼저 실행된다.
-> 같은 서비스를 서로 다른 실행 레벨에서 시작하고 중지하기 때문에 같은 스크립트를 여러 곳에 복사하는 것보다 심볼릭 링크를 사용하고 있다. 따라서 각각의 S, K 파일은 모든 서비스의 시동/셧다운 스크립트를 포함한 중앙 디렉토리를 가리키는 심볼릭 링크일 뿐이다. 데비안의 경우 이 중앙 디렉토리는 /etc/init.d 이다. 그러므로 특정 서비스를 시동 시키거나 중지시키고 싶을 때는 /etc/init.d에 위치한 스크립트를 이용하면 쉽게 할 수 있다.

/etc/init.d/networking stop  : 네트워크 서비스 중단
/etc/init.d/networking start  : 네트워크 서비스 시작

또 다른 중요 시스템 설정 스크립트는 /etc/init.d/rc.local이 있다. 이 스크립트는 다른 시스템 초기화 스크립트를 실행한 뒤에 실행된다. (보통 각각의 /etc/rcN.d에 S99rc.local이라는 심볼릭 링크를 만들어 둔다. 99라는 숫자는 s 스크립트가 가질 수 있는 가장 큰 숫자이므로 가장 나중에 실행된다) 부팅 중 다른 특별한 시스템 명령을 실행하길 원하거나 어디에서 실행시켜야 할지 모를 때는 rc.local 파일을 편집하여 사용하면 된다.

ca : 12345 : ctrlaltdel : /sbin/shutdown -t1 -a -r now
-> 이 항목은 콘솔에서 Ctrl-Alt-Del 을 눌렀을 때 실행된다. 이 키조합을 누르면 보통 시스템은 재부팅하는 인터럽트가 발생한다. 리눅스에서는 이 인터럽트를 받아 init에게 보내고 init은 ctrlaltdel의 action 필드에 있는 항목을 실행한다. 여기서는 /sbin/shutdown -t1 -a -r now로 안전한 시스템 재부팅을 진행시킨다.

1: 2345 : respawn : /sbin/getty 38400 tty1
2: 23 : respawn : /sbin/getty 38400 tty2
3: 23 : respawn : /sbin/getty 38400 tty3
4: 23 : respawn : /sbin/getty 38400 tty4
5: 23 : respawn : /sbin/getty 38400 tty5
6: 23 : respawn : /sbin/getty 38400 tty6
-> 마지막으로 inittab 파일에는 처음 나오는 6개의 가상 콘솔을 /sbin/getty에서 실행하는 항목이 있다. 이 프로그램은 터미널의 로그인을 받아준다. 이 프로그램이 없다면 터미널은 그야말로 죽은 상태나 다름없으며 키보드나 마우스에 반응하지 않는다. getty 명령은 터미널 장치를 열고 터미널 드라이버에 다양한 매개변수를 설정하고 /bin/login을 실행하여 로그인 세션을 연다.
-> getty는 '보율(baud rate)'과 '장치'라는 두 개의 인수를 받는다. 리눅스 가상 콘솔의 포트명은 /dev/tty1, /dev/tty2등이다. 가상 콘솔의 보율은 일반적으로 38400이다.
-> getty 항목의 action 필드는 respawn인데 이는 해당 명령이 죽으면 init이 다시 명령을 실행한다는 뜻으며, 사용자가 로그아웃 할 때마다 getty 프로세스가 죽으며 이에 따라 getty 프로세스를 다시 실행시켜 로그인을 준비한다.





+ Recent posts