본문 바로가기

CentOS/Study

Linux 환경구성과 기본 정보 확인

반응형

1. 실습 환경 구성 및 기본 설정

🖥️ 환경 전환 및 언어 설정

  • TUI / GUI 환경 전환 (systemd Target 적용)
    • 과거의 런레벨(Runlevel) 대신 현재는 target 단위로 부팅 상태를 관리합니다.
    • TUI(콘솔) 모드로 즉시 전환: systemctl isolate multi-user.target
    • GUI(그래픽) 모드로 즉시 전환: systemctl isolate graphical.target
    • 기본 부팅 모드 영구 변경: systemctl set-default [target_name] (예: systemctl set-default multi-user.target)
  • GUI 환경 편의 설정
    • 해상도 조절: 시스템 설정(Settings) ➡️ 디스플레이(Displays) 메뉴에서 모니터에 맞는 해상도로 조절합니다.
    • 터미널 글자 크기 조정: 터미널 창에서 Ctrl + Shift + + (확대), Ctrl + - (축소) 단축키를 활용합니다.
  • 시스템 언어 변경 (최신 표준)
    • 과거의 export LANG 대신 localectl 명령어를 사용하여 영구적으로 안전하게 변경합니다.
    • 현재 시스템 언어 확인: localectl status
    • 시스템 언어를 영문으로 변경: localectl set-locale LANG=en_US.UTF-8
    • 시스템 언어를 한글로 변경: localectl set-locale LANG=ko_KR.UTF-8

2. 터미널 제어 문자 (Shortcut)

터미널 환경에서 입력 및 프로세스를 효율적으로 제어하기 위한 필수 단축키입니다.

  • Ctrl + C : 현재 실행 중인 명령어나 프로세스를 강제 종료합니다.
  • Ctrl + D : 입력의 끝(EOF)을 나타내며, 현재 셸(Shell) 세션을 종료(로그아웃)합니다.
  • Ctrl + U : 현재 커서가 위치한 명령 줄의 모든 문자를 지웁니다.
  • Ctrl + W : 명령 줄에서 커서 바로 앞의 마지막 단어 하나를 지웁니다.
  • Ctrl + S : 화면으로의 출력을 일시 중지합니다. (화면이 멈춘 것처럼 보임)
  • Ctrl + Q : Ctrl + S로 중지된 화면 출력을 다시 시작합니다.

3. 운영체제 종료와 재부팅 (최신 표준)

💡 과거에는 init 0, halt 등을 사용했으나, 최신 리눅스에서는 systemctl 명령어로 전원 관리를 통합하는 것이 권장되는 표준입니다. (관리자 권한 필요)

🛑 시스템 종료 명령어

Bash
 
# systemctl poweroff    # [권장 표준] 시스템을 가장 안전하게 완전히 종료하고 전원 차단
# shutdown -h now       # 즉시 시스템 종료 (내부적으로 systemctl을 호출함)

🔄 시스템 재부팅 명령어

Bash
 
# systemctl reboot      # [권장 표준] 시스템을 즉시 안전하게 재부팅
# shutdown -r now       # 즉시 재부팅 (내부적으로 systemctl을 호출함)

4. 관리자(root) 암호 관리

🔐 관리자 암호 변경

현재 로그인한 관리자나 사용자의 비밀번호를 변경할 때 사용합니다.

Bash
 
# passwd

🛠️ 관리자 암호 복구 방법 (RHEL/Rocky/Alma 계열 최신 기준)

비밀번호를 분실했거나 외부 침입 의심 시 사용합니다.

  1. 시스템을 재부팅합니다.
  2. Grub 부트 로더(Boot Loader) 화면이 나오면 e 키를 눌러 편집 모드로 진입합니다.
  3. 커널 지시어 줄(보통 linux로 시작하는 행) 끝에 rd.break를 추가하고 Ctrl + X를 눌러 부팅합니다.
  4. Single User Mode(긴급 모드)로 부팅되면 아래 명령어를 순서대로 입력하여 암호를 복구합니다.
Bash
 
# mount -o remount,rw /sysroot     # sysroot 디렉터리를 읽기/쓰기 모드로 재마운트
# chroot /sysroot                  # 루트 디렉터리를 sysroot로 전환
# passwd root                      # 새 관리자 암호 입력 및 확인
# touch /.autorelabel              # SELinux 보안 콘텍스트 재설정 (최신 보안 환경 필수)
# exit                             # chroot 환경 빠져나가기
# reboot                           # 시스템 재부팅

5. 리눅스 명령어 형식 및 도움말 확인

📝 리눅스 명령어 기본 형식

명령어(Command) [-옵션(Options)] [인자/대상(Arguments)]

  • 예시: ls -al /var/log (명령어: ls, 옵션: -al, 대상: /var/log)

❓ 도움말 및 명령어 정보 확인

Bash
 
# tldr ls             # [최신 트렌드] 복잡한 매뉴얼 대신 가장 자주 쓰는 핵심 예시만 직관적으로 요약 출력
# man ls              # ls 명령어의 상세 공식 매뉴얼 페이지(Manual)를 확인
# whatis passwd       # passwd 명령어에 대한 한 줄 짜리 간략한 설명 출력
# type -a ls          # [최신 권장] which를 대체하여 ls가 앨리어스인지 내부 명령어인지 외부 파일인지 모두 추적
# which ls            # ls 명령어가 실행되는 외부 바이너리 파일의 절대 경로 검색

6. 시스템 기본 정보 확인 명령어 (최신 표준)

과거 파편화되어 있던 명령어들이 최신 리눅스에서는 보다 직관적이고 통합된 명령어로 업그레이드되었습니다.

ℹ️ 시스템 및 OS 정보 통합 확인

Bash
 
# cat /etc/os-release # [권장 표준] 배포판 종류에 상관없이 우분투, RHEL, Rocky 등 모든 OS 정보 정확히 확인
# hostnamectl         # 커널 버전, 아키텍처, OS 버전, 호스트네임 등을 한눈에 깔끔하게 요약 출력
# uname -a            # 커널 관련 상세 정보 출력

📅 시간, 날짜 및 달력 정보

Bash
 
# timedatectl         # [최신 표준] 현재 시간, 타임존(Timezone), NTP(시간 동기화) 상태를 한 번에 확인 및 관리
# date                # 단순 시스템 날짜와 시간 출력
# date +%m%d          # 현재 날짜를 '월일(MMDD)' 형태로 포맷팅하여 출력
# cal                 # 이번 달 달력 출력
# cal 2026            # 2026년 전체 달력 출력

 

🖥️ 화면 해상도 조절 (GUI 환경)

해상도를 조절하는 방법은 운영체제 버전에 따라 다음과 같이 나뉩니다.

  • VER 8 (버전 8 이상)
    1. 바탕화면 좌측 상단의 현재 활동을 열어 전체 프로그램을 표시합니다.
    2. 설정을 선택합니다.
    3. 장치 ➡️ 디스플레이 ➡️ 해상도로 이동하여 모니터에 맞게 조절합니다.
  • VER 7 (버전 7 이하)
    1. 상단 메뉴에서 프로그램을 열어 시스템 도구를 선택합니다.
    2. 설정을 선택합니다.
    3. 장치 ➡️ 디스플레이 ➡️ 해상도로 이동하여 조절합니다.

🔠 터미널 글자 크기 조정

터미널(Terminal)을 실행한 상태에서 마우스 없이 단축키로 간편하게 글자 크기를 조절할 수 있습니다.

  • 글자 크기 확대: Ctrl + Shift + +
  • 글자 크기 축소: Ctrl + -

1. 런레벨(Runlevel)과 systemd 타겟(Target) 매핑

과거 런레벨 (Runlevel) 기능 설명 최신 타겟 (systemd Target)

0 (halt) 시스템 완전 종료 poweroff.target
1 (single user) 싱글 유저 모드 (시스템 복구 및 관리자 암호 변경) rescue.target
2 (multiuser) 멀티 유저 (NFS 미지원) multi-user.target (3과 통합)
3 (full multiuser) 멀티 유저 완벽 지원 (TUI / CLI 환경) multi-user.target
4 (unused) 미사용 (예약됨) multi-user.target (3과 통합)
5 (graphical) 그래픽 모드를 지원하는 멀티 유저 (GUI 환경) graphical.target
6 (reboot) 시스템 재부팅 reboot.target

💡 핵심 요약: 최신 리눅스에서는 사실상 multi-user.target(기존 런레벨 3)과 graphical.target(기존 런레벨 5) 두 가지만을 주로 오가며 사용합니다.

2. 시스템 환경 관리 명령어 최신 예제

과거의 who -r, runlevel, init 명령어는 하위 호환성을 위해 껍데기만 남아있을 뿐, 실제로는 내부적으로 systemctl을 호출합니다. 따라서 처음부터 systemctl 명령어를 사용하는 습관을 들이는 것이 좋습니다.

🔍 현재 설정된 기본 부팅 환경 확인

시스템을 켰을 때 기본적으로 진입하는 모드(Target)를 확인합니다.

Bash

# systemctl get-default
graphical.target     # (과거의 runlevel 5에 해당함을 의미)

🔄 운영 환경 즉시 전환 (현재 세션 임시 변경)

재부팅 없이 현재 동작 중인 시스템의 모드를 즉시 바꿉니다. (과거 init 3 또는 init 5 명령어의 최신 버전입니다.)

Bash

# GUI 환경에서 TUI(CLI) 환경으로 즉시 전환 (init 3 대체)
# systemctl isolate multi-user.target

# TUI(CLI) 환경에서 GUI 환경으로 즉시 전환 (init 5 대체)
# systemctl isolate graphical.target

💾 기본 부팅 환경 영구 변경

시스템 재부팅 시 기본적으로 시작할 타겟을 지정합니다. (심볼릭 링크를 생성하여 영구 적용됩니다.)

Bash

# 기본 부팅 환경을 TUI(CLI) 모드로 영구 설정
# systemctl set-default multi-user.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target.

# 기본 부팅 환경을 GUI 모드로 영구 설정
# systemctl set-default graphical.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/graphical.target.

1. 현재 설정된 언어 확인

  • 간단히 주 언어만 확인하기 (echo) 현재 셸(Shell)에서 메인으로 사용 중인 언어 변수값을 출력합니다.Bash
  • # echo $LANG ko_KR.UTF-8
  • 상세 지역화 설정 전체 확인하기 (locale) 언어뿐만 아니라 시간(LC_TIME), 화폐 단위(LC_MONETARY), 정렬 기준 등 세부적인 환경 변수 전체를 확인합니다.Bash
  • # locale LANG=ko_KR.UTF-8 LC_CTYPE="ko_KR.UTF-8" LC_NUMERIC="ko_KR.UTF-8" ...(생략)... LC_ALL=

2. 시스템 지원 언어 목록 확인

현재 시스템에 패키지로 설치되어 바로 적용할 수 있는 언어 목록을 출력합니다.

Bash

# locale -a
C
POSIX
en_US.utf8
ko_KR.utf8
...(수많은 지원 언어 목록 출력, 생략)...

💡 Tip: 목록에 있는 C 또는 POSIX는 리눅스의 가장 기초적인 영문 환경(시스템 기본값)입니다. 한글 환경에서 프로그램 오류 메시지가 깨져서 보일 때, 디버깅을 위해 에러 메시지를 영어로 출력하고자 할 때 자주 사용됩니다.

3. 언어 변경 방법 (임시 변경 vs 영구 변경)

⏳ 1) 임시 변경 (현재 세션에만 적용)

export 명령어를 사용하면 현재 열려있는 터미널(셸) 창에서만 언어가 변경됩니다. 로그아웃하거나 터미널을 닫으면 원래 설정으로 돌아갑니다.

특정 프로그램 실행 시 일시적으로 영문 환경이 필요할 때 유용합니다.

Bash

# 시스템 언어를 기본 영문 환경(C)으로 임시 변경
# export LANG=C

# 변경 적용 확인
# echo $LANG
C

💾 2) 영구 변경 (시스템 전체에 적용)

localectl 명령어를 사용하면 설정 파일이 수정되어 재부팅 후에도 변경된 언어가 계속 유지됩니다. (관리자 권한 필요)

Bash

# 시스템 전체 언어를 한글(UTF-8)로 영구 변경
# localectl set-locale LANG=ko_KR.UTF-8

# 시스템 전체 언어를 영문(UTF-8)으로 영구 변경
# localectl set-locale LANG=en_US.UTF-8

⚠️ 주의사항 (인코딩 트렌드) 과거 구형 시스템에서는 ko_KR.euckr 인코딩을 사용하기도 했으나, 최신 리눅스 및 글로벌 IT 환경에서는 무조건 UTF-8을 사용하는 것이 표준입니다. 특별한 레거시(Legacy) 환경이 아니라면 항상 UTF-8을 사용하세요.

 

CLI(Command Line Interface) 환경에서 명령어 입력을 돕고 프로세스를 효율적으로 제어하기 위해 사용하는 필수 단축키 모음입니다. 마우스 없이 키보드만으로 터미널을 능숙하게 다루기 위해 반드시 숙지해야 합니다.

🛑 1. 현재 프로세스 강제 종료: <Ctrl> + C

현재 포그라운드(Foreground)에서 실행 중인 프로세스에 인터럽트(Interrupt, SIGINT) 신호를 보내 강제로 실행을 멈추게 합니다. 운영체제는 다른 작업 상태와 무관하게 이 신호를 최우선으로 처리하여 커맨드라인 입력 상태로 복귀시킵니다.

[예제: 무한 대기 프로세스 종료]

Bash
 
# sleep 500
(명령어가 실행되며 500초 동안 프롬프트가 떨어지지 않고 대기함)
# <Ctrl> + C
(실행이 강제 취소되고 다시 명령어 입력 프롬프트 '#'이 나타남)

🚪 2. 파일의 끝(EOF) 또는 셸 종료: <Ctrl> + D

입력 스트림의 끝을 의미하는 EOF(End Of File)를 전달하거나, 현재 실행 중인 명령어 해석기(Shell)를 종료(exit)하는 두 가지 역할을 합니다.

[예제 A: EOF 의미로 사용 (파일 입력 종료)]

Bash
 
# cat > hello.txt         # hello.txt 파일을 생성하고 입력 대기 상태 진입
Hello, Modern Linux!      # 파일에 들어갈 내용 입력
<Ctrl> + D                # "입력이 끝났다"는 EOF 신호 전달
# cat hello.txt           # 파일 내용 확인
Hello, Modern Linux!

[예제 B: 셸 종료(Logout) 의미로 사용] 부모 셸에서 새로운 자식 셸(bash)을 실행하면, 부모는 대기 상태(wait)에 들어갑니다. 여기서 <Ctrl> + D를 누르면 자식 셸이 종료되고 다시 부모 셸로 돌아옵니다.

Bash
 
# ps
  PID TTY          TIME CMD
 3290 pts/0    00:00:00 bash    (부모 셸)

# bash                          (새로운 자식 셸 실행)

# ps
  PID TTY          TIME CMD
 3290 pts/0    00:00:00 bash    (대기 중인 부모 셸)
 3608 pts/0    00:00:00 bash    (현재 동작 중인 자식 셸)

# <Ctrl> + D                    (자식 셸 종료, exit 명령어와 동일)
exit

# ps
  PID TTY          TIME CMD
 3290 pts/0    00:00:00 bash    (다시 부모 셸 하나만 남음)

💡 최상위 셸에서 <Ctrl> + D를 누르면?

  • GUI 환경의 터미널: 터미널 창 자체가 닫힙니다.
  • TUI(콘솔) 환경: 현재 사용자 계정에서 로그아웃(Logout)되어 로그인 대기 화면으로 돌아갑니다.

🧹 3. 명령어 입력 줄 제어: <Ctrl> + U & <Ctrl> + W

터미널에서 긴 명령어를 타이핑하다가 오타가 났을 때, 백스페이스(Backspace)를 여러 번 누르는 대신 사용하는 강력한 편집 키입니다.

<Ctrl> + U : 현재 줄 전체 지우기

현재 커서가 있는 위치를 기준으로 앞쪽에 입력된 모든 문자를 한 번에 지웁니다.

Bash
 
# find / -name core -type f <Ctrl> + U
# (입력된 전체가 사라지고 빈 프롬프트 대기 상태가 됨)

<Ctrl> + W : 마지막 단어 지우기

띄어쓰기(공백)를 기준으로 바로 앞의 한 단어만 삭제합니다.

Bash
 
# find / -name core -type f <Ctrl> + W
# find / -name core -type   <Ctrl> + W
# find / -name core

⚠️ [매우 중요] 최신 웹 터미널 환경에서의 주의사항 최근에는 AWS CloudShell, Web SSH 등 웹 브라우저 기반의 터미널을 많이 사용합니다. 웹 브라우저에서 <Ctrl> + W는 "현재 탭 닫기" 단축키입니다. 웹 터미널에서 이 단축키를 누르면 탭이 닫혀 작업이 날아갈 수 있으므로 각별히 주의해야 합니다!

⏸️ 4. 화면 출력 일시 정지 및 재개: <Ctrl> + S & <Ctrl> + Q

dmesg, ping, du 등과 같이 터미널 화면에 너무 많은 텍스트가 빠르게 지나갈 때 화면 스크롤을 잠시 멈추고 내용을 확인하는 기능입니다.

  • <Ctrl> + S (Stop): 화면으로의 문자 출력을 일시 중지합니다. (명령어 자체는 백그라운드에서 계속 실행 중임)
  • <Ctrl> + Q (Quit/재개): 중지된 화면 출력을 다시 재개하여 와다다다 쏟아지게 합니다.

[예제: 화면 출력 제어]

Bash
 
# du -a /          # 전체 파일 용량 탐색 시작 (글자가 매우 빠르게 올라감)
<Ctrl> + S         # 화면 정지 (내용 읽기)
<Ctrl> + Q         # 화면 출력 재개
<Ctrl> + S         # 다시 정지
<Ctrl> + C         # 명령어 실행 자체를 강제 취소하고 빠져나옴

💡 초보자 꿀팁: "터미널이 먹통이 되었어요!" 리눅스를 처음 쓸 때 무언가를 타이핑하다가 실수로 <Ctrl> + S를 누르면, 터미널이 아무런 키보드 입력도 안 먹히고 다운된 것처럼 보입니다. 터미널이 멈췄다고 당황하지 말고 <Ctrl> + Q를 눌러보세요. 바로 다시 정상 작동합니다.

 

리눅스 서버 운영 중에는 정기 점검(PM), 하드웨어 업그레이드, 대규모 커널 업데이트, 보안 패치(해킹 대응) 등의 사유로 시스템을 안전하게 끄거나 다시 켜야 하는 상황이 발생합니다.

이때 시스템에 접속해 있는 다른 사용자들에게 알림을 주고 안전하게 파일 시스템을 내릴 수 있도록 적절한 명령어를 선택하는 것이 매우 중요합니다. (기본적으로 관리자 root 권한이 필요합니다.)

1. 시스템 즉시 종료 명령어

아래 명령어들은 입력 즉시 실행 중인 프로세스를 중단하고 시스템 전원을 차단합니다. 실무에서는 가장 안전한 최신 표준인 systemctl poweroff 사용을 권장합니다.

Bash
 
# systemctl poweroff    # [최신 권장] systemd 기반의 가장 완벽하고 안전한 전원 종료
# shutdown -h now       # 즉시 종료 (-h: halt, now: 0분 대기)
# poweroff              # 전원 완전 차단 (현재는 systemctl을 호출함)
# halt                  # 시스템 중지 (하드웨어 전원은 안 꺼질 수 있음)
# init 0                # [Legacy] 과거 런레벨 0을 이용한 종료 방식

2. 시스템 즉시 재부팅 명령어

서버 재부팅 시에 사용하는 명령어입니다. 이 역시 systemctl reboot가 가장 최신 표준입니다.

Bash
 
# systemctl reboot      # [최신 권장] systemd 기반의 안전한 재부팅
# shutdown -r now       # 즉시 재부팅 (-r: reboot)
# reboot                # 재부팅 명령어 (현재는 systemctl을 호출함)
# init 6                # [Legacy] 과거 런레벨 6을 이용한 재부팅 방식

3. 예약 종료 및 취소 (shutdown 활용)

운영 중인 서버를 즉시 끄면 데이터 유실이나 서비스 장애가 발생할 수 있습니다. 따라서 유예 기간을 두어 접속 중인 사용자들에게 알림(Broadcast message)을 보내고 스스로 작업 내용을 저장할 시간을 주는 것이 정석입니다.

⏱️ 예약 종료 설정

shutdown 명령어에 +시간(분)을 추가하여 예약할 수 있습니다. (아무 시간도 지정하지 않고 shutdown만 입력하면 기본적으로 1분(60초) 뒤에 종료됩니다.)

Bash
 
# 5분 뒤에 시스템 예약 종료
# shutdown -h +5
Shutdown scheduled for Wed 2026-06-03 15:43:31 KST, use 'shutdown -c' to cancel.
Broadcast message from root@server1 (Wed 2026-06-03 15:38:31 KST):
The system is going down for power-off at Wed 2026-06-03 15:43:31 KST!

# 특정 시간에 시스템 예약 종료 (예: 밤 11시 30분)
# shutdown -h 23:30

🚫 예약 종료 취소 (-c)

실수로 예약 종료를 걸었거나 점검이 취소되었을 때 사용합니다.

⚠️ 주의사항: 아주 오래전 과거 리눅스에서는 터미널이 멈춰있을 때 <Ctrl> + C를 눌러 취소했지만, CentOS 7 이후 최신 리눅스에서는 예약 종료가 백그라운드로 넘어가므로 반드시 shutdown -c 명령어를 직접 입력하여 취소해야 합니다.

Bash
 
# 진행 중인 시스템 예약 종료(또는 재부팅) 일정 취소
# shutdown -c
Broadcast message from root@server1 (Wed 2026-06-03 15:39:10 KST):
The system shutdown has been cancelled at Wed 2026-06-03 15:40:10 KST!

 

서버 초기 설치 후 또는 외부 서비스 오픈 전에는 반드시 조직의 보안 정책에 맞게 강력한 암호로 변경해야 합니다. 리눅스 환경에서 계정 암호를 관리하는 기본 방법과, 관리자 암호를 분실했을 때의 강제 복구(Troubleshooting) 절차를 정리했습니다.

1. 계정별 암호 변경 규칙 및 권한

💡 비밀번호 복잡성(Complexity) 정책 일반적으로 8자 이상의 길이, 영문 대/소문자, 숫자, 특수문자를 혼합하여 사용해야 합니다. (PAM 모듈을 통해 제어됨)

  • root 사용자 (최고 관리자)
    • 권한: 시스템 내 모든 사용자의 암호를 변경할 수 있습니다.
    • 특징: 기존 암호를 묻지 않으며, 암호 복잡성 규칙(길이, 사전 단어 사용 등)을 무시하고 강제로 암호를 설정할 수 있습니다. (하지만 보안을 위해 강력한 암호 사용이 필수입니다.)
  • 일반 사용자
    • 권한: 본인 계정의 암호만 변경 가능합니다.
    • 특징: 반드시 기존 암호를 먼저 입력해야 하며, 시스템에 설정된 강력한 암호 복잡성 규칙을 통과해야만 변경이 승인됩니다.

2. 암호 변경 기본 명령어 (passwd)

👤 자신의 암호 변경 (root, 일반 사용자 공통)

명령어 뒤에 계정명을 생략하면 현재 로그인한 사용자의 암호를 변경합니다.

Bash
 
# passwd
Changing password for user fedora.
(current) UNIX password:      # (일반 사용자일 경우) 현재 암호 입력
New UNIX password:            # 새 암호 입력
Retype new UNIX password:     # 새 암호 확인 입력
passwd: all authentication tokens updated successfully.

👑 특정 사용자의 암호 변경 (root 권한 전용)

관리자는 특정 계정을 지정하여 즉시 암호를 초기화할 수 있습니다.

Bash
 
# passwd fedora
Changing password for user fedora.
New UNIX password:            # 새 암호 입력 (사전 기반 단어일 경우 경고가 뜨지만 root는 무시 가능)
Retype new UNIX password:     # 새 암호 확인 입력
passwd: all authentication tokens updated successfully.

3. 🚨 [긴급] 관리자(root) 암호 복구 방법 (rd.break)

서버 해킹 의심, 관리자 인수인계 누락, 암호 분실 등으로 인해 root 계정에 접근할 수 없을 때, 시스템 부팅 과정에 개입하여 암호를 강제 초기화하는 방법입니다.

⚠️ 버전별 커널 라인 차이

  • CentOS 7 이하: linux16 라인 끝에 추가
  • RHEL/Rocky/CentOS 8 이상: linux 라인 끝에 추가

[복구 진행 순서]

  1. 시스템을 재부팅합니다.
  2. 부트로더(GRUB) 화면이 나타나면 아무 키나 눌러 카운트다운을 멈추고, e 키를 눌러 편집(Edit) 모드로 진입합니다.
  3. 방향키를 이용해 linux (또는 linux16)으로 시작하는 줄의 맨 끝으로 이동합니다.
  4. 줄 끝에 한 칸 띄우고 rd.break를 입력한 뒤, Ctrl + x를 눌러 부팅을 진행합니다.
  5. switch_root# 프롬프트(Single User Mode)가 떨어지면 아래 명령어를 순차적으로 실행합니다.
Bash
 
# 1. sysroot를 읽기/쓰기(rw) 모드로 다시 마운트
# mount -o remount,rw /sysroot

# 2. 작업 디렉터리를 sysroot로 전환 (실제 시스템의 root 환경으로 진입)
# chroot /sysroot

# 3. root 계정 비밀번호 강제 변경
# passwd root
New UNIX password: 
Retype new UNIX password: 

# 4. [매우 중요] SELinux 컨텍스트 재설정 파일 생성
# touch /.autorelabel

# 5. chroot 환경을 빠져나온 후 시스템 재부팅
# exit
# exit

🛡️ touch /.autorelabel의 중요성 SELinux가 활성화(Enforcing)되어 있는 서버에서 이 단계를 누락하면, /etc/shadow 파일의 보안 컨텍스트가 꼬여서 암호를 올바르게 입력해도 로그인이 거부됩니다. 파일 시스템 전체의 라벨을 재작성하는 필수 명령어입니다.

4. 🛠️ 패스워드 설정 파일 손상 시 복구 방법

위 과정을 거쳐도 인증 오류가 발생하거나 /etc/passwd, /etc/shadow 파일 자체가 손상된 경우, 시스템이 백업해둔 파일(-가 붙은 파일)을 덮어씌워 복구할 수 있습니다.

[복구 진행 순서]

  • 위 3번의 rd.break 진입 후 chroot /sysroot까지 동일하게 진행한 뒤 아래 작업을 수행합니다.
Bash
 
# 1. 설정 파일이 있는 디렉터리로 이동
# cd /etc

# 2. 백업된 파일(-)을 원본 파일로 덮어쓰기 (복구)
# mv passwd- passwd
# mv shadow- shadow

# 3. SELinux 재설정 예약
# touch /.autorelabel

# 4. 재부팅
# exit
# exit

 

리눅스 서버 환경에서는 그래픽(GUI)보다 텍스트 기반의 CLI(Command Line Interface)를 주로 사용하여 작업합니다. 사용자가 명령어를 입력하면, 명령어 해석기인 셸(Shell, 주로 Bash)이 이를 해석하여 운영체제에 전달합니다.

명령어의 기본 구문을 이해하는 것은 리눅스를 다루는 가장 필수적이고 기초적인 역량입니다.

1. 명령어 기본 구문 (Syntax)

명령어는 크게 명령어(Command), 옵션(Options), 인자(Arguments) 세 가지 요소로 구성되며, 각 요소는 공백(Space)으로 구분합니다.

# Command [Options] [Arguments]

  • [ ] 대괄호는 해당 항목이 **선택적(생략 가능)**임을 의미합니다.
  • 명령어 (Command): 시스템에 내리는 기본 명령 (예: ls, cd, find)
  • 옵션 (Options): 명령어의 동작 방식을 구체적으로 변경할 때 사용하며, 보통 - 또는 -- 기호로 시작합니다. (예: -l, -a, --help)
  • 인자 (Arguments): 명령어나 옵션이 적용될 대상(파일, 디렉터리, 특정 값)을 나타냅니다. (예: /var, /etc/passwd)

🔍 명령어 분석 예시

Bash
 
# ls -l /var
  • ls: 디렉터리 안의 목록을 보여달라는 명령어 (list)
  • -l: 상세 정보를 포함하여 길게 보여달라는 옵션 (long)
  • /var: 목록을 확인할 대상 디렉터리를 지정하는 인자

(참고: 셸 프롬프트 #는 해당 명령을 실행하는 사용자가 최고 관리자인 root임을 나타냅니다. 일반 사용자는 보통 $로 표시됩니다.)

2. 명령어 활용 형태

명령어는 필요에 따라 옵션과 인자를 조합하여 다양하게 활용할 수 있습니다.

① 명령어만 단독 사용 (기본 동작 수행)

Bash
 
# ls

② 명령어 + 옵션 사용 (동작 방식 변경)

Bash
 
# ls -l

③ 명령어 + 인자 사용 (특정 대상에 기본 동작 수행)

Bash
 
# ls /var

④ 명령어 + 옵션 + 인자 모두 사용 (특정 대상에 변경된 동작 수행)

Bash
 
# ls -l /var
# uname -sr

⑤ 여러 명령어를 한 줄에 순차 실행 (세미콜론 ; 사용) 세미콜론(;)을 사용하면 앞의 명령어가 끝난 뒤 뒤의 명령어가 이어서 실행됩니다.

Bash
 
# cd /test ; ls -l

3. ⚙️ 옵션(Options) 사용 규칙

리눅스 명령어의 옵션은 매우 유연하게 조합하여 사용할 수 있습니다.

🔄 1) 짧은 옵션의 결합 및 순서 무관

명령어의 옵션은 자리를 바꾸거나 하나의 - 기호 뒤에 합쳐서 써도 동일하게 동작합니다.

Bash
 
# 아래의 명령어들은 모두 완벽하게 동일한 동작을 수행합니다.
# ls -a -l -F
# ls -al -F
# ls -alF
# ls -Fla

🔡 2) 긴 형태의 옵션 (Long Option)

단일 문자 옵션(-) 외에도 의미를 명확히 알 수 있는 긴 단어 형태의 옵션(--)을 제공하기도 합니다.

Bash
 
# ls --all      (ls -a 와 동일)
# ls --human-readable   (ls -h 와 동일)

4. 🎯 옵션과 결합된 인자(Arguments) 사용 시 주의사항

[매우 중요] 옵션 중에는 반드시 자신만의 고유한 인자(값)를 동반해야 하는 경우가 있습니다. 이때 해당 인자는 반드시 짝이 되는 옵션 바로 뒤에 위치해야 합니다. 명령어 전체의 순서는 바꿀 수 있어도, 짝꿍은 찢어놓으면 안 됩니다.

[올바른 예시]

Bash
 
# find / -name core -type f
(최상위 / 디렉터리에서 이름이(-name) 'core'이고, 타입이(-type) 일반 파일(f)인 것을 찾아라)

[옵션 결합 시 순서 규칙] 가상의 명령어 cmd가 있고, -i는 단독 옵션, -f는 반드시 인자(arg1)를 가져야 하는 옵션이라고 가정해 봅시다.

  • 정상 실행: 인자(arg1)가 짝꿍인 옵션(-f) 바로 뒤에 위치함
Bash
 
# cmd -i -f arg1
# cmd -f arg1 -i
# cmd -if arg1
  • 실행 오류: 옵션을 결합(-fi)했는데, 인자(arg1) 앞에 엉뚱한 단독 옵션(-i)이 끼어들어 짝이 깨짐
Bash
 
# cmd -fi arg1   (오류 발생! 시스템은 -i의 인자가 arg1인 것으로 착각하게 됨)

 

리눅스 시스템 운영 중 명령어나 파일의 정확한 사용법, 옵션, 구성 파일의 형식을 모를 때 공식 매뉴얼(Manual)을 확인하는 것은 필수적인 역량입니다.

1. man 명령어 핵심 사용법

man은 리눅스의 가장 기본적이고 강력한 공식 매뉴얼 확인 도구입니다.

📚 기본 명령어 및 옵션

Bash
 
# 특정 명령어의 매뉴얼 페이지 확인
# man ls

# 키워드로 관련 명령어 검색 (색인 DB 필요)
# man -k calendar

# 특정 섹션(Section)을 지정하여 검색
# man -s 5 passwd     (또는 간략히 man 5 passwd)

# 명령어에 대한 한 줄 짜리 간단한 설명 확인
# whatis passwd

⌨️ 매뉴얼 페이지 내 이동 단축키

매뉴얼 창(뷰어) 안에서 사용하는 주요 단축키입니다.

  • Enter : 한 줄씩 아래로 이동
  • Space : 한 화면(페이지)씩 아래로 이동
  • b (또는 Ctrl + B) : 한 화면(페이지)씩 위로 이동
  • /단어 : 특정 단어(키워드) 검색 (예: /OPTIONS)
  • n / N : 검색한 단어의 다음(Next) 결과 / 이전 결과로 이동
  • q : 매뉴얼 창 종료 후 셸로 복귀

2. 🗂️ 매뉴얼 섹션(Section) 번호의 이해

동일한 이름의 명령어와 파일이 존재할 경우(예: passwd 명령어와 /etc/passwd 파일), 섹션 번호로 구분해서 검색해야 합니다. 그냥 man passwd를 입력하면 기본적으로 1번 섹션(명령어)만 출력됩니다.

섹션 번호포함 내용 (분류)비고
1 일반 사용자가 실행할 수 있는 명령어 (User Commands) 예: ls, cd, passwd
2 시스템 호출 (System Calls, 커널 제공 함수) 개발자용
3 C 라이브러리 함수 (C Library functions) 개발자용
4 특수 파일 및 디바이스 (Devices & Network Interfaces) /dev 디렉터리 관련
5 파일 포맷 및 설정 파일 (File Formats) 예: /etc/passwd, /etc/fstab
6 게임 및 화면 보호기 (Games and Demos)  
7 환경, 테이블, 매크로 등 기타 잡다한 문서  
8 관리자(root) 전용 시스템 관리용 명령어 예: fdisk, reboot
 

💡 실무 꿀팁: passwd 검색 차이

  • # man -s 1 passwd : 암호를 변경하는 명령어의 사용법 출력
  • # man -s 5 passwd : /etc/passwd 설정 파일의 구조와 형식 출력

3. 🔍 매뉴얼 색인(Index) 데이터베이스 업데이트

man -k 또는 apropos 명령어로 키워드 검색 시, "nothing appropriate(적절한 항목이 없음)" 에러가 난다면 색인(Index) DB가 생성되지 않은 것입니다.

  • [과거 방식] CentOS 6 이하: makewhatis 명령어 사용
  • [최신 표준] RHEL/CentOS 7 이상, Ubuntu 등: mandb 명령어를 사용하여 즉시 업데이트
Bash
 
# 최신 시스템에서 매뉴얼 색인 DB 즉시 업데이트 (root 권한)
# mandb

(시스템 내부적으로 man-db-cron 패키지를 통해 매일 자동 업데이트되기도 합니다.)

4. 🛠️ 기타 유용한 정보 검색 명령어 모음

방대한 man 페이지 대신 빠르고 직관적으로 정보를 찾을 때 사용하는 도구들입니다.

Bash
 
# 1. 명령어의 간단한 사용법만 빠르게 확인 (매뉴얼 창으로 안 넘어가고 셸에 출력됨)
# ls --help

# 2. 명령어의 용도를 딱 한 줄로 요약해서 확인
# whatis ls
ls (1)      - list directory contents

# 3. 특정 키워드가 포함된 모든 매뉴얼 리스트 검색 (man -k 와 동일한 기능)
# apropos calendar

# 4. 명령어의 실행 파일(바이너리) 실제 경로 확인 (앨리어스 포함)
# which ls
alias ls='ls --color=auto'
        /usr/bin/ls

# 5. 실행 파일뿐만 아니라, 소스 코드 및 매뉴얼 파일의 위치까지 한 번에 찾기
# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

# 6. man 페이지보다 구조화된 텍스트/하이퍼링크 문서 확인
# info ls

# 7. info 페이지를 색상 맵 형식으로 더 보기 좋게 출력 (설치 필요)
# pinfo ls

 

1. 🔐 사용자 암호 관리 (passwd)

passwd 명령어는 사용자의 비밀번호를 설정하거나 변경할 때 사용합니다. 보안을 위해 최소 8자 이상, 대/소문자, 숫자, 특수문자를 혼합한 강력한 암호를 사용해야 합니다.

권한별 암호 변경의 차이

  • root 사용자: 모든 사용자의 암호를 변경할 수 있으며, 기존 암호를 묻지 않습니다. 암호 복잡성 규칙(사전 단어 등)의 경고를 무시하고 강제 변경이 가능합니다.
  • 일반 사용자: 자신의 암호만 변경 가능하며, 반드시 기존(현재) 암호를 먼저 입력해야 합니다. 또한 시스템의 암호 복잡성 규칙을 무조건 통과해야 합니다.

명령어 사용 예시

Bash
 
# 1. 자신의 암호 변경 (현재 로그인한 계정)
$ passwd
Changing password for user fedora.
(current) UNIX password:      # 현재 암호 입력 (일반 사용자일 경우)
New UNIX password:            # 새 암호 입력
Retype new UNIX password:     # 새 암호 재입력

# 2. 특정 사용자의 암호 변경 (root 권한만 가능)
# passwd user01

# 3. [자동화] 표준 입력(stdin)으로 암호 일괄 변경 (root 전용)
# echo 'password123!' | passwd --stdin user01

(참고: --stdin 옵션은 스크립트 자동화에는 편리하지만 셸 히스토리에 평문 암호가 남으므로 보안상 각별한 주의가 필요합니다. pwgen -sy1 12 등의 도구로 난수 암호를 생성하여 적용하는 것을 권장합니다.)

2. ℹ️ 시스템 기본 정보 확인 (uname & hostnamectl)

시스템에 소프트웨어를 설치하거나 장애를 파악할 때, 운영체제(OS)와 커널의 버전을 정확히 아는 것이 중요합니다.

uname 명령어 (커널 및 하드웨어 정보)

Bash
 
# 시스템의 모든 정보 출력
# uname -a
Linux server1.example.com 4.18.0-147.el8.x86_64 #1 SMP Wed Dec 4 21:51:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
  • 출력 항목 분석
    • Linux: 커널 이름 (-s)
    • server1.example.com: 호스트 이름 (-n)
    • 4.18.0-147.el8.x86_64: 커널 릴리즈 버전 (-r)
    • #1 SMP ... 2019: 커널 컴파일 일시 및 버전 (-v)
    • x86_64: CPU 및 하드웨어 아키텍처 (-m, -p, -i)
    • GNU/Linux: 운영체제 종류 (-o)

hostnamectl 명령어 (OS 통합 정보 시각화)

최신 시스템에서는 uname 대신 더 직관적인 hostnamectl을 많이 사용합니다.

Bash
 
# hostnamectl
 Static hostname: server1.example.com
         Icon name: computer-vm
    Virtualization: vmware
  Operating System: CentOS Linux 8 (Core)     <-- OS 배포판 정보
            Kernel: Linux 4.18.0-193.el8.x86_64 <-- 커널 정보
      Architecture: x86-64

(배포판 릴리즈 정보만 따로 보려면 # cat /etc/os-release 또는 # cat /etc/*release를 사용합니다.)

3. 🕒 시스템 시간 확인 및 동기화 (date, hwclock)

리눅스는 내부적으로 두 가지 시계를 운영합니다.

  • Software Clock (OS 시간): 부팅 후 커널이 소프트웨어적으로 계산하는 시간 (date)
  • Hardware Clock (RTC/CMOS 시간): 메인보드 칩셋(펌웨어)이 배터리를 통해 기억하는 물리적 시간 (hwclock)

date 명령어 (OS 시간 확인 및 포맷 출력)

date는 시간을 확인하거나, 백업/로그 파일명을 생성할 때 날짜 변수로 주로 활용됩니다.

Bash
 
# 1. 현재 OS 시간 확인
# date

# 2. 수동으로 시간 변경 (root 전용, MMDDhhmmYYYY 형식)
# date 081613002026   # 2026년 8월 16일 13:00분으로 변경

# 3. 시간 출력 포맷 지정 (로그 파일명 생성 시 유용)
# date +%m%d        # 월일 (예: 0603)
# date +%Y%m%d_%H%M # 연월일_시분 (예: 20260603_1548)

# [실무 활용] 오늘 날짜로 로그 파일 생성하기
# touch backup_$(date +%Y%m%d).log

타임서버 동기화 (Time Synchronization)

시간이 틀어지면 SSL 인증서 오류, 로그 분석 장애 등이 발생하므로 외부 타임서버와 동기화해야 합니다.

⚠️ 최신 리눅스 주의사항

  • RHEL/CentOS 8 버전 이상부터는 rdate나 ntpdate 명령어가 기본 지원되지 않습니다.
  • 최신 표준은 chronyd 데몬을 이용한 지속적인 NTP 동기화입니다. 단발성 동기화가 필요한 경우에만 아래 명령을 참고하세요.
Bash
 
# [과거/경량 환경] 타임서버(time.bora.net)에서 시간을 읽어와 OS 시간에 적용
# rdate -s time.bora.net

OS 시간과 하드웨어 시간(HW Clock) 일치시키기

타임서버와 동기화하여 OS 시간(date)을 맞추었다면, 재부팅 후에도 유지되도록 하드웨어 시간(hwclock)에도 덮어써야 합니다.

Bash
 
# 하드웨어 시간 확인
# hwclock --show

# [중요] OS 시간(System Time)을 하드웨어 시간(Hardware Clock)으로 덮어쓰기 저장
# hwclock --systohc

# 반대로, 하드웨어 시간을 OS 시간으로 가져오기
# hwclock --hctosys
반응형