오토에버 클라우드 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은 특정한 부팅 상태를 의미한다
| Runlevel | Target 이름 | 설명 |
|---|---|---|
| 0 | poweroff.target | 시스템 종료 |
| 1 | rescue.target | 단일 사용자 모드 (응급 복구) |
| 2~4 | multi-user.target | 텍스트 기반 다중 사용자 모드 |
| 5 | graphical.target | GUI를 포함한 다중 사용자 모드 |
| 6 | reboot.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 이상부터 일반 사용자에게 할당