목차
리눅스 부팅
systemd
타겟(target)
타깃은 부팅 레벨, 특정 동기화 지점과 같이 유닛을 그룹화할 때 사용한다.
'man systemd.target' 명령어를 입력해보면 타깃에 대한 설명을 볼 수 있다.
주요 타겟 종류
- default.target:
- 부팅 후 진입할 기본 타겟. 보통 multi-user.target 또는 graphical.target으로 설정됨.
- multi-user.target:
- 그래픽 인터페이스 없이 멀티유저 텍스트 모드로 부팅.
- graphical.target:
- GUI 환경을 포함한 그래픽 모드로 부팅.
- rescue.target:
- 최소한의 서비스만 실행된 복구 모드.
기존의 init에서는 런레벨(SysVinit) 방식으로 정수(숫자)로 표현했다. 예를들어..
- 0: 시스템 종료
- 1: 단일 사용자 모드 (복구 모드)
- 3: 텍스트 기반 멀티유저 모드
- 5: GUI 기반 멀티유저 모드
- 6: 재부팅
하지만 타겟(systemd)에서는 이름으로 상태를 정의한다.
- multi-user.target: 텍스트 기반 멀티유저 모드
- graphical.target: GUI 기반 멀티유저 모드
- rescue.target: 복구 모드
- shutdown.target: 시스템 종료
와 같이 말이다.
이렇게 사용하는 이유는 무엇이냐 유연성과 확장성 등과 사용자의 정의를 위해서이다.
'/lib/systemd/system' 경로로 접근 해보면 위 사진과 같은서비스 또는 소켓 또는 타겟들이 모여있는 것을 볼 수 있다.
자 그래서 타겟이 도대체 뭔데? 궁굼할 것이다.
systemd의 타겟은 시스템의 특정 상태를 정의하고, 이를 달성하기 위해 실행해야 할 유닛들의 그룹을 관리하는 역할을 하며, 시스템이 어떤 상태로 부팅되거나, 특정 작업 상태로 전환될 때 이를 효과적으로 조율하고 관리하기 위한 메커니즘을 말한다.
소켓(socket)
소켓 유닛은 systemd에 의해 제어되면서 소켓 기반으로 작동하는 파일 시스템 FIFO, 네트워크 소켓 등이 해당한다.
'man systemd.socket'에서 추가적인 정보 확인이 가능하다.
systemd 명령어들
systemctl은 systemd 기반의 시스템 및 서비스 관리를 제어하는 명령어로 service, chkconfig, init 등등의 기능들을 합쳐놓은 것이다.
주요 옵션 | |
옵션 | 내용 |
-l, --full | 유닛 관련 정보를 출력할 때 긴 이름도 약어로 출력하지 않고 전체 출력. |
-t, --type=<유닛 타입> | 유닛의 유형을 지정하는 옵션으로 주요 유형에는 service, target, socket 등이 있으며 사용 가능한 유형의 확인은 '-t help'와 같이 사용하면 확인이 가능하다. |
--state=<상태> | 특정 상태의 유닛만 출력한다. (active, failed, inactive와 같이) |
-a, --all | 비활성 유닛 포함 모두 출력 |
--no-pager | 출력 시 페이지네이션 없이 바로 표시 |
--failed | 실패한 유닛만 표시 |
--reverse | 유닛 목록을 역순으로 출력 |
--output=<형식> | 출력 형식 지정 (json, table, short 등) |
-q, --quiet | 출력 최소화 (성공 및 실패 여부만 출력) |
--system | 시스템 단위의 systemd의 인스턴스에서 실행. |
--user | 사용자 단위의 systemd 인스턴스에서 실행. |
런레벨(타겟) 관련 주요 명령 | |
타겟 정보 확인 및 설정 | |
systemctl get-default | 현재 기본 타겟(런레벨)을 확인 |
systemctl set-default <타겟> | 기본 타겟(런레벨)을 설정 |
systemctl list-units --tpye=target | 활성화된 유닛 목록을 출력. |
systemctl isolate <타겟> | 시스템을 특정 타겟 상태로 즉시 전환 |
주요 타겟 | |
graphical.target | GUI 환경 포함 (런레벨 5와 유사). |
multi-user.target | 텍스트 기반 멀티유저 모드 (런레벨 3과 유사). |
rescue.target | 최소한의 서비스만 실행된 복구 모드 (런레벨 1과 유사). |
emergency.target | 긴급 복구 모드, root 셸만 실행. |
shutdown.target | 시스템 종료. |
reboot.target | 시스템 재부팅. |
상태 정보 확인 명령 | |
서비스 상태 확인 | |
systemctl status <서비스명> | 특정 서비스의 상태 확인 (활성/비활성, 로그 등). |
systemctl is-active <서비스명> | 서비스가 활성화(active) 상태인지 확인. |
systemctl is-enabled <서비스명> | 서비스가 부팅 시 자동 시작(enabled)인지 확인. |
systemctl is-failed <서비스명> | 서비스가 실패(failed) 상태인지 확인. |
전체 유닛 상태 확인 | |
systemctl list-units | 현재 활성화된 유닛 목록 확인. |
systemctl list-units --failed | 실패한 유닛만 출력. |
systemctl list-units --type=service | 활성화된 서비스 목록 확인. |
systemctl list-dependencies <타겟> | 특정 타겟에 종속된 유닛 목록 확인. |
서비스 제어 명령 | |
systemctl start <서비스명> | 서비스 시작. |
systemctl stop <서비스명> | 서비스 정지. |
systemctl restart <서비스명> | 서비스 재시작. |
systemctl reload <서비스명> | 서비스 설정 변경 적용(재시작 없이). |
systemctl reload-or-restart <서비스명> | 설정 변경이 있으면 reload, 없으면 restart. |
systemctl enable <서비스명> | 서비스 부팅 시 자동 시작 설정. |
systemctl disable <서비스명> | 서비스 부팅 시 자동 시작 해제. |
systemctl mask <서비스명> | 서비스 실행 완전 차단 (수동 실행도 불가). |
systemctl unmask <서비스명> | mask 해제. |
systemctl daemon-reload | 유닛 파일 변경 사항을 systemd에 재적용. |
사용 예시
1. 서비스 상태 확인
systemctl status sshd
2.서비스 시작 및 정지
systemctl start nginx
systemctl stop nginx
3.서비스 재시작 및 설정 적용
systemctl restart apache2
systemctl reload apache2
4.서비스 자동 시작 설정
systemctl enable mysql
systemctl disable mysql
5.런레벨 전환(타겟 전환)
systemctl isolate multi-user.target
6.기본 타겟 설정
systemctl set-default graphical.target
7.모든 활성화된 유닛 목록 확인
systemctl list-units
8.종속성 확인
systemctl list-dependencies graphical.target
systemd 로그(journalctl)
systemd 관련 로그는 systemd-journald가 생성하고 관리한다. 관련 정보는 메타 데이터로 /run/log/journal 파일에 저장되며, 재부팅하면 관련 정보는 사라진다.
journalctl [option] [항목]
주요 옵션 | |
-e | 로그의 끝부분부터 출력. |
-n <숫자> | 최근 <숫자> 줄만 출력 (-n 10은 최근 10줄만 출력). |
-f | 실시간으로 로그를 업데이트하며 출력(tail -f와 유사함). |
--since <시간> | 특정 시간 이후의 로그만 출력.(--since "2024-12-01 11:00:00" 처럼). |
--until <시간> | 특정 시간 이전의 로그만 출력. |
-p <우선순위> | 로그 우선순위 필터링(info, warning, err....). |
--output <형식> | 출력 형식 지정. |
--o verbose | 자세한 로그 형식으로 출력. |
--no-pager | 페이징 없이 출력. |
--disk-usage | 로그 파일이 차지하는 디스크 용량 확인. |
주요 항목 | |
_SYSTEMD_UNIT= | 특정 서비스나 유닛의 로그 확인 (예: _SYSTEMD_UNIT=nginx.service). |
_PID= | 특정 프로세스 ID(PID)의 로그 확인. |
_UID= | 특정 사용자 ID(UID)의 로그 확인. |
_COMM= | 특정 커맨드 이름 기반 로그 확인. |
_HOSTNAME= | 특정 호스트의 로그 확인 (다중 서버 환경). |
_EXE= | 특정 실행 파일에 대한 로그 확인. |
로그 우선순위 | ||
숫자 | 레벨 | 내용 |
0 | emerg | 시스템 사용 불가 상태(긴급). |
1 | alert | 즉각 조치 필요. |
2 | crit | 심각한 오류. |
3 | err | 일반적인 오류. |
4 | warning | 경고 메시지. |
5 | notice | 중요하지 않은 정보 메시지. |
6 | info | 정보성 메시지. |
7 | debug | 디버그 메시지. |
1) 전체 로그 확인
journalctl
2)특정 유닛(service)의 로그
journalctl -u nginx.service
3)특정 시간 범위의 로그
journalctl --since "1 hour ago"
journalctl --since "2024-01-01 10:00:00" --until "2024-02-01 10:00:00"
4)실시간 로그 확인
journalctl -f
Tip. --output 출력 형식 short --> 기본 출력 형식 json --> JSON 형식으로 출력 cat --> 순수 텍스트만 출력 verbose --> 상세한 정보 포함 export --> 바이너리 형식을 추출하기 아!! 추가적으로 명령어 뒤에 붙는 ctl은 control의 약자이다. |
시스템 설정 주요 명령어
timedatectl
시스템의 시간, 날짜 및 시간대를 관리하고 NTP(Network Time Protocol) 설정을 제어하는 명령어이다. 이를 통해 시스템 시간을 설정하거나 동기화 상태를 확인할 수 있다.
timedatectl [옵션] [명령] | |
명령 | 내용 |
status | 시스템의 시간 및 RTC(Real Time Clock)의 시간 저오를 출력한다. |
set-time | 시스템의 시간을 설정하는 명령으로 "2024-12-01 10:00:12"와 같은 형식으로 설정한다. |
set-timezone | 타임존을 설정하는 명령으로 우리나라의 경우 'Asia/Seoul'로 지정된다. |
set-ntp <value> | NTP 사용 여부를 지정하는 명령어로 1로 설정하면 사용, 0으로 설정하면 미사용으로 설정된다. |
1) 현재 시간과 날짜 확인
timedatectl
2) 시간대 확인
timedatectl list-timezones
3) 시간대 설정
timedatectl set-timezone <시간대>
4) 시스템 시간 설정
timedatectl set-time <시간>
5) NTP 동기화 활성/비활성
timedatectl set-ntp true
timedatectl set-ntp false
여기까지는 소프트웨어상의 시간이며 밑에는 하드웨어 시간 설정이다.
6) RTC(하드웨어 클럭)설정
RTC를 로컬 시간대 기준으로 설정:
timedatectl set-local-rtc 1
RTC를 UTC 기준으로 설정(기본):
timedatectl set-local-rtc 0
주요 출력 필드 설명
- Local time: 시스템의 현재 지역 시간.
- Universal time (UTC): 세계 표준 시간.
- RTC time: 하드웨어 클럭(Real-Time Clock) 시간.
- Time zone: 현재 설정된 시간대.
- System clock synchronized: 시스템 클럭이 NTP로 동기화되어 있는지 여부.
- NTP service: NTP 서비스 상태 (활성화 여부).'
- RTC in local TZ : RTC가 로컬 시간대인지 여부.
hostnamectl
리눅스 시스템의 호스트명(hostname) 정보를 확인하고 설정하는 데 사용된다. 이 명령어는 systemd와 함께 제공되며, 단순히 호스트명뿐만 아니라 호스트 관련 메타데이터(OS 이름, 커널 버전 등)도 출력한다.
hostnamectl [명령] [옵션] | |
주요 명령 | |
status | 현재 호스트명 정보와 시스템 관련 메타데이터 출력 (기본 명령). |
set-hostname | 호스트명을 설정. |
set-chassis | 시스템 섀시 유형 설정 (예: desktop, laptop 등). |
set-icon-name | 시스템 아이콘 이름 설정. |
help | 사용 가능한 명령어와 옵션 표시. |
주요 옵션 | |
--pretty | 사람이 읽기 쉬운 호스트명을 설정. |
--static | 고정 호스트명을 설정. |
--transient | 임시 호스트명을 설정(재부팅 시 초기화). |
--help | 사용 가능한 옵션과 명령 출력. |
1) 현재 호스트명 정보 확인
hostnamectl, hostnamectl status
2) 고정 호스트명(static hostname)설정
hostnamectl set-hostname myserver
3)읽기 쉬운 호스트명(pretty hostname)으로 설정
hostnamectl set-hostname "My Personal Server" --pretty
4) 임시 호스트명(transient hostname)설정
hostnamectl set-hostname temp-server --transient
5)섀시 유형(chassis type)설정
hostnamectl set-chassis laptop
hostnamectl 명령어는 **[명령]**과 **[옵션]**의 조합으로 이루어진다.
명령(set-hostname, status)을 사용해 작업의 범위를 정하고, 옵션(--pretty, --transient)으로 세부 동작을 지정할 수 있다.
이 형식은 사용이 간결하면서도 유연성을 제공하여 다양한 상황에서 호스트명을 효율적으로 관리할 수 있다.
localectl
리눅스 시스템에서 로케일(locale)과 키보드 설정을 관리하는 명령어다. 로케일은 시스템의 언어, 시간, 숫자 형식 등을 정의하며, 키보드 설정은 키보드 레이아웃이나 변환 방식을 제어한다. localectl 명령을 사용하면 이 설정을 확인하거나 변경할 수 있다.
localectl [명령] [옵션] | |
명령 | 내용 |
status | 현재 로케일 및 키보드 설정 확인. |
set-locale | 시스템의 기본 로케일 설정. |
list-locales | 시스템에서 지원하는 모든 로케일 목록 출력. |
set-keymap | 키보드 레이아웃 설정. |
list-keymaps | 시스템에서 지원하는 모든 키보드 레이아웃 출력. |
옵션 | 내용 |
--no-convert | 키보드 레이아웃 설정 시 기존 레이아웃과 호환성 변환을 비활성화 |
--no-pager | 출력 시 페이징 없이 모든 내용을 바로 표시. |
--help | 명령어 및 사용 가능한 옵션에 대한 도움말 출력. |
--version | localectl의 버전 출력. |
1) 현재 로케일 상태 확인
localectl status
System Locale: LANG=en_US.UTF-8
VC Keymap: us
X11 Layout: us
System Locale: 시스템의 언어와 문자 인코딩 설정
VC Keymap: 가상 콘솔(터미널)에서 사용하는 키보드 레이아웃
X11 Layout: X11 GUI 환경에서 사용하는 키보드 레이아웃
2) 로케일 설정 변경
localectl set-locale LANG=<로케일>
localectl set-locale LANG=ko_KR.UTF-8
여러 로케일 동시에 설정:
localectl set-locale LANG=fr_FR.UTF-8 LC_TIME=en_GB.UTF-8
(기본 언어는 프랑스어, 시간 형식은 영국 형식으로)
3) 사용 가능한 로케일 목록 출력
localectl list-locales
C.UTF-8
aa_DJ.UTF-8
aa_ER.UTF-8
aa_ER.UTF-8@saaho
aa_ET.UTF-8
af_ZA.UTF-8
agr_PE.UTF-8
ak_GH.UTF-8
am_ET.UTF-8
an_ES.UTF-8
anp_IN.UTF-8
ar_AE.UTF-8
ar_BH.UTF-8
ar_DZ.UTF-8
ar_EG.UTF-8
4) 키보드 레이아웃 설정 변경
localectl set-keymap <키보드_레이아웃>
localectl set-keymap us
localectl set-x11-keymap <레이아웃> [모델] [옵션]
localectl set-x11-keymap us pc105 intl
5) 사용 가능한 키보드 레이아웃 목록 확인
localectl list-keymaps
ANSI-dvorak
adnw
al
al-plisi
amiga-de
amiga-us
apple-a1048-sv
apple-a1243-sv
apple-a1243-sv-fn-reverse
apple-internal-0x0253-sv
apple-internal-0x0253-sv-fn-reverse
applkey
at
at-mac
시스템 종료(Shutdown)
셧다운이란 시스템의 전원을 끄거나 종료하는 행위를 말한다. 일반적으로 가정에서 사용하는 윈도우 운영체제나 리눅스의 경우 빈번하게 전원을 끄고 키지만 서버로 사용하는 경우 이 빈도는 매우 드물다. 리눅스 서버의 경우 커널 패치나 업데이트, 시스템 점검, 비밀번호 분실 등의 경우에 재부팅을 하거나 종료를 한다.
X-window 환경에서는 환경에서 '끄기' 메뉴를 이용해서 재부팅 또는 종료하는 방법이 있고, 터미널(Terminal) 환경에서, shutdown, halt, reboot, poweroff, systemctl 등의 명령어를 사용한다.
shutdown
초기 유닉스 시절부터 이어져온 시스템을 재시작 또는 셧다운하는 명령어로 root 권한을 가진 사용자만 가능하다.
이 명령어의 경우 입력한 옵션 값에 따라 타깃(구 실행레벨)을 인식하고 systemd(구 init) 프로세스를 호출하여 관련 작업을 요청한다.
shutdown [옵션] 시간 [경고메시지] | |
옵션 | 내용 |
-r | 시스템을 재부팅할 때 사용.(--reboot) |
-H | 시스템 동장을 멈춘다.(--halt) |
-h | 시스템 동장을 멈추고 전원까지 종료. 실제로 시스템을 종료할 때 사용. (--power) |
-c | 예약된 셧다운 명령을 취소한다. |
shutdown -r now
-> 시스템을 즉시 재부팅.
shutdown -h now
-> 시스템을 즉시 종료.
shutdown -h +10
-> 시스템을 10분 뒤에 종료. 참고로 종료되기 10분동안 다른 작업을 수행하기 위해
'shutdown -h +10 &'처럼 &기호를 붙여 백그라운드 프로세스로 실행하기도 했는데
최근에는 'shutdown -h 10'이라고만 입력해도 동일한 기능을 사용할 수 있다.
shutdown -c
-> 예약된 셧다운 명령어를 취소.
shutdown -h 11:11
shutdown -h 22:22
-> 오전 11시 11분에 시스템을 종료하도록 예약,
오후 10시 22분에 시스템을 종료하도록 예약.
reboot
시스템을 재시작하는 명령어로 기본적으로 root만 사용 가능. 배포판에 따라 로컬 사용자도 이용 가능.
reboot
-> 시스템을 즉시 재부팅.
halt
시스템을 종료하는 명령어로 기본적으로 root만 사용 가능. 배포판에 따라 로컬 사용자도 이용 가능.
halt [옵션] | |
옵션 | 내용 |
-p | 시스템을 종료하고 전원까지 완전히 차단할 때 사용하는 옵션 |
poweroff
시스템 종료 및 전원을 끄는 명령.
init, telinit
모든 프로세스의 부모격인 init 프로세스(현재는 systemd)에 직접 요청하여 실행레벨(현재 잡혀있는 타깃)을 변경할 때 사용하는 명령어.
빠르게 실행되지만, 실행중인 프로세스를 무조건적으로 종료하기에 조심히 사용하자.
init 0
-> 시스템을 즉시 종료.
init 1
-> 시스템을 즉시 단일 사용자 모드로 전환. (네트워크 서비스 비활성화됨.)
주로 시스템 복구 작업에서 사용.
init 2
-> 시스템을 다중 사용자 모드로 전환.(네트워크 서비스 비활성화.)
주로 네트워크가 없는 환경에서 사용.
init 3
-> 시스템을 다중 사용자 모드로 전환.(네트워크 서비흐 활성화.)
일반적으로 CLI 기반 서버에서 사용.
init 4
-> 사용자 정의 모드로 전환.
init 5
-> 그래픽 모드로 전환.(GUI)
데스크탑 환경에서 많이 사용.
init 6
-> 시스템을 즉시 재부팅
'리눅스' 카테고리의 다른 글
#6-2 리눅스 파일 시스템 (0) | 2025.01.09 |
---|---|
#6-1 리눅스 파일 시스템 (0) | 2025.01.09 |
#5-1 리눅스 부팅과 셧다운 (1) | 2024.12.15 |
#4 리눅스 디렉터리 (0) | 2024.12.15 |
#3 리눅스의 구조 (0) | 2024.12.15 |