Akashic Records

Chapter 1 Unix System 시작과 종료 본문

Operation System Controls

Chapter 1 Unix System 시작과 종료

Andrew's Akashic Records 2018. 4. 17. 15:56
728x90

Chapter 1 Unix System 시작과 종료


1.        Booting 절차

시스템 가동절차를 7단계로 나누어보면,

1단계: shelf-test

2단계: ok boot

3단계: boot disk(1-15번 섹터)을 읽어들인다.

4단계: boot block(bootblk) 프로그램을 로드한다

5단계: boot program(ufsboot) 프로그램을 로드한다.

6단계: ufsboot 프로그램은 32비트 또는 64비트 커널을 로드한다.

7단계: 커널 모듈을 로드한다

8단계: /etc/system 파일을 읽어 커널 파라미터의 값을 설정한다.

9단계: 커널 초기화를 실행한 뒤 init 프로세스를 실행한다.

10단계: init 프로세스는 /etc/inittab 파일을 읽어서 run control 스크립터를 실행한다.

A.      init 프로세스의 처리 루틴

시스템 부팅시 /stand/unix 프로그램에 의해 /sbin/init 프로세스가 구동된다. init 프로세스는 /etc/inittab 파일을 읽어서 그 파일에 기술된 순서대로 프로세스를 구동 시킨다. 시스템 관리자는 필요에 따라 시스템의 Run-Level을 변경할수 있는데 이때는 수퍼바이즈로 로그인한 상태에서 init프로그램을 실행하는 방법을 사용할 수 있다. 이때도 init프로세스는/etc/inittab파일을 순차적으로 읽어서 실행한다.

# cat /etc/inittab

ap::sysinit:/sbin/autopush -f /etc/ap/chan.ap

bchk::sysconf:/sbin/bcheckrc </dev/console >/dev/console

is:3:initdefault:

a0:0123456:wait:/sbin/contty -c 1 >/dev/sysmsg 2>&1

r0:0:wait:/sbin/rc0 off 1>/dev/sysmsg 2>&1 >/dev/console

r1:1:wait:/sbin/rc1  1>/dev/sysmsg 2>&1 >/dev/console

r2:2:wait:/sbin/rc2  1>/dev/sysmsg 2>&1 >/dev/console

r3:23:wait:/sbin/rc3  1>/dev/sysmsg 2>&1 >/dev/console

r5:5:wait:/sbin/rc0 reboot 1>/dev/sysmsg 2>&1 >/dev/console

r6:6:wait:/sbin/rc0 reboot 1>/dev/sysmsg 2>&1 >/dev/console

nw:12345:powerwait:/sbin/rpcfr >/dev/sysmsg 2>&1 >/dev/console

sc:23:respawn:/usr/lib/saf/sac -t 300

 :     :       :


/etc/inittab화일의 각항목은 콜론(:)에 의해 4개 필드로 나누어져 있다.

  • 1번째 필드: 라인식별자 ,4개 문자로 사용자가 정의한 각 항목의 이름

  • 2번째 필드: 상태

  • 3번째 필드: 액션

  • 4번째 필드: 명령어 init가 실행할 명령어를 기술한다.

init가 명령어를 실행할때 취할 액션지정

off

만약에 실행중인 프로세스가 있으면 종료한다.

once

지정하는 명령어를 한번만 실행한다.

sysinit

시스템을 초기화 하기위해 사용된다. init가 지정한 Run-level로 들어갈 때 실행되는 명령어들이다.

sysconf

initdefault와 비슷하다. exit code가 0가 아니더라도 run-level이 가능하다

initdefault

default 시스템 run-level을 지정한다

boot

시스템 부팅후 이 시스템 상태로 들어 갈 때 처음 실행한다

bootwait

boot하고 같지만 이 명령이 종료될 때 까지 다음 항목을 읽어서 실행하지 않는다

powerfail

init가 powerfail신호를 수신하였을 때 실행한다

powerwait

powerfail과 같지만 이 명령이 종료될때까지 다음 항목을 읽어서 실행하지 않는다.

respawn

init가 계속해서 프로세스를 점검하여 계속적으로 실행 상태가 유지되도록한다.

wait

명령이 종료될 때 까지 inittab의 다음 항목을 읽어서 실행하지 않는다


B.      /etc/rcx.d 디렉토리내 파일들의 이름 규칙

/etc/rcx.d 디렉토리들은 시스템 상태가 바뀌는 동안에 실행될 프로그램을 저장하고 있다. 디렉토리명중 x 는 시스템 상태번호로 대체된다. 각 상태는 init에 의해 시작되는 rcx 프로그램을 가지는데 이프로그램은 rcx.d 디렉토리내의 쉘 스크립트를 실행시킨다.

디렉토리내의 화일명의 형식

[S|K][00-99][이름]

  • S : Start

  • K : Kill

  • 00-99 : 순서번호

  • 이름 : 요약명

시스템 부팅시에 실행되어야 할 프로그램이 있다면 해당 Run-Level에 읽혀져서 실행되는 디렉토리안에 파일명형식에 맞춰 실행 디스크립트 파일을 생성해 두면 된다.

2.        시스템 상태

솔라리스에서는 시스템 부팅시 여러개의 부트 단계를 제공하고 있다.

런레벨

설명

0

시스템 다운 (SPARC 에서는 PROM감시단계)

1

관리 상태

싱글유저상태. 멀티유저 화일시스템이 언마운트

되고 데몬도정지

2

다중사용자 상태. 화일시스템이 마운트되고 정규 사용자 서비스가 시작 된다

3

NFS(Network File System)상태. 다중사용자가 네트웍을 통해 화일시스템을 서비스 받을 수 있다.

4

사용자 정의. 현재 거의 사용하지 않음

5

정지(halt) 및 전원 차단

6

기본수행단계로 리부팅

S,s

싱글유저 상태. "root"사용자만이 시스템에 접근가능하며 최소한의 루트 파일시스템만 사용가능한 상태


3.        시스템 종료

시스템을 종료시키기 전에 먼저 해주는 작업이 "sync"라는 작업이다. 이 "sync"작업의 필요성은 디스크 의 수퍼블락이라는 영역에는 파일시스템에 관한정보(사용가능한 inode, 사용가능한 데이터 저장 공간에 대한 정보)는 파일 시스템이 마운트 될 때 메인 메모리에 로드된다. 이 정보는 사용자가 새로운 파일을 생성한다던지, 파일을 삭제할 때 변경되게 되는 데 그 변한 내용중 디스크에 기록되지 않은 내용들을 디스크에 저장하도록 하는 명령이다. 여러번의 "sync"명령을 실행하고 난 뒤 상황에 맞는 적절한 종료 명령을 사용한다.

1)       halt : 시스템을 바로 종료시킨다. 이 명령 실행전에 반드시 "sync" 명령을 선행한다.

2)       fsathalt : halt와 동일하나 시스템이 리부팅 될 때 디스크 검사를 하지 않으므로 부팅이 빨리 된다.

3)       Shutdown : 시스템을 사용중인 사용자에게 셧다운 경고 메시지를 전송한 뒤 지정한 시간후에 시스템을 종료한다.

# shutdown -h now

# shutdown -h +2

# shutdown 20:00


/usr/sbin/shutdown 명령은 시스템 종료에도 사용하지만 주로 시스템의 실행 단계 변경을 위해 사용된다.

명령어 형식:

shutdown [-y] [-gn] [-istate]

  • -y 시스템 종료 작업시 확인 질문에 대해 사전 yes값을 지정

  • -gn 시스템 종료작업이 시작되기전 대기 시간을 초단위로 지정(디폴트 60초)

  • -istate init에 의해 변경될 시스템 상태 지정

참고 : Unix 호스트명을 변경하는 쉘스크립트

파일 이름 chhostname.sh

#!/bin/ksh

#

#   호스트명을 변경하기 위해서는

#   /etc/nodename

#   /etc/hosts

#   /etc/hostname.hme0

#   /etc/net/ticlts/hosts

#   /etc/net/ticots/hosts

#   /etc/net/ticotsord/hosts

#   파일에서 호스트명을 변경하여야 한다.

#

TMP=/tmp/tmpfile        


if [ "$1x" == "x" ]

then

echo "Usage : ./chhostname  <new_hostname> "

   exit 1

fi

OLD_HOSTNAME=` cat /etc/nodename`

for FILENAME in /etc/nodename /etc/hosts `ls /etc/hostname.*0` /etc/net/ticlts/hosts  /etc/net/ticots/hosts /etc/net/ticotsord/hosts

do

   cp $FILENAME $FILENAME.bak

sed "s/\<$OLD_HOSTNAME\>/$1/g" $FILENAME > $TMP 2>/dev/null

mv $TMP $FILENAME

echo "$FILENAME 파일을 변경하였습니다"

done

rm $TMP


728x90

'Operation System Controls' 카테고리의 다른 글

Chapter 3 Unix System 보안  (0) 2018.04.17
Chapter 2 Unix 사용자 계정 관리  (0) 2018.04.17
포트 스캐닝 감시 및 OS 정보 숨기기  (0) 2018.04.17
파일 핸들링  (0) 2018.04.17
파일 압축 명령어  (0) 2018.04.17
Comments