-
리눅스 부팅 과정linux/centOS 2018. 7. 3. 11:35
☆ 리눅스 부팅 과정
■ 1 단계 : BIOS(Basic Input/Output System) 단계
■ 2 단계 : 부트 로드(Boot Loader) 단계
■ 3 단계 : 커널(Kernel) 단계
■ 4 단계 : Init 단계
0 단계 : 전원 스위치 ON 단계
시스템 전원공급
메인보드의 ROM-BIOS에 있는 BIOS프로그램 자동실행 한다.
BIOS 프로그램은 전원공급과 함께 메모리의 특정번지(예:FFFF0H)에 자동 로드된다.
CPU는 전원공급과 함께 특정번지(예:FFFF0H)의 BIOS프로그램(명령들)을 자동실행 한다
[참고] BIOS(Basic Input/Output System)란?
기본 입출력 프로그램. BIOS는 컴퓨터를 처음 켤 때부터 끌 때까지 시스템에 설치된 주변기기들에 대한 제어와
오류 검색 기능을 수행하며 프린터 등 시스템 외부에 설치된 주변 장치들을 운영체제가 직접 통제 할 수 있게
해준다
1 단계 : BIOS(Basic Input/Output System) 단계
자체진단기능(POST(Power On Self Test))
CMOS검사, CPU, MEMORY, 그래픽카드, 키보드, 마우스등 각종 장치들의 이상 유무를 검사하고 이들 장치(하드웨
어들)을 초기화시킨다.부팅매체검색과 부트로더 실행
POST과정이 이상 없이 진행 완료되면 검색된 부팅매체(하드디스크, CD-ROM, 플로피 디스크등)에서 부
트로더(예:GRUB, LILO)를 불러들인다.즉, 예를들어 하드디스크가 부팅매체로 선택되었다면 하드디스크의 부팅파티션에 있는 0번섹터 (대부분 MBR이라
고도 함)에 있는 부트로더(Boot Loader, 즉, GRUB)을 읽어 들이게 된다.부트로더(GRUB)가 메모리에 적재되면 BIOS는 종료되고, 시스템 제어권은 부트로더(GRUB)이 갖게 된다.
2 단계 : 부트로더(GRUB/LILO) 단계
리눅스에서 사용하는 부트로더는 LILO(Linux Loader)나 GRUB가 있다.
만약 부팅로더로 GRUB를 사용하고 있다면, GRUB은 실행과 함께 /boot/grub/grub.conf파일을 읽어서 어떤 부팅메
뉴(커널)로 부팅을 할 것인가를 결정하게 된다. (자동결정 또는 사용자선택) 이 화면이 GRUB이 화면(파란화면)에 나타나는 첫 번째 화면이다.GRUB은 커널(kernel)이미지를 불러들이고 시스템 제어권을 커널에게 넘겨준다.
[참고] 부트로더(Boot Loader)란?
부트로더는 커널(운영체제의 심장)을 메모리에 올려놓는 일을 한다. 보통 GRUB가 멀티부팅을 위한 것으로 생각
하는 사람이 있지만 멀티부팅이 아니더라도 리눅스의 부팅을 위해선 꼭 있어야 하는 것이다.
컴퓨터에 전원이 들어오고 나면 제일 먼저 디스크의 첫 부분을 읽어서 제일 처음 실행되는 프로그램(로더)이다. 부트로더는 커널 이미지의 위치를 알고 있어서 스스로 커널이미지를 찾아서 메모리에 올려놓는다.
(1). LILO(Linux LOader)
- 레드햇(RedHat) 7.X 부터 기본 부터로더로 제공
- 부트로더 LILO의 단점을 보안
- 사용하기가 편함
- 부팅 정보가 올바르지 않아도 부팅시에 바로 수정이 가능
환경 설정 파일 : /etc/lilo.conf
실행 파일 : /sbin/lilo
설정 옵션 :
/etc/lilo.conf
----------------------------------------------------
timeout=50 /* 부팅시 타임아웃 설정(예: 50초) */
default=linux /* 기본 부팅 레이블(예: linux) */
image=/boot/vmlinuz-2.4.21-20.EL /* 커널 부팅 이미지 */
label=linux /* 레이블 이름(예: linux) */
initrd=/boot/initrd-2.4.21-20.EL.img /* 초기화 램디스크 파일 */
read-only /* root 파티션 마운트 옵션 */
append="root=LABEL=/“ /* 마운트할 root 파티션 */
----------------------------------------------------
lilo 설치 : # /sbin/lilo
lilo 삭제 :
(linux 상에서 삭제) # /sbin/lilo –u
(windows 상에서 삭제) # fdisk /mbr(2). GRUB(GRand Unified Bootloader)
환경 설정 파일 : /boot/grub/grub.conf(/etc/grub.conf 심볼릭 링크로 걸려있다.)
실행 파일 : /sbin/grub
설정 옵션 :
/boot/grub/grub.conf
-----------------------------------------------------------------------------
timeout=5 /* 부팅시 타임아웃 설정 */
default=0 /* 기본 부팅 레이블(예: 0)
hiddenmenu /* GRUB 메뉴 숨김 */
splashimage=(hd0,0)/bot/grub/splash.xpm.gz /* splashimage 위치 */
title CentOS (2.6.18-164.11.1.el5) /* 타이틀 */
root (hd0,0) /* root 파티션 위치 */
kernel /boot/vmlinuz-2.6.18-164.11.1.el5 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.18-164.11.1.el5.img /*이니셜램디스크라고 한다*/
-----------------------------------------------------------------------------GRUB 설치 : # /sbin/grub-install /dev/sda
GRUB 삭제 :
(Linux 상에서 삭제) : # dd if=/dev/zero of=/dev/sda bs=446 count=1
(Windows 상에서 삭제) : # fdisk /mbr3단계 : 커널(Kernel) 단계
/etc/grub/grub.conf 파일에 의해서 커널(vmlinuz)이 메모리상에서 실행되면, 하드웨어를 점검하고
/var/log/dmesg 파일에 기록을 한다.루트 파일시스템(/)을 읽기 전용(Read Only)으로 마운트 한다. 만약 마운트 실패시 “커널 패닉” 메세지를
출력한다.커널은 swapper프로세스(PID 0번)를 호출한다.
swapper(PID 0번)는 커널이 사용할 각 장치드라이브들을 초기화하고 init프로세스(PID 1번)가 실행하게 된다.
/sbin/init프로세스가 실행되면서 /etc/inittab파일을 읽어들여서 그 내용들을 차례대로 실행한다.
4 단계 : init 프로세스 단계
/sbin/init 프로세스가 실행이 되면 /etc/inittab 파일에 정의된 순서에 따라서 시스템을 초기화하기 시작한다. 즉, 로그인프롬프트가 나오기까지의 부팅완료화면까지 init프로세스에 의해서 실행되는 내용들인 것이다.
(1) /sbin/init 데몬
프로세스란 실행 중인 프로그램을 말하는 것이다. 파일에 저장되어있는 프로그램은 단지 기계어 명령들을 파일에
적어 놓은 것에 불과하다. 그렇지만 이것이 메모리에 올라가서 활동을 하면 프로세스라고 부르는 것이다.
프로세스가 어떤 다른 프로세스를 새로 생성할 경우(실행시킬 경우), 실행시킨 프로세스를 부모 프로세스(parent)
라고 하고, 새로 실행된 프로세스를 자식 프로세스(child)라고 부른다. 프로세스는 자기 고유의 번호를 가지고 있
다. 이걸 PID(process id)라고 말한다. 그리고 프로세스는 자기를 실행시켜준 부모 프로세스의 번호도 알고 있다.
즉, PPID(parent process id)라고 한다.
init은 무조건 PID 1번이다. 커널이 제일먼저 실행시키는 프로세스이기 때문이다. 그 다음에 커널은 또 프로세스를
만들지 않는다. 이후로 생성되는 프로세스는 모두 init으로부터 나온 프로세스이거나 아니면 init에서 나온 프로세
스에서 나온 프로세스이다. 다시 말해서, init은 모든 프로세스의 부모프로세스라고 할 수 있다. 커널은 init을 실
행시키고 나서는 제어를 init에게 넘긴다. init이 동작하게 되면 커널은 자기의 본업 (프로그램이 특정 기능을 요
청하면 처리해 주는 등의 일)을 하게 된다.
init은 흔히 init script라고 부르는 일련의 작업을 진행하게 된다. 여기에 관련된 파일은(시스템마다 다름) 다음
과 같다.
(2) /etc/inittab (initailize table) 파일
/etc/inittab 파일은 /sbin/init 데몬이 읽어 들이는 설정 파일이다.
이 파일안에는 부팅시에 시스템을 초기화 하는 과정에 대한 전반적인 정보를 담는다.
(2-1) /etc/inittab 파일의 형식
/etc/inittab 파일의 형식은 다음과 같다.
ID:Runlevel:Action:Process
(예) ca:ctrlaltdel:/sbin/shutdown -t 3 –r now
필드
설명
ID
식별자. /etc/inittab 파일안에서의 각 항목들에 대한 식별자, 최대 4자리. (libc의 버전이 5.2.18 보다 낮은 버전이나, a.out 라이브러리 컴파일 했다면, 사용할 수 있는 최대 문자 개수는 개이다.)
Runlevel
런레벨. 진행할 런레벨 지정한다. 만약 런레벨 지정이 없으면 모든 런레벨을 지정한것과 같다.
Action
동작방식지정
(initdefault) : 시스템 부팅 뒤에 실행될 런레벨을 지정한다. 만약 이 부분이 없으면, 어떤 런레벨로 실행할 것인지 콘솔에서 물어 보게 된다. Process 필드는 무시된다.
(sysinit) : 시스템 부팅을 할 때에 그 프로세스가 실행된다. 이것은 boot, bootwait로 지정된
프로세스 보다 먼저 실행된다. Process 필드는 무시된다.(wait) : 지정한 런레벨이 되면 그 프로세스가 실행되고, init은 그 프로세스가 종료되기를 기
다린다.(ctrlaltdel) : init가 SIGINT 시그널을 받았을 때 그 프로세스가 실행된다. SIGINT는 시
스템 콘솔에서 <CTRL+ALT+DEL> 키를 입력할 때 발생하는 시그널이다. 이것은 전형적으로 컴퓨터를 리부팅하거나, 단일 사용자 모드를 사용하기 위해서 사용된다.(powerfail) : powerwait과 같지만, init는 그 프로세스 작업이 끝나기를 기다리지 않는다.
(powerokwait) : init가 SIGPWR 시그널을 받았을 때 그 프로세스가 실행된다. OK 라는 단어를 포함하고 있는 /etc/powerstatus 파일이 SIGPWR 시그날을 제공한다.
(respawn) : 그 프로세스가 종료되면 항상 다시 시작하게 한다. (예: getty)
Process
실행프로그램. 실행할 프로세스 지정. 이 필드에 ‘+’문자가 제일 앞에 오면, init은 그 처리 과
정에서 utmp, wtmp 처리를 하지 않게 된다. 이것은 gettys에서 스스로 utmp/wtmp를 처리할 경우
필요하다.
(2-2) 기본 런레벨 지정(Default Runlevel)
# cat /etc/inittab
..... (중략) ......
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
..... (중략) ......
런레벨은 시스템이 특정하게 초기화된 상태이다.
리눅스 시스템의 기본 런레벨은 5(GUI Mode)이다.
----------------------------------------------------------------------------------------------
런레벨 설 명
----------------------------------------------------------------------------------------------
(런레벨 0) 시스템 정지(System Halt)
(런레벨 1) 싱글유저모드(Single User Mode), 관리자가 시스템 관리 목적으로 사용하는 상태
(런레벨 2) 멀티유저모드(Multi User Mode), NFS 서버용 기능이 비활성화 된 상태
(런레벨 3) 멀티유저모드(Multi User Mode), NFS 서버용 기능이 활성화된 상태, 텍스트 모드 상태
(런레벨 4) 아직 정의 되어 있지 않음
(런레벨 5) 멀티유저모드(Multi User Mode), NFS 서버용 기능이 활성화된 상태, 그래픽 모드 상태
(런레벨 6) 시스템 재부팅(System Reboot)
----------------------------------------------------------------------------------------------
/etc/inittab 파일에서 기본 런레벨은 2, 3, 5 이외의 번호는 지정하는 것이 아니다.
(2-3) 기본적인 시스템 초기화
# cat /etc/inittab
..... (중략) .....
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
..... (중략) .....
/etc/rc.d/rc.sysinit 파일은 시스템의 기본적인 초기화 작업을 수행한다.
/etc/rc.d/rc.sysinit 파일은 배쉬쉘 스크립트 파일이므로 편집기(예: vi)로 열어서 확인 할 수 있다.
부팅시 화면에서 시스템 초기화관련 메시지들이 모두 이 파일의 실행과정의 메시지이다.
/etc/rc.d/rc.sysinit 스크립트는 다음과 같은 역할을 가진다.(SELinux에 대한 설명은 제외하였다.)
► 변수 설정(HOSTNAME, HOSTTYPE, unamer)
► /etc/sysconfig/network 파일 실행
► 호스트 이름이 설정 되어 있지 않으면 호스트 이름을 “localhost”로 설정
► /proc 파일시스템 마운트
► USB 마운트(usbfs : usb 파일시스템)
► /etc/init.d/functions 스크립트 실행
► 키맵 로딩(keymap loading)
► 폰트 설정(/sbin/setsysfont 실행)
► 배너메세지 출력("Welcome to CentOS release 5.4 (Final)"
"Rress 'I' to enter interactive startup")
► 운영체제 시간 설정(/etc/sysconfig/clock, hctosys/hwclock CMD)
► 커널 모듈 로딩(/proc/sys/kernel/modprobe, /sbin/modprobe CMD)
사용자 모듈 로딩(/etc/sysconfig/modules/*.modules)
► 커널 패커미터 설정(/etc/sysctl.conf)
► 키보드 키맵 설정(/bin/loadkeys)
► 호스트 이름 설정(hostname CMD)
► RAID 설정(nash CMD, mdadm CMD, /etc/mdadm.conf)
► Device Mapper 동작(/dev/mapper)
► 쿼타 점검(quotacheck CMD, convertquot CMD, quota 관련 파일들)
► 루트 파티션 rw로 다시 마운트
가상파일시스템 마운트(/proc, /sys, /dev/pts, /proc/bus/usb 등)
/etc/fstab 파일에 정의된 모든 파일시스템 마운트(auto 옵션)
► 설정이 안되어 있으면 실행되는 툴들
/usr/bin/rhgb-client
/usr/bin/system-config-keyboard
/usr/bin/passwd root
/usr/sbin/system-config-network-tui
/usr/sbin/timeconfig
/usr/sbin/authconfig-tui --nostart
/usr/sbin/ntsysv --level 35
► 불필요한 파일 삭제
/var 디렉토리안의 임시 파일들 삭제(예: /var/run/news/*, /var/run/cups/*)
utmp/wtmp 파일 정리
► 스왑 활성화(Swap ON, swapon CMD, /etc/fstab)
► 시리얼 포트(Serial Port) 설정
► dmesg 로그 기록(/var/log/dmesg)
(2-4) 각 런레벨에 맞는 시작 스크립트(Startup Script) 실행
# cat /etc/inittab
..... (중략) .....
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
..... (중략) .....
결정된 부팅레벨에 따라서 조건(id:5:initdefault:)에 맞는 행을 실행한다.
부팅화면에서 각 서비스데몬(sshd, sendmail, xinetd, syslogd, named, httpd등)들이 실행되며, 서비스 데몬들의 실행되는 메시지들은 모두 이 단계에서 실행되는 메시지들이다.
조건에 따른 실행되는 내용들
- 부팅레벨이 0번이면 -> /etc/rc.d/rc0.d의 파일들이 순차대로 실행됨.
- 부팅레벨이 1번이면 -> /etc/rc.d/rc1.d의 파일들이 순차대로 실행됨.
- 부팅레벨이 2번이면 -> /etc/rc.d/rc2.d의 파일들이 순차대로 실행됨.
- 부팅레벨이 3번이면 -> /etc/rc.d/rc3.d의 파일들이 순차대로 실행됨.
- 부팅레벨이 4번이면 -> /etc/rc.d/rc4.d의 파일들이 순차대로 실행됨.
- 부팅레벨이 5번이면 -> /etc/rc.d/rc5.d의 파일들이 순차대로 실행됨.
- 부팅레벨이 6번이면 -> /etc/rc.d/rc6.d의 파일들이 순차대로 실행됨.
각 디렉토리들에는 S로 시작하는 파일들과 K로 시작하는 파일들이 링크파일 형태로 존재한다.
각 디렉토리내에 있는 링크파일들은 K와 S다음 두 자리 숫자로 시작한다. (실행순서를 의미함.)
숫자가 낮으면 먼저 실행되고, 숫자가 크면 나중에 실행되는 것을 나타낸다.
디렉토리들에는 링크파일들이 들어 있으며, /etc/rc.d/init.d/디렉토리의 파일들로 링크되어 있다.
각 디렉토리의 마지막에는 /etc/rc.d/rc.local파일이 실행되는 링크파일이 있다.
(Symbolic Link)
/etc/rc.d/rc # -----> /etc/rc#.d/S##script start -----> /etc/init.d/script start
/etc/rc#.d/K##script stop -----> /etrc/init.d/script stop
A
| (Symbolic Link)
V
/etc/rc.d/init.d/script start
/etc/rc.d/init.d/script stop
(Symbolic Link)
/etc/rc.d/rc 5 -----> /etc/rc5.d/S##script start -----> /etc/init.d/script start
/etc/rc5.d/K##script stop -----> /etrc/init.d/script stop
A
| (Symbolic Link)
V
/etc/rc.d/init.d/script start
/etc/rc.d/init.d/script stop
(2-4-1) /etc/init.d/script & /etc/rc#.d/[S|K]##script 상관 관계
# cd /etc/rc5.d
# ls
K01dnsmasq@ K50tux@ S09isdn@ S26lvm2-monitor@
K02avahi-dnsconfd@ K69rpcsvcgssd@ S10network@ S28autofs@
K02NetworkManager@ K73ypbind@ S11auditd@ S50hplip@
K02oddjobd@ K74ipmi@ S12restorecond@ S55sshd@
K03yum-updatesd@ K74nscd@ S12syslog@ S56cups@
K05conman@ K74ntpd@ S13cpuspeed@ S56rawdevices@
K05innd@ K80kdump@ S13irqbalance@ S56xinetd@
K05saslauthd@ K85mdmpd@ S13iscsi@ S57vmware-tools-thinprint@
K05wdaemon@ K87multipathd@ S13portmap@ S60vsftpd@
K10dc_server@ K87named@ S14nfslock@ S80sendmail@
K10psacct@ K88wpa_supplicant@ S15mdmonitor@ S85gpm@
K12dc_client@ K89dund@ S18rpcidmapd@ S90crond@
K15httpd@ K89netplugd@ S19rpcgssd@ S90xfs@
K20nfs@ K89pand@ S20hypervkvpd@ S95anacron@
K20rwhod@ K89rdisc@ S22messagebus@ S95atd@
K24irda@ K91capi@ S23setroubleshoot@ S96readahead_later@
K25squid@ S03vmware-tools@ S25bluetooth@ S98avahi-daemon@
K30spamassassin@ S04readahead_early@ S25netfs@ S99firstboot@
K35dovecot@ S05kudzu@ S25pcscd@ S99local@
K35smb@ S07iscsid@ S26acpid@ S99smartd@
K35vncserver@ S08ip6tables@ S26apmd@
K35winbind@ S08iptables@ S26haldaemon@
K50netconsole@ S08mcstrans@ S26hidd@
# ls -l /etc/rc5.d/S55sshd
lrwxrwxrwx 1 root root 14 Feb 10 20:40 /etc/rc5.d/S55sshd -> ../init.d/sshd*
# /etc/init.d/sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
# /etc/rc5.d/S55sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
# cat /sbin/service | more
----------------------------------------------------------
#!/bin/sh
. /etc/init.d/functions
VERSION="`basename $0` ver. 0.91"
USAGE="Usage: `basename $0` < option > | --status-all | \
[ service_name [ command | --full-restart ] ]"
SERVICE=
SERVICEDIR="/etc/init.d"
OPTIONS=
----------------------------------------------------------
(2-4-2) /etc/init.d/script & /etc/rc.d/init.d/script 상관 관계
# ls -l /etc/init.d
lrwxrwxrwx 1 root root 11 Feb 10 20:36 /etc/init.d -> rc.d/init.d/
# ls /etc/rc.d/init.d
acpid* firstboot* killall* oddjobd* spamassassin*
anacron* functions* krb524* pand* squid*
apmd* gpm* kudzu* pcscd* sshd*
atd* haldaemon* lvm2-monitor* portmap* syslog*
auditd* halt* mcstrans* psacct* tux*
autofs* hidd* mdmonitor* rawdevices* vmware-tools*
avahi-daemon* hplip* mdmpd* rdisc* vmware-tools-thinprint*
avahi-dnsconfd* hsqldb* messagebus* readahead_early* vncserver*
bluetooth* httpd* microcode_ctl* readahead_later* vsftpd*
capi* hypervkvpd* multipathd* restorecond* wdaemon*
conman* innd* named* rpcgssd* winbind*
cpuspeed* ip6tables* netconsole* rpcidmapd* wpa_supplicant*
crond* ipmi* netfs* rpcsvcgssd* xfs*
cups* iptables* netplugd* rwhod* xinetd*
cups-config-daemon* irda* network* saslauthd* ypbind*
dc_client* irqbalance* NetworkManager* sendmail* yum-updatesd*
dc_server* iscsi* nfs* setroubleshoot*
dnsmasq* iscsid* nfslock* single*
dovecot* isdn* nscd* smartd*
dund* kdump* ntpd* smb*
# ls -li /etc/init.d/sshd
66765 -rwxr-xr-x 1 root root 3.4K Feb 23 2012 /etc/init.d/sshd*
# ls -li /etc/rc.d/init.d/sshd
66765 -rwxr-xr-x 1 root root 3.4K Feb 23 2012 /etc/init.d/sshd*
(2-4-3) 현재 실행되는 스크립트와 부팅시 실행되는 스크립트
(부팅시 실행할 스크립트) /etc/rc#.d/script
(현재 실행할 스크립트) /etc/init.d/script or /etc/rc.d/init.d/script
부팅시에 특정한 서비스를 설정하기 위해서는 다음과 같은 툴을 사용할 수 있다.
(TUI) /usr/sbin/ntsysv (/usr/sbin/setup)
(TUI) /sbin/chkconfig
(GUI) /usr/sbin/system-config-services (/usr/sbin/serviceconf)
[EX1] ntsysv 명령어의 동작 원리
ntsysv 명령어는 단순하게 /etc/rc#.d 디렉토리 안의 스크립트를 관리 해 주는 것이다. /etc/rc#.d 디렉토리안의 S##로 시작하는 스크립트나 K##로 시작하는 스크립트들의 이름을 변환하는 역할을 가진다.
따라서, /etc/rc#.d 디렉토리 안의 스크립트이름을 S##에서 K##으로 변경되었다고 해서 현재 적용되는 것은 아니고 부팅시에 적용이 되는 것이다. 현재 서비스를 start/stop 하기 위해서는 /etc/init.d/script를 사용한다.
# ntsysv
ntsysv 1.3.30.2 - (C) 2000-2001 Red Hat, Inc.
┌---─────----┤ Services ├──────────┐
│ What services should be automatically started? |
│ |
│ [ ] rpcsvcgssd ▒ |
│ [ ] rsync ▒ |
│ [ ] rwhod ▒ |
│ [ ] saslauthd ▒ |
│ [*] sendmail ▒ |
│ [*] setroubleshoot ▒ |
│ [*] smartd ▒ |
│ [ ] smb ▒ |
│ [ ] spamassassin ▒ |
│ [ ] squid ▒ |
│ [ ] sshd ▮ |
│ [*] syslog ▒ |
│ [ ] talk ▒ |
│ [ ] tcpmux-server ▒ |
│ [*] telnet ↓ |
│ |
│ ┌────┐ ┌────┐ |
│ │ Ok │ │ Cancel │ |
│ └────┘ └────┘ |
└───────────-──────────────┘
Press <F1> for more information on a service.
(sshd 서비스 off 상태)
# cd /etc/rc5.d
# ls *sshd*
K25sshd
# ntsysv
ntsysv 1.3.30.2 - (C) 2000-2001 Red Hat, Inc.
┌---─────----┤ Services ├──────────┐
│ What services should be automatically started? |
│ |
│ [ ] rpcsvcgssd ▒ |
│ [ ] rsync ▒ |
│ [ ] rwhod ▒ |
│ [ ] saslauthd ▒ |
│ [*] sendmail ▒ |
│ [*] setroubleshoot ▒ |
│ [*] smartd ▒ |
│ [ ] smb ▒ |
│ [ ] spamassassin ▒ |
│ [ ] squid ▒ |
│ [*] sshd ▮ |
│ [*] syslog ▒ |
│ [ ] talk ▒ |
│ [ ] tcpmux-server ▒ |
│ [*] telnet ↓ |
│ |
│ ┌────┐ ┌────┐ |
│ │ Ok │ │ Cancel │ |
│ └────┘ └────┘ |
└───────────-──────────────┘
Press <F1> for more information on a service.
(sshd 서비스 on 상태)
# cd /etc/rc5.d
# ls *sshd*
S55sshd
(실무 예) sshd 서버스 Open
(현재) # service sshd start (# /etc/init.d/sshd start)
(부팅) # chkconfig sshd on
init(/etc/inittab)
-> /etc/rc.d/rc 5
|
V
/etc/rc5.d/S55sshd <----------> /etc/init.d/sshd, /etc/rc.d/init.d/sshd
A A
| |
# chkconfig sshd on/off # service sshd start/stop/restart
# /etc/init.d/sshd start/stop/restart
# /etc/rc.d/init.d/ssh start/stop/restart
[EX2] 부팅시에 사용자 스크립트/명령어를 실행하는 방법
리눅스에서 부팅시에 사용자 스크립트/명령어를 실행하기 위해서는 /etc/rc#.d/S##local 스크립트를 사용한다.
(예: /etc/rc5.d/S99local)/etc/rc5.d/S99local 스크립트는 /etc/init.d, /etc/rc.d/init.d 디렉토리안의 스크립트에 연결되어 있지 않다. 따라서 /etc/rc5.d/S99local 스크립트에 들어 있는 내용은 부팅시에만 실행할 내용을 담는다.
# cat /etc/rc5.d/S99local (/etc/rc.local, /etc/rc.d/init.d/rc.local)
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
#
# (1) ntfs.ko Module Install
#
insmod /lib/modules/2.6.18-128.1.1.el5/kernel/fs/ntfs/ntfs.ko
# ls -l /etc/init.d/*local*
ls: /etc/init.d/*local*: No such file or directory
# ls -l /etc/rc.d/init.d/*local*
ls: /etc/rc.d/init.d/*local*: No such file or directory
(2-5) 부팅시 인터럽트 재부팅 & 부팅시 전원 처리
# cat /etc/inittab
..... (중략) .....
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 –r now
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down“
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
..... (중략) .....
(부팅시 인터럽트 재부팅) “ca::ctrlaltdel:/sbin/shutdown -t3 –r now”
부팅하는 과정에서 <CTRL + ALT + DELETE> 키를 입력하면 프로세스에게 경고 메세지를 주고 3초뒤에 리부팅(부팅시 전원 처리) “pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"”
“pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"”
부팅하는 과정에서 전원이 부족하다는 시그널을 받으면, 전원 실패 메세지를 출력하고 2분뒤에 시스템을 정지시
킬려고,하지만 2분안에 전원이 복구되면, 이전 shutdown 명령어를 취소한다.(2-6) 가상 콘솔 설정 및 GUI 로그인 창 설정
# cat /etc/inittab
..... (중략) .....
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
..... (중략) ....
(/sbin/mingetty)
부팅의 마지막 단계로서 6개의 가상콘솔이 실행된다.
2, 3, 4, 5번 부팅레벨에서만 해당되는 내용이다.
respawn속성(옵션)으로 인하여 로그인 후에 콘솔화면에서 작업 후에 exit로 로그아웃을 하면 자동으로 로그인
창이 다시 실행되는 것을 말한다.각 행의 실행내용
- 1:2345:respawn:/sbin/mingetty tty1 은 ALT+F1을 눌렀을 때에 보여짐. (첫번째 가상콘솔)
- 2:2345:respawn:/sbin/mingetty tty2 은 ALT+F2를 눌렀을 때에 보여짐. (두번째 가상콘솔)
- 3:2345:respawn:/sbin/mingetty tty3 은 ALT+F3을 눌렀을 때에 보여짐. (세번째 가상콘솔)
- 4:2345:respawn:/sbin/mingetty tty4 는 ALT+F4를 눌렀을 때에 보여짐. (네번째 가상콘솔)
- 5:2345:respawn:/sbin/mingetty tty5 는 ALT+F5를 눌렀을 때에 보여짐. (다섯번째 가상콘솔)
- 6:2345:respawn:/sbin/mingetty tty6 은 ALT+F6을 눌렀을 때에 보여짐. (여섯번째 가상콘솔)
(/etc/X11/prefdm)
GUI 로그인 창을 띄워 준다(Display Manager)
'linux > centOS' 카테고리의 다른 글
스케줄링 관리 (0) 2018.07.05 사용자 그룹 관리 (0) 2018.07.04 소프트웨어 관리 2 (0) 2018.07.02 소프트웨어 관리 1 (0) 2018.06.29 SWAP 관리 (0) 2018.06.27