전원 → BIOS 단계 → Boot Loader → Kernel Init → Systemd → Login Prompt

전원을 켜면 BIOS(Basic Input/Output System) 가 동작
기본적인 하드웨어(키보드, 디스크 등)의 상태를 확인하고 부팅 장치를 선택해서 부팅 디스크의 첫 섹터에서 512B를 로딩
첫 섹터의 512B를 MBR(Master Boot Record) 라고 하며 디스크의 어느 파티션에 2차 부팅 프로그램(Boot Loader)이 있는지에 대한 정보가 저장되어 있다
MBR은 부트 로더를 찾아 메모리에 로딩하는 작업까지 수행
부트 로더는 일반적으로 운영체제 중에서 부팅할 운영체제를 선택할 수 있도록 메뉴를 제공
우분투에서는 부트 로더로 GRUB 사용하는데 기본적으로 멀티 부팅이 아닐 경우 GRUB 메뉴를 출력하지 않고 바로 부팅 작업을 진행
부팅할 GRUB 메뉴를 출력하려면 /etc/default/grub 파일을 수정
GRUB_TIMEOUT_STYLE=hidden 부분을 삭제 ( # 으로 주석처리)GRUB_TIMEOUT=0 부분의 숫자를 다른 숫자로 변환(메뉴가 화면에 나왔을 때 얼마동안 동작이 없으면 기본으로 넘어갈 것인지의 설정)sudo update-grub 명령 수행sudo vi /etc/default/grub 파일 수정

sudo update-grub 명령 수행
reboot : 재부팅
/boot 디렉토리 아래에 vmlinuz-버전명의 형태로 존재ls /boot/vm* : 버전명 찾기
시스템에 연결된 메모리, 디스크, 키보드, 마우스 등의 장치를 검사
사용가능한 하드웨어의 정보를 미리 확인했다가 부팅할 때 이러한 장치들이 사용가능한 상태로 유지되고 있는지 확인
기존적인 초기화 과정이 끝나면 일반적으로 프로세스를 만드는 방식인 fork 를 사용하지 않고 프로세스와 스레드를 생성
이 프로세스와 스레드는 메모리 관리 같은 커널의 여러가지 동작을 수행
커널 프로세스의 개수는 버전에 따라 달라짐
이런 프로세스들은 다른 프로세스와 구분하기 위해서 [] 로 표시되고 PID가 낮게 배정
ps -ef 명령으로 확인
ps -A

ps -ef

대괄호가 있는 프로세스는 건들이면 안됨
리눅스가 본격적으로 동작하기 시작한 단계
우분투에서는 기존의 init 스크립트를 대체
각 서비스가 시작되는 과정을 메시지로 출력
우분투에서 GUI를 설치하게 되면 메시지가 전부 출력되지는 않고 Splash 이미지가 출력됨
/etc/default/grub 파일의 GRUB_CMDLINE_ LINUX_DEFAULT=“quiet splash”에서 quiet 를 삭제
sudo update-grub 를 실행하여 변경내용 적용
메시지는 부팅 후 dmesg 명령이나 more /var/log/boot.log 명령으로 확인할 수 있음
dmesg 명령으로 출력되는 메시지에는 데몬의 시작과 관련된 것뿐만 아니라 하드웨어 검사와 관련된 것도 모두 포함되어 있음
sudo dmesg | more 나 less 또는 cat

systemd 서비스는 데몬을 모두 실행한 뒤 로그인 시스템을 출력
GUI를 설치한 경우는 GDM(Gnome Display Manager)를 출력
init 프로세스는 없어졌지만 전통적으로 사용해온 init 프로세스의 run level 개념은 이해할 필요가 있다
run level : unix의 상태를 7가지로 구분하고 각 경우에 따라 스크립트 파일을 실행
| 런레벨 | 이름 | 의미 |
|---|---|---|
| 0 | runlevel0.target - poweroff.target | 시스템 종료 |
| 1 | runlevel1.target - rescue.target | 응급복구모드(단일 사용자 모드) |
| 2 | runlevel2.target - multi-user.target | 다중사용자 모드 |
| 3 | runlevel3.target - multi-user.target | 다중사용자 모드 |
| 4 | runlevel4.target - multi-user.target | 다중사용자 모드 |
| 5 | runlevel5.target - graphical.target | 그래피컬 다중 사용자 모드 |
| 6 | runlevel6.target - reboot.target | 재시작 |
: 시스템에 문제가 발생한 경우 이 모드로 런레벨을 변경해서 다른 유저가 사용을 못하도록 하고 관리자가 수정을 할 수 있도록 한다.
이때 다른 모든 유저는 로그아웃을 해야 한다.
소켓 기반으로 동작하여 inetd와 호환성을 유지
셸과 독립적으로 부팅이 가능
마운트 제어가 가능
fsck 제어가 가능
시스템 상태에 대한 스냅샷(현재상태)을 유지
서비스에 시그널을 전달할 수 있음
셧다운 전에 사용자 세션의 안전한 종료가 가능
systemctl
systemd 기반으로 서비스를 시작하거나 종료할 때 사용하는 명령어
systemctl 명령에서는 유닛을 지정할 때 유닛의 종류는 생략가능하다
sshd.service 를 사용할 때는 sshd 라고만 해도 된다
형식 : systemctl [옵션] [명령] [유닛명]
옵션 :
-a : 상태와 상관없이 유닛 전체를 출력-t 유닛 종류 : 지정한 종류의 유닛만 출력명령 :
start : 유닛을 시작stop : 유닛을 정지reload : 유닛의 설정 파일을 다시 읽어옴restart : 유닛을 재시작status : 유닛 상태를 출력enable : 부팅 시 유닛이 시작되도록 설정disable : 부팅 시 유닛이 시작하지 않도록 설정is-active : 유닛이 동작하고 있는지 확인is-enabled : 유닛이 시작되었는지 확인isolate : 지정한 유닛 및 이와 관련된 유닛만 시작하고 나머지는 정지kill :유닛에 시그널을 전송1. 동작중인 유닛을 출력
systemctl

2. 특정 유닛 출력
systemctl -t service

3. cron 서비스 시작하기
sudo systemctl start cron
4. 유닛 상태 확인
systemctl status cron

Active : active 상태
5. 서비스 중지
systemctl stop cron
다시 유닛 상태를 확인해보면

Active : inactive 상태
6. 현재 타겟과 런레벨 확인
systemctl get-default

7. 런레벨 변경
systemctl isolate 런레벨
이름으로 작성 또는 runlevel 숫자 로 작성sudo systemctl isolate rescuesudo systemctl runlever 19. 기본타겟 설정
systemctl set-default <name of target>.target
10. 현재 target 변경
systemctl isolate multi-user
🔸 telinit과 init을 이용한 런레벨 변경
init --help : 런레벨 확인

init 런레벨 : 런레벨 수정
telinit은 systemctl 의 심볼릭링크 : ls -l /sbin/telinit

telinit --help

colord.service가 동작 중인지 is-active 명령으로 확인
systemctl is-active colord

colord.service 를 정지
systemctl stop colord
colord.service의 상태를 확인
systemctl status colord
colord.service를 다시 시작
systemctl start colord
colord.service의 상태에서 PID를 확인
ps -ef
shutdownhaltpoweroffrunlevel0 으로 전환runlevel6 으로 전환rebootshutdown리눅스 시스템을 가장 정상적으로 종료하는 방법은 shutdown 명령을 사용하는 것
시스템을 종료하는 다른 명령들과 달리 shutdown 명령은 다양한 종료 방법을 제공
시스템 종료 외에 런레벨을 바꿀 때도 사용할 수 있음
기본형식 : shutdown [옵션] [시간] [메시지]
옵션 :
-k : 실제로 종료를 수행하는 것이 아니고 메시지만 전달-r : 종료한 후 재시작-h : 종료하고 halt 상태로 이동-f : 빠른 재시작으로 fsck(파일 시스템 검사)를 생략 할 수 있음-c : 이전에 내렸던 shutdown 명령을 취소시간 : 종료할 시간(hh:mm, +m, now)
메시지 : 모든 사용자에게 보낼 메시지
즉시종료
shutdown -h now
3분 후에 셧다운 한다는 메시지를 보내고 종료 후 재시작
shutdown -r +3 "System is going down"
종료 취소
shutdown -c
halt, poweroff, reboot/sbin 디렉토리에 존재
리눅스의 백그라운드에서 동작하며 특정한 서비스를 제공하는 프로세스
웹 서버나 데이터베이스 서버,원격접속 서버 등 각종 서비스를 제공하는 프로세스가 데몬
데몬 혼자서 스스로 동작하는 독자형(standalone)
데몬을 관리하는 슈퍼 데몬에 의해 동작하는 방식
pstree 명령을 이용하면 조상 데몬이라는 것이 확인됨
[]에 있는 프로세스들이 여기에 해당| 데몬 | 기능 | 데몬 | 기능 |
|---|---|---|---|
| atd | 특정시간에 예약한 명령을 실행 (at 명령) | popd | 기본 편지함 서비스 |
| cron | 주기적으로 실행하도록 예약한 명령 실행 | routed | 자동 ip 라우터 테이블 서비스 제공 |
| dhcpd | 동적으로 IP 주소를 배정 | smb | 삼바 서비스 제공 |
| httpd | 웹 서비스 제공 | syslogd | 로그기록 서비스 제공 |
| nfs | 네트워크 파일 시스템 서비스 제공 | sshd | 원격 보안 접속 서비스 |
| named | DNS서비스 제공 | in.telnetd | 원격 접속 서비스 |
| smtpd | 메일 전송 데몬 | ftpd | 파일 송수신 서비스 |
| sendmail | 이메일 서비스 제공 | ntpd | 시간 동기화 서비스 |
LILO 와 GRUB를 지원하는데 ubuntu 에서는 GRUB를 기본으로 지원/boot/grub/grub.cfg 파일
/etc/default/grub 파일과 /etc/grub.d 디렉터리 아래에 있는 스크립트를 읽어서 생성/etc/default/grub 파일과 /etc/grub.d 디렉터리 아래에 있는 스크립트를 수정해야 함/etc/grub.d 디렉터리
grub.cfg 파일을 생성/etc/default/grub 파일
grub.cfg에 기록menu.lst 파일과 비슷한 역할을 수행E를 눌러서 편집 모드로 전환한 후 커서를 아래로 내려서 수정 ro splash $vt_handoff 를 rw init=/bin/bash 로 수정F10 을 눌러서 재부팅mount -o remount.rw /