init
init은 리눅스 부팅 커널 다음 넘어오는 차례로 로그인 프롬포트 나오기 전까지 시스템 점검, 프로세스 관리 등의 역할을 한다. 모든 프로세서의 조상인 1번 PID를 갖고 있다.
inittab파일의 형식 id:runlevels:action:command
콜론으로 구분
첫째 항목(id)은 식별자로 어떤 단어든 상관없음 단 다른 것과 겹치면 안 되고 최대 4자리 그리고 tty를 지정하는 것은 맨 끝에 tty숫자가 와야 함. 예) dd1:..... tty1
둘째 항목(runlevels)은 그 줄의 명령이 실행될 실행레벨
셋째 항목(action)은 init이 그 항목을 어떻게 처리할지(예를 들어 1번만 실행, 종료될 때마다 다시 실행 등)
넷째 항목(command)는 init이 이 항목에 대해 실행할 명령
action 옵션
-respawn:프로세서 종료 시 항상 다시 시작
-wait:지정된 run-level이 되면 실행하고, init은 이 프로세서가 종료되기를 기다림
-once:지정된 run-level이 되면 한번만 명령어를 실행
-boot:시스템 부팅 때 그 프로세서를 실행 이때 run-level값은 무시
-bootwait:시스템 부팅 때 그 프로세스가 실행 되고, init은 이 프로세스가 종료되기를 기다 림 그리고 runlevel 값이 무시됨
-initdefault:시스템의 기본 run-level을 지정
-sysinit:시스템 부팅시 프로세서 제일 먼저 실행
-powerwait:전원에 문제가 발생시 프로세서 실행, 프로세서 작업 종료되기를 기다림
-powerfail:전원에 문제가 발생시 프로세서 실행, 작업 종료를 기다리지 않음
-ctrlaltdel: ctrl+alt+del키 입력시 실행
-kbrequest:특정한 키를 입력 받을 때 실행
실행레벨은 0:시스템 정지(halt), 1:싱글 유저모드, 2~5:여러 가지 다중 사용자 모드, 6:시스템 재부팅(reboot)
inittab 파일 분석
--------------------------------------------------------------------
id:2:initdefault:
-> 데비안을 실행레벨 2로 시작하고 /etc/rc.2d 에 있는 스크립트 실행
si::sysinit:/etc/init.d/rcS
-> 어떤 실행레벨이든 부팅 때 1회 실행 기본적인 초기화를 수행한다.
~~:S:wait:/sbin/sulogin
-> 싱글 모드로 들어갈시 root 비밀번호를 물어보게 함
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
-> 각 레벨별 실행 명령 /etc/init.d/rc 스크립트는 실행레벨이 바뀔 때 매다 알맞은 스크립트를 실행
z6:6:respawn:/sbin/sulogin
->
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
-> 컨트럴+알트+del키 입력 시 시스템 재부팅되게 함
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop
-> 무정전 전원공급 장치상태를 모니터링할 수 있는 bpowerd 패키지를 설치 했을 시 사용
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
-> 실행레벨별로 getty 프로그램 실행시키고 tty뭘쓸건지
예) 5:23:respawn:/sbin/getty 38400 tty5 // tty5는 2번 3번 레벨만 가능
--------------------------------------------------------------------
파일은
/etc/inittab: init이 해야할 일을 기록한 파일
/etc/init.d/rc: 각 실행 레벨 실행 스크립트
/etc/init.d/rcS: init에서 처음으로 실행하는 스크립트
디렉토리는
/etc/init.d: 부팅시 쓰이는 모든 스크립트들의 집합소 이 경로에는 원본 스크립트가 있고 스크립트를 쓸려면 각 레벨에 링크를 걸어준다.
/etc/rcS.d: rcS 스크립트에 의해 실행되어질 명령 목록이 담긴 디렉토리
/etc/rc0.d: 0번 실행레벨에서 실행되어질 명령 목록이 담긴 디렉토리
/etc/rc1.d: 1번 실행레벨에서 실행되어질 명령 목록이 담긴 디렉토리
.
.
/etc/rc6.d: 6번 실행 레벨에서 실행되어질 명령 목록이 담긴 디렉토리
디렉토리안에 S로 시작하는 것은 start로 스크립트를 시작하고 K로 시작하는 것은 stop으로 스크립트를 중지한다. 그 뒤 숫자는 스크립트 실행 순서를 의미한다. 그러니 S89cron이 있다면 89번째cron 시작 스크립트라는 뜻이다.
실제로 K로시작하는 파일은 rc0과 rc1,rc6에만 존재하고 나머지 실행 레벨에서는 S파일 만이 존재한다. 그리고 이 디렉토리들에 있는 스크립트를 실행 시켜주는 파일은 /etc/init.d/rc이다.
부팅시 스크립트 실행하는 방법
1. init.d 안에있는 파일을 rcn.d로 링크 걸어준다.
지울때는 링크를 지워준다.
2. update-rc.d <스크립트이름> defaults 써준다.
지울때는 update-rc.d -f <스크립트이름> remove