일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자바네트워크
- spring integration
- spring data jpa
- GPT-4's answer
- 고전역학
- JVM
- python
- 코틀린
- Java
- 자바
- android
- 소프트웨어공학
- jpa
- 파이썬
- write by chatGPT
- 자바암호
- 웹 크롤링
- 유닉스
- NIO
- kotlin
- 시스템
- Database
- 역학
- chatGPT's answer
- 데이터베이스
- flet
- write by GPT-4
- 리눅스
- 인프라
- oracle
- Today
- Total
기억을 지배하는 기록
Chapter 1 Unix System 시작과 종료 본문
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 |
'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 |