[UNIX 시스템] 5강 - 리눅스 시작과 종료

2026. 10. 16. 02:09·방송통신대학교/🐧 UNIX 시스템

📌 개요

🔑 학습 키워드

┗  운영체제 부팅 과정: BIOS, MBR 영역, 부트 로더(GRUB), 커널, systemd

┗  초기화 데몬(systemd): PID1번에 해당하는 조상 프로그램 -> 다른 백그라운드 프로그램을 관리함

┗  유닛: systemd가 관리하는 시스템 자원, 서비스와 같은 시스템 구성요소(컴포넌트) 의미

┗  타깃(런레벨): systemd 유닛 종류 중 하나

┗  systemctl: systemd 을 사용자가 직접 제어하기 위한 인터페이스(제어용 CLI 도구)임

┗  시스템 종료: systemctl, shutdown(종료 및 재부팅 영역에선 좀 더 다양한 기능 제공)

 

💡 1. 운영체제의 부팅

[ 리눅스 일반적인 부팅 과정 ]

['부팅 과정']
(1) 전원ON
(2) ROM BIOS(부트 펌웨어)가 MBR 영역에 존재하는 부트 블록 프로그램 실행
(3) 블록 프로그램 -> 운영체제 파티션에 있는 부트 로더(GRUB, LILO 등)를 실행
(4) 부트 로더(GRUB) -> 리눅스 커널 이미지 & initramfs(부팅에 필요한 임시 파일시스템) 로드
(5) 커널 실행
(6) 커널 -> 하드웨어 점검 및 초기화 -> 루트(/) 파일 시스템 마운트 및 검사(read권한만)
(7) 커널 -> /lib/systemd/systemd 프로그램 실행시키고 제어를 넘김
(8) systemd 프로세스 -> 시스템 운영을 위한 나머지 초기화 과정 처리 및 부팅 이후에도 계속 수행
-> systemd 는 시스템 초기화 작업 및 사용자 공간을 준비하고 사용자 프로세스를 관리함

['부트 로더 종류']
- 'LILO(LInux LOader)': 전통적인 리눅스 부트 로더
- 'GRUB(GRand Unified Bootloader)': 다양한 기능 제공 -> 편리한 부트로더 -> 현재 가장 널리 사용

 

[ MBR(Master Boot Record) ]

┗  부트 블록: 부트 로더(GRUB)의 일부이며, 보조기억장치에 적재된 프로그램 중 가장 먼저 실행됨

┗  파티션 테이블: 파티션의 시작과 끝 주소, 부팅 가능한 파티션 여부, 파티션 타입 등이 기록

- 즉, 파티션 테이블의 정보를 통해 어떤 파티션 어디에 부트로더(GRUB) 본체가 있는지 찾는것임

 

[ 부트 로더의 동작(GRUB) ]

┗  (1) MBR 부트 블록이 운영체제의 파티션에 있는 부트 로더(GRUB)를 실행

┗  (2) 부트 로더는 "커널 이미지", "initramfs"을 찾아 메모리에 적재

 

[ 커널 부팅 과정 ]

['커널 부팅 과정']
(1) 압축된 커널 이미지 -> 메모리에 로드된 후 압축이 풀리고 메모리에 커널 실행
(2) 커널은 커널의 자체 기능 및 설치된 하드웨어 점검
(3) 루트(/) 파티션을 읽기 전용으로 마운트하여 디스크 검사
(4) 디스크 검사 끝난 후 root 파티션을 쓰기 가능 모드로 다시 마운트
(5) 커널 -> systemd 프로세스 시작시키고 제어권 넘김
['systemd']
(6) systemd 프로세스 -> 기본 타킷으로 /etc/systemd/system/default.target 파일을 읽음
(7) 기본 타깃에 따라 시스템의 실행 모드가 정해짐에 따라 실행되는 서비스와 프로세스 그룹이 결정됨
-> 예를 들면, 기본 타깃 graphical.target 유닛의 경우
-> GNOME 디스플레이 관리자 또는 계정 관리자와 같은 시스템 서비스를 시작시키며,
-> multi-user.target도 활성화시킴

 

💡 2. 초기화 데몬

[ systemd (초기화 데몬 프로그램) ]

┗  systemd: 커널이 가장 처음 실행시키는 사용자 프로세스 -> PID1번을 가지는 프로세스임

- 즉, 커널 프로세스를 제외한 모든 프로세스의 부모 또는 조상 프로세스임
- systemd 는 나머지 부팅 과정 즉, 시스템 초기화 작업을 실행
-> 해당 'systemd' 를 '초기화 데몬' 이라고도 함
-> 사용자 환경 준비, 파일 시스템 마운트, 시스템 운영을 위한 서비스 프로그램 실행 등
-> 서비스들의 병렬 시작, 온디맨드 활성화, 서비스 간 의존성 해결
- 이후에도 계속 수행되며 시스템 운영을 관리하고 셧다운까리 처리
-> 시스템 상태 모니터링, 데몬 관리, 사용자 프로세스의 정리, 로그아웃 처리와 로그인 서비스 제공 등

┗  초기화 데몬: 백그라운드 서비스와 프로세스를 초기화하고 관리하는 최상위 관리 프로그램(백그라운드)

┗  프로세스: 커널의 관리하에 있는 실행 중인 상태의 프로그램

┗  PID: 프로세스 고유 번호, PPID: 부모 프로세스의 고유번호

- 즉, 프로세스A -> 프로세스B 실행시 A는 B의 부모가 되며, B는 PID, PPID를 가짐

┗  systemd 수행하는 기능: 

- '초기화': 커널 초기화 이후의 초기화 과정을 수행
- '파일 시스템 마운트': /etc/fstab 파일을 읽어 마운트 유닛 파일을 자동 생성하고 파일 시스템을 마운트
- '시스템 서비스 활성화': 부팅 과정에서 실행될 서비스를 활성화하고 시스템 서비스를 병렬로 시작 시킴
-> 필요한 데몬만 필요한 시점에 활성화시키는 온디맨드 활성화를 제공
- '의존성 해결': 서비스 간의 의존성을 체계적으로 관리하고 해결한다.
-> 이것은 서비스가 실행되기 전에 필요로 하는 다른 서비스를 자동으로 실행시킴으로써 수행됨
- '로그인 서비스 시작': 로그인 서비스를 시작시킨다.
-> 이것은 시스템이 부팅될 때 자동으로 실행되는 데몬으로 사용자 로그인을 처리하고,
-> 시스템에서 실행 중인 다른 프로그램과 상호작용한다.
- '시스템 상태 모니터링': 부팅된 시스템의 상태를 모니터링한다.
-> 이를 통해 시스템의 문제를 식별하고 해결하며, 시스템 상태의 스냅숏을 저장한다.
- '데몬 관리': 실행 중인 데몬 프로세스를 관리한다.

- 이와 같은 기능을 통해 systemd는 부팅 속도의 증가, 자원 사용의 효율화, 보안 강화,
안정적이고 신뢰성 있는 시스템 관리 기능을 제공한다.

┗  결론:

- systemd는 셸과 같은 백그라운드 프로그램을 실행(셸 = PID1의 자식이 됨)
- 셸을 통해 사용자는 응용 프로그램(예:python)을 실행(응용 프로그램 = 셸(PID?) 자식이 됨)
- 결론은 [systemd -> 셸(백그라운드) -> 응용프로그램] 같은 연결점이 생김
-> **이래서 systemd(PID1)은 모든 프로그램의 조상 PID 인것임**

 

[ 유닛 ]

┗  유닛: systemd가 관리하는 시스템 자원, 서비스와 같은 시스템 구성요소(컴포넌트) 의미

┗  유닛의 동작, 의존성, 실행 옵션 등은 "유닛 설정 파일"에서 설정 항목으로 제어됨.

┗  유닛 종류: 시스템 서비스, 소켓, 마운트, 타깃, 디바이스 등 다양한 유형의 유닛(설정 파일) 존재

┗  유닛 파일이 존재하는 디렉터리:

┗  각각의 디렉터리 안에 해당하는 유닛 파일들이 존재

┗  결론:

- 'systemd 유닛': 컴퓨터 부팅 시 운영체제가 기본적으로 제공하여 구동하는 필수 시스템 소프트웨어의 모음
- 즉, 부팅 시 정상적인 컴퓨터 동작을 위해 기본적으로 제공하는 시스템 소프트웨어 구성 요소들임

 

[ systemd 타깃 & 런레벨 ]

┗  런레벨:

- 컴퓨터가 켜졌을 때 시스템이 어떤 서비스들을 실행하고 어떤 환경
-> (예: 명령어만 쓰는 모드, 그래픽 화면 모드, 다중 사용자 서버 모드 등)을 
-> 제공할지 결정하는 시스템의 동작 모드

┗  과거에는 "런레벨" -> 현재는 "타깃"이라고 부름

┗  런레벨(타깃) 종류:

- 'poweroff.target': 시스템을 종료하고 전원을 끔('기존 런레벨 0')
- 'rescue.target': 시스템 복구 모드(문제 발생 시 저수준의 상호작용을 제공하는 타깃)('기존 런레벨 1')
- 'multi-user.target': 다중 사용자 텍스트 모드(일반적으로 서버 환경에서 사용)('기존 런레벨 3')
- 'graphical.target': 다중 사용자 그래픽 모드(주로 데스크톱 환경에서 사용)('기존 런레벨 5')
- 'reboot.target': 시스템을 종료하고 재부팅함('기존 런레벨 6')

┗  기본 타깃(런레벨)을 확인 & 변경하는 명령:

- '기본 타깃(런레벨) 확인 명령어': systemctl get-default
- '기본 타깃(런레벨) 변경 명령어': systemctl set-default <name.target>

┗  현재 타깃 -> 다른 타깃 유닛으로 바꾸는 관리자 명령:

- '타겟 변경 명령어': systemctl isolate <name.target>
-> 현재 시스템 타겟을 즉시 중단 -> 지정한 타겟으로 전환 명령어

- 'telinit 명령': 과거 SystemV init 시절에 쓰던 구형 명령어
-> 현대 리눅스는 이를 systemctl isolate로 호환성을 위해 연결(심볼릭 링크)해둔 상태
-> 즉, 동일한 기능을 수행하지만 현재는 systemctl 사용
-> '사용예시': telinit runlevel => telinit 3 = 런레벨 변경(텍스트 모드만 지원)

┗  runlevel 명령: 이전 런레벨과 현재 런레벨을 확인하는 명령

[ 시스템 서비스 관리 ]

┗  "systemctl" 명령을 통해 시스템 서비스의 상태 보기, 시작, 멈춤, 재시작, 활성화 및 비활성화 작업 수행 가능

┗  사용예시:

'systemctl [options] command [untis]'
- 'command': 서브 명령(sub command)을 나타냄
-> start, stop, reload, restart, status, enable, disable, is-active, is-enabled 등 존재
-> 즉, start = 서비스 실행, reload = 서비스 재시작 등 할 수 있음 (관리 가능)

┗  서비스 실행 & 상태 확인 명령어:

┗  서비스 활성화 & 서비스 종속성 확인 명령어:

 

[ 웹 콘솔의 사용 ]

┗  웹 콘솔: 웹 브라우저를 이용해 리눅스 서버를 관리하고 모니터링하기 위한 도구

┗  설치 후"http://localhost:9090"에 접속하고 root 사용자로 로그인함

 

💡 3. 시스템 종료

[ 전원 관리 명령 ]

┗  Rocky Linux에서는 "systemctl" 유틸리티를 사용하여 전원 관리 명령을 수행

┗  명령어 형식: systemctl command

┗  서브 명령: halt, poweroff, reboot, pm-suspend, pm-hibernate 등

┗  과거 명령 & 현재 명령:

- '과거': 과거 리눅스(system V Ini 시스템)에서는 각 명령들이 독립된 프로그램이었음
- '현재': 현재 리눅스(systemd 기반)에서는 모든 기능을 systemctl 명령어 체계로 통합
-> 즉, systemctl 프로그램 안으로 완전히 통합

 

[ shutdown 명령 ]

┗  시간을 정해 시스템을 안전하게 종료하는 명령

┗  systemctl 과 다르게 shutdown 은 시간 예약 및 접속자 안내 메시지 역할을 해줌

┗  shutdown 명령도 결국 내부적으로 systemctl 을 통과하도록 설계되어있음

┗  명령어 형식: shutdown [options] time [message]

┗  옵션 및 time 인수:

['옵션']
'-r': 시스템 종료 후 재부팅
'-H': 전원을 끄지 않고 시스템 종료
'-P': 시스템 종료 후 전원을 끔
'-f': 재부팅할 때 fsck(file system check)를 하지 않음
'-c': 셧다운 명령어 취소(예약된 셧다운의 취소(time 인수가 필요 없음))
'-k': 실제 셧다운 하는 것처럼 경고 메시지만 보냄(셧다운은 안함)

['time 인수']
- '절대 시간 형식': shutdown -H 23:15
- '~후 종료': shutdown -P + 10 => 10분 후 종료
- 'now': shutdown -h now(즉시 종료를 의미)

 

[ 시스템 종료 절차(과정) ]

┗  실제 systemd 프로세스를 통해 셧다운이 처리가 됨

- systemd 프로세스는 모든 프로세스에게 종료를 알림
- 각 프로세스가 스스로 종료하도록 TERM 시그널을 보냄
- 종료하지 않은 프로세스에게 강제 종료를 위한 KILL 시그널을 보냄
- 파일 시스템을 잠그고 루트 파일 시스템을 제외한 모든 파일 시스템을 언마운트함
- 시스템 호출을 통해 커널에 재부팅 & 종료를 요청
-> 해당 과정에서 메모리의 데이터를 디스크에 저장하는 과정도 포함임

 

[ 시스템 일시 중단 ]

┗  systemctl suspend:

- '일시 중단': 현재 시스템 상태를 RAM에 저장하고 저전력 상태로 함

┗  systemctl hibernate:

- '최대 절전 모드': 시스템 상태를 하드디스크에 저장하고 전원을 끔(전원on => 상태 복구)

┗  systemctl hybrid-sleep:

- '하이브리드 슬립': 메모리 외에 디스크에도 시스템 상태를 저장함

 

💡 4. 데스크탑

[ 데스크탑 ]

┗  GUI를 제공하는 사용자 환경을 의미

- 그래픽 윈도우, 아이콘, 툴바, 메뉴, 위젯 등을 마우스나 키보드로 조작하는 환경

┗  대부분의 데스크톱은 X 윈도우 시스템에 기반을 둠

┗  시각적으로 다양한 스타일의 데스크톱이 존재함(GNOME, KDE 등)

┗  일반적으로 "서버"로 사용하는 리눅스에선 명령 행 인터페이스만 제공(GUI x)

 

[ 대표적 데스크탑 환경 ]

┗  GNOME:

- Red Hat 계열 리눅스에서 기본 데스크톱임
- 단순함, 편의성, 안정성에 초점을 맞춤
- 미니멀한 사용자 인터페이스가 특징

┗  KDE:

- 'K 데스크톱'이라고도 하며 MS 윈도우 환경과 유사
- 다양한 프로그램을 통합적인 모습으로 보여줌
- yum -y groupinstall 'KDE Plasma Workspaces'으로 설치 가능
- 로그인할 때 'GNOME'또는 'KDE'를 선택할 수 있음

'방송통신대학교 > 🐧 UNIX 시스템' 카테고리의 다른 글

[UNIX 시스템] 4강 - 파일과 디렉터리  (0) 2026.10.15
[UNIX 시스템] 3강 - 셸 사용하기  (0) 2026.10.13
[UNIX 시스템] 2강 - 리눅스 설치  (0) 2026.10.12
[UNIX 시스템] 1강 - 리눅스 소개  (0) 2026.10.05
'방송통신대학교/🐧 UNIX 시스템' 카테고리의 다른 글
  • [UNIX 시스템] 4강 - 파일과 디렉터리
  • [UNIX 시스템] 3강 - 셸 사용하기
  • [UNIX 시스템] 2강 - 리눅스 설치
  • [UNIX 시스템] 1강 - 리눅스 소개
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    오늘
    어제
    • 전체보기 (254)
      • 방송통신대학교 (108)
        • 🐧 UNIX 시스템 (5)
        • 📝 프로그래밍 언어론 (13)
        • ⚙️ 운영체제 (14)
        • 🧬 알고리즘 (10)
        • 🔢 자료구조 (14)
        • 💻 컴퓨터과학 개론 (15)
        • 📊 오픈소스기반 데이터분석 (3)
        • ⚙️ 컴퓨터의 이해 (11)
        • 🕸️ 이산수학 (11)
        • 🌍 유비쿼터스 컴퓨팅 (11)
        • 🖥️ 컴퓨터과학과 (1)
      • 공부 (72)
        • 📚백엔드 공부 (6)
        • ☕Java (23)
        • 🌳Spring (13)
        • ⚙️C (12)
        • ⚡Python (15)
        • JavaScript (1)
        • 🛢️Database (0)
        • Algorithm Problem Solving (2)
      • 네트워크 (7)
        • 📜HTTP (7)
      • 스파르타코딩클럽 (64)
      • 정보 (2)
      • 정리가 필요한 글 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    운영체제
    spring
    방송대
    C언어
    프로그래밍 언어론
    자바
    파이썬
    알고리즘
    방통대
    컴퓨터과학 개론
    이산수학
    자료구조
    그래프
    방송통신대학교
    Java
    Python
    배열
    컴퓨터과학과
    함수
    컴퓨터의 이해
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
junbin2
[UNIX 시스템] 5강 - 리눅스 시작과 종료
상단으로

티스토리툴바