init.d/ 디렉토리에는 서비스를 제어할 때 /sbin/init 명령에 의해 사용되는 스크립트가 들어 있습니다. 번호 매겨진 각 디렉토리는 Red Hat Enterprise Linux에서 기본값으로 설정된 6개의 런레벨을 나타냅니다.
- 런레벨
SysV init 런레벨은 다른 시스템은 다른 방식으로 사용될 수 있다는 개념을 바탕으로 하고 있습니다. 예를 들어, 서버는 X 윈도우 시스템에 자원을 빼앗기지 않으면 보다 효과적으로 실행될 수 있습니다. 또한, 디스크 오류를 수정할 때와 같이 시스템 관리자가 진단 업무를 수행하기 위해 시스템을 더 낮은 런레벨에서 실행할필요가 있는 경우가 있을 것입니다.
주어진 런레벨의 특성은 init을 사용하여 중지시켜야 할 서비스와 시작해야 할 서비스를 결정합니다 예를 들어, 런레벨 1 (단독 사용자 모드)에서는 모든 네트워크 서비스가 중지되는 반면, 런레벨 3에서는 이러한 서비스를 시작합니다. 주어진 런레벨에서 중지하거나 시작할 서비스를 지정함으로서 init은 사용자가 일일히 서비스를 중지하거나 시작하지 않고 컴퓨터의 모드를 빠르게 변경할 수 있습니다.
다음은 Red Hat Enterprise Linux에서 기본값으로 지정된 런레벨 예시입니다:
0 - 정지
1 - 단독 사용자 텍스트 모드
2 - 사용되지 않음 (사용자 정의 가능)
3 - 완전 다중 - 사용자 텍스트 모드
4 - 사용되지 않음 (사용자 정의 가능)
5 - (X-기반 로그인 화면을 사용한) 완전 다중 - 사용자 그래픽 모드
6 - 재부팅
일반적으로, 사용자는 런레벨 3이나 5에서 리눅스를 실행함 - 둘 다 완전한 다중 사용자 모드이기 때문.
런레벨 2와 5를 특별한 필요에 따라 사용자 정의하기도 함 - 이 둘은 사용되지 않기 때문에.
시스템에 대한 디폴트 런레벨은 /etc/inittab에 열거되어 있다. 시스템에 해당하는 디폴트 런레벨을 찾으려면, /etc/inittab의 하단 부분에서 다음과 유사한 행을 찾아보면 된다.
id:5:inidefault:
이 예시에서 열거된 리폴트 런레벨은 5로 첫번째 콜론 이후에 있는 숫자이다. 이를 변경하려면 루트로 /etc/initab을 수정합니다.
※ /etc/inittab을 편집할 때 잘못할 경우 시스템이 부팅되지 않을 수 있다.
4. 다음으로, 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/ 디렉토리에 위치하고 있지 않습니다. 대신, /etc/rc.d/rc5.d/에 있는 모든 파일은 /etc/rc.d/init.d/ 디렌토리에 위치한 스크립트에 대한 심볼릭 링크합니다. 심볼릭 링크는 각각의 rc 디렉토리에 사용되며, 원래의 스크립트에는 영향을 미치지 않고 심볼릭 링크를 생성, 수정, 삭제하는 것으로 런레벨을 재설정할 수 있습니다.
여기서 각 심볼릭 링크 앞에는 S나 K가 붙게 되는데 K는 런레벨에서 종료시켜야 할 프로세스, S는 런레벨에서 시작되는 프로세스 입니다.
init 명령은 디렉토리에 있는 모든 K 심볼릭 링크를 /etc/rc.d/init.d/<comment> stop 명령을 내려서 중단합니다. 여기서 <command>는 중단될 프로세스를 말합니다. 그 후, 모든 S 심볼릭 링크를 /etc/rc.d/init.d/<command> start 명령을 내려서 시작합니다.
각 심볼릭 링크에는 시작순서 지정을 위한 번호가 매겨집니다. 서비스의 시작 또는 중지의 순서는 이러한 번호를 바꾸어 변경될 수 있습니다. 낮은 번호가 우선으로 시작되며 같은 번호의 링크는 알파벳 순으로 시작됩니다.
init 명령이 런레벨에 따라 적절한 rc 디렉토리를 처리한 후, Upstart는 /sbin/mingetty 프로세스를 /etc/event.d 디렉토리의 작업 정의에 따라 런레벨에 할당된 각각의 가상 콘솔(로그인 프롬프트)에 대해 실행합니다. 런레벨 2부터 5까지는 모두 6개의 가상 콘솔을 가지며, 런레벨 1(단일 사용자 모드)은 하나만을 가지며, 런 레벨 0과 6은 가상 콘솔이 없습니다. /sbin/migetty 프로세스는 tty 장치에 대한 통신 경로를 열고, 그 장치의 모드를 설정, 로그인 프롬프트를 표시한 후, 사용자의 사용자명과 암호를 입력받아 로그인 과정을 진행합니다.
런레벨 5에서 Upstart는 /etc/X11/prefdm라는 스크립트를 실행합니다. prefdm 스크립트는 지정된 X 디스플레이 관리자 - 이는 /etc/sysconfig/desktop의 내용에 따라 dfm, kdm, xdm 등이 될 수 있습니다.