2015. 4. 26. 01:07

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

'OPS > LInux' 카테고리의 다른 글

dhcp  (0) 2015.04.26
fdisk  (0) 2015.04.26
send mail  (0) 2015.04.26
raid  (0) 2015.04.26
quota  (0) 2015.04.26
Posted by 배주혁