Post

오토에버 클라우드 2기 16일차

오토에버 클라우드 2기 16일차

리눅스 부팅과 종료

1. 부팅과정

전원 → BIOS단계 → Boot Loader → kernel init → systemd → login prompt

 

2.bios 단계

1) 전원을 켜면 BIOS가 동작 기본적인 하드웨어 키보드 마우스 모니터등의 상태를 확인하고 부팅 장치를 선택해서 부팅 디스크의 첫 섹터에서 512B를 로딩 2) 첫 섹터의 512B를 MBR(MASTER BOOT RECORD)라고 하며 디스크의 어느 파티션에 2차 부팅 프로그램(Boot Loader)가 있는지에 대한 정보가 있다 3) MBR은 부트 로더를 찾아서 메모리에 로그하는 작업까지 수행

 

3. Boot Loader

  • 여러 운영체제 중에서 부팅할 운영체제를 선택할 수 있도록 메뉴를 제공
  • 우분투에서는 GRUB를 사용하는데 기본적으로 멀티 부팅이 아니면 GRUB는 메뉴를 출력하지 않고 바로 부팅 작업을 진행
  • GRUB 메뉴 수정을 위해서 /etc/default/grub파일을 수정한다
  • GRUB_TIMEOUT_STYLE=hidden 부분 삭제
  • GTUB_TIMEOUT=0 부분 숫자를 넣어서 시간을 설정한다
  • sudo update-grub 실행해서 적용

 

4. KERNEL INIT 커널 초기화 단계

  • 시스템에 연결괸 메모리, 디스크, 키보드, 마우스등의 장치를 검사
  • 장치 검사 등 기본적인 초기화 과정이 끝나면 일반적으로 프로세스를 만드는 fork를 사용하지 않고 프로세스와 스레드를 생성
  • 이렇게 만들어진 프로세스와 스레드는 메모리 관리와 같은 커널의 여러가지 동작을 수행
  • 이런 프로세스들은 다른 프로세스와 구분하기 위해 대괄호로 표시되고 PID가 낮게 배정된다
  • 커널 프로세스가 생성되면 커널이 수행할 작업이 끝나고 systemd 서비스를 동작

 

5. systemd

systemd는 리눅스 시스템의 최초 사용자 공간 프로세스(init) 역할을 수행하는 시스템 및 서비스 매니저 우분투를 포함한 많은 현대 리눅스 배포판에서 기존의 SysV init 스크립트나 Upstart를 대체하며 사용되고 있다

systemd의 주요 특징

  • 병렬 서비스 시작 부팅 속도를 높이기 위해 서비스들을 병렬로 실행합니다.

  • 의존성 기반 서비스 관리 서비스 간의 의존 관계를 파악해 필요한 순서에 따라 실행합니다.

  • 소켓 기반 활성화 (Socket-based activation) 특정 서비스는 네트워크 요청(소켓)이 올 때 자동으로 시작할 수 있습니다. 이는 inetd와의 호환성을 유지합니다.

  • 부팅 단계와 셸 독립성 시스템 부팅 시 셸에 의존하지 않고 동작할 수 있으며, 매우 안정적인 부팅 환경을 제공합니다.

  • 마운트/파일 시스템 제어 가능 파일 시스템 체크(fsck), 자동 마운트 설정 등을 systemd에서 직접 처리할 수 있습니다.

  • 서비스 상태 감시 및 재시작 서비스가 중단되면 자동으로 재시작하는 등, 서비스 상태를 적극적으로 관리합니다.

  • 사용자 세션 안전 종료 시스템 셧다운 시 사용자 세션을 안전하게 정리할 수 있습니다.

  • 스냅샷 및 롤백 기능 시스템 상태를 스냅샷으로 저장하고 롤백이 가능합니다 (systemctl snapshot).

 

systemd 유닛(Unit)의 종류

systemd는 다양한 단위(Unit)로 시스템 자원과 서비스를 관리 각 유닛은 특정 기능이나 리소스를 담당하며, 유닛 설정 파일은 보통 /etc/systemd/system/ 또는 /lib/systemd/system/에 존재한다

유닛 유형설명
service데몬(서비스)의 시작, 중지, 재시작 등을 관리
target여러 유닛을 그룹화하여 일괄 관리
socket소켓 파일(.socket)을 통해 서비스를 소켓 기반으로 활성화
device리눅스 장치 트리에 있는 디바이스 관리
mount파일 시스템 마운트를 관리
automount자동 마운트를 관리
swap스왑 공간을 관리
timer일정 시간이나 주기로 서비스 실행 (cron 대체 가능)
path특정 파일이나 디렉토리의 존재 여부에 따라 서비스 실행
slice시스템 자원을 계층적으로 관리하기 위한 단위 (CPU, 메모리 등 제한)
scope로그인을 통해 생성된 사용자 프로세스 관리

 

Run Level(전통적인 SysV init 기반) vs Target (systemd에서의 부팅 단계)

기존의 runlevel 개념은 Run level은 전통적인 SysV(init) 시스템에서 시스템이 어떤 상태(모드)로 부팅될지를 지정하는 개념이다 systemd의 target으로 대체되었다

각각의 target은 특정한 부팅 상태를 의미한다

RunlevelTarget 이름설명
0poweroff.target시스템 종료
1rescue.target단일 사용자 모드 (응급 복구)
2~4multi-user.target텍스트 기반 다중 사용자 모드
5graphical.targetGUI를 포함한 다중 사용자 모드
6reboot.target시스템 재부팅

 

유용한 systemd 명령어(서비스 관리자로서)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 유닛 상태 확인
systemctl status [서비스명].service #.service 생략 가능하다

# 서비스 시작/중지/재시작/재로드
sudo systemctl start|stop|restart|reload [서비스명].service

# 부팅 시 자동 시작 설정
sudo systemctl enable [서비스명].service

# 자동 시작 해제
sudo systemctl disable [서비스명].service

# 현재 기본 타겟 확인
systemctl get-default

# 기본 타겟 변경
sudo systemctl set-default graphical.target

 

리눅스 계정

리눅스 계정은 사용자의 신원을 식별하고, 시스템 리소스에 대한 접근 권한을 관리하기 위한 기본 단위

사용자 계정의 종류

계정 유형설명
root최고 권한을 가진 관리자 계정 (UID=0)
일반 사용자 (user)일반 작업을 수행하는 계정
시스템 계정시스템 서비스용 (예: www-data, mysql)

 

사용자 정보 관련 파일

파일 경로설명
/etc/passwd사용자 계정의 기본 정보 저장 (UID, GID, 홈 디렉토리 등)
/etc/shadow암호화된 비밀번호 정보 저장 (읽기 제한됨)
/etc/group그룹 정보 저장
/etc/login.defs계정 생성 시 기본 정책 정의 (패스워드 길이, 만료 등)

 

주요 명령어

사용자 관리

명령어설명
adduser <이름>사용자 추가 (useradd보다 상위 명령)
useradd <이름>사용자 추가 (기본 명령)
passwd <이름>사용자 비밀번호 설정 또는 변경
usermod사용자 정보 수정 (ex. usermod -aG sudo user)
userdel <이름>사용자 삭제
id <이름>UID, GID, 속한 그룹 확인
whoami현재 로그인한 사용자 출력

 

그룹 관리

명령어설명
groupadd <이름>그룹 생성
groupdel <이름>그룹 삭제
groupmod그룹 정보 수정
gpasswd -a <user> <group>사용자를 그룹에 추가
gpasswd -d <user> <group>사용자를 그룹에서 제거

 

비밀번호(암호) 관리

명령어설명
passwd <사용자>비밀번호 설정/변경
passwd -l <사용자>계정 잠금 (lock)
passwd -u <사용자>계정 잠금 해제 (unlock)
chage <사용자>계정의 패스워드 만료, 변경 주기 설정 등
sudo루트 권한으로 명령 실행 (/etc/sudoers 설정 필요)

 

UID와 GID

항목설명
UID (User ID)사용자 식별 번호. 0은 root
GID (Group ID)기본 그룹 식별 번호

일반적으로 UID/GID는 1000 이상부터 일반 사용자에게 할당

This post is licensed under CC BY 4.0 by the author.