티스토리 뷰
부팅은 PC의 전원을 켜는 순간부터 리눅스가 완전히 동작하여 로그인 프롬프트가 출력될때 까지의 과정을 의미한다.
리눅스 부팅은 PC부팅과 리눅스 부팅으로 나눌 수 있다.
1 | BIOS | PC Booting |
MBR | ||
2 | BOOT Loader(GRUB) | Linux Booting |
3 | Kernel | |
4 | Systemd | |
5 | Login shell |
- BIOS
- ROM에 저장되어 ROM-BIOS라고 부른다, PC를 켜면 제일 먼저 동작한다.
- PC에 장착된 기본적인 하드웨어의 상태를 확인한다.
- 하드디스크의 0번 섹터에서 MBR(Master Boot Record) 를 로딩한다. MBR 에는 Boot code와 Patition Table에 대한 정보를 가지고 있다
- 부트로더(boot loader)
- 컴퓨터를 사용자가 사용할 수 있도록 디스크나 플래시에 저장된 운영체제를 읽어 주기억장치에 적재해 주는 프로그램
- 운영체제 실행에 필요한 환경을 설정하고 운영체제 이미지를 메모리에 복사한다
- 부트로더(boot loader)는 부트매니저라고도 부르며 크기가 512바이트로 하드디스크의 첫 번째 섹터인 MBR(Master Boot Record)에 위치한다. MBR에는 부트 매니저 프로그램과 파티션 정보를 저장한다.
- GRUB 는 x86 아키텍처에서 가장 많이 사용되는 부트로더이다.
- CentOS 6 에서는 Grub Legacy를, CentOS 7 이상부터는 GRUB 2 버전을 사용한다.
- 해당 GRUB 환경설정 파일은 GRUB1 의 경우 /boot/grub/menu.lst, GRUB2 의 경우 /boot/grub2/grub.cfg에 있다.
- 커널(Kernel)
- 커널은 가장 먼저 시스템에 연결된 메모리, 디스크, 키보드, 마우스 등 장치들을 검사한다.
- 장치 검사 등 기본적인 초기화 과정이 끝나면 프로세스와 스레드를 생성한다.
- 이 프로세스들은 메모리 관리 같은 커널의 여러 가지 동작을 수행한다.
- 프로세스의 개수와 종류는 리눅스의 버전과 종류에 따라 다르다.
- 커널 프로세스가 생성되면 커널이 수행할 작업이 끝난다.
- 커널은 메모리 관리, 스케줄링 같은 동작을 수행하기 위해 여러 개의 프로세스들을 생성한다.
- 커널 프로세스가 생성되면 수행할 작업이 끝나면서 systemd 서비스를 동작시킨다.
- Systemd
- systemd 서비스는 기존의 init 스크립트를 대체한 것으로 다양한 서비스를 동작시킨다.
- 각 서비스를 시작하는 과성은 화면에 메시지로 출력된다.
- Systemd 프로세스가 1번 프로세스이다.
- 설정 파일은 /etc/inittab 이다
- init 는 시스템의 상태를 7단계로 정의하고 각 단계에 따라 셀 스트립트를 실행한다.
- init 프로세스가 실행하는 스크립트 파일은 /etc/rc.d/init.d 디렉터리에 위치한다
- 현재 실행되는 런레벨을 확인하는 명령어는 runlevel 이다
- systemd 는 소켓 기반으로 동작하며 inetd 와 호환성을 유지한다.
- 셀과 독립적으로 부팅이 가능하다.
- 마운트와 fsck 제어가 가능하다
- 시스템 상태에 대한 스냅숏을 유지한다.
- SELinux 와 통합이 가능하다
- 서비스에 시그널을 전달할 수 있다.
- 셧다운 전에 사용자 세션의 안전한 종료가 가능하다
- systemd는 시스템을 관리하는데 유닛을 사용한다.
유닛 | 기능 | 예 |
service | 시스템 서비스 유닛으로, 데몬을 시작/종료/재시작/로드한다. | atd.service |
target | 유닛을 그루핑한다. | basic.target |
automount | 디렉터리 계층 구조에서 자동 마운트 포인트를 관리한다. | proc-sys-fs-binfmt_misc.automount |
device | 리눅스 장치 트리에 있는 장치를 관리한다. | sys-module-fuse.device |
mount | 디렉터리 계층 구조의 마운트 포인트를 관리한다. | boot.mount |
path | 파일 시스템의 파일이나 디렉터리 등 경로를 관리한다. | cups.path |
scope | 외부에서 생성된 프로세스를 관리한다. | init.scope |
slice | 시스템의 프로세스를 계층적으로 관리한다. | system-getty.slice |
socket | 소켓을 관리하는 유닛으로 AF_INET, AF_INET6, AF_UNIX 소켓 스트림과 데이터그램, FIFO를 지원한다. | dbus.socket |
swap | 스왑 장치를 관리한다. | dev-mapper-fedora\x2dswap.swap |
timer | 타이머와 관련된 기능을 관리한다. | dnf-makecache.timer |
systemd 기반 서비스를 제어하는 명령어는 systemdctl 이다
명령어 | 설명 |
systemctl | 현재 동작 중인 유닛 출력 |
systemctl -a | 전체 유닛 출력 |
systemctl status 유닛명 | 유닛 서비스 상태 확인 |
systemctl stop 유닛명 | 유닛 서비스 정지 |
systemctl start 유닛명 | 유닛 서비스 시작 |
systemctl restart 유닛명 | 유닛 서비스 재시작 |
target 과 런레벨 관련 명령어들은 다음과 같다.
명령어 | 설명 | 예제 |
systemctl get-default | 현재 타겟 확인 | systemctl get-default |
systemctl set-default <타겟명>.target | 기본 타겟(레벨) 지정 | systemctl set-default rescue.target systemctl set-default multi-user.target systemctl set-default graphical.target |
systemctl isolate 런레벨 | 타켓(레벨) 변경 | systemctl isolate rescue systemctl isolate graphical systemctl isolate runlevel 1 systemctl isolate runlevel 5 |
init, telinit | 런레벨 변경 | init 1 init S |
- 로그인 과정
- 입력한 패스워드와 파일 /etc/passwd 필드를 비교한다
- 셀 설정 파일을 실행한다.
- 로그인 셸은 파일 /etc/passwd의 마지막 필드에 정의되어 있다.
셸 종류 | 저장 위치 | 프롬프트 |
sh | 본셸, /bin/sh 에 위치 | $ |
csh | C셸, /bin/csh 에 위치 | % |
ksh | 콘셸, /bin/ksh 에 위치 | $ |
bash | 배쉬셸, /bin/bash에 위치 | $ |
'리눅스정리' 카테고리의 다른 글
시스템 종료 명령어 (0) | 2025.04.24 |
---|---|
네트워크 관련 명령어 (0) | 2025.04.24 |
디렉터리 관련 명령어 (0) | 2025.04.23 |
리눅스 명령어 정리 (0) | 2025.04.19 |
디렉터리별 저장 내용 (0) | 2025.04.18 |