Guider/Infra/InfraDevGuide0002
Infra#02· 43분 읽기

InfraDevGuide0002

Linux 기초 완전 정복

list목차(51)
 
Infra Dev Guide Series · 2단계

🐧 Linux 기초 완전 정복 A-Z

터미널·파일시스템·권한·패키지·네트워크·서비스 관리까지
현업 인프라 엔지니어가 매일 쓰는 Linux 핵심 기술 완전 마스터

🎯 대상: 리눅스 비전공자 ~ 중급자🕐 학습 기간: 2~3주⭐ 난이도: ★★☆☆☆📊 실습 예제 25+

📚 Infra Dev Guide 시리즈 전체 로드맵

단계 가이드 주제 상태
1단계 InfraDevGuide0001 인프라 개념 완전 정복 (서버·네트워크·스토리지) ✅ 완료
2단계 InfraDevGuide0002 👉 Linux 기초 완전 정복 ← 현재 학습 중 🔥 학습 중
3단계 InfraDevGuide0003 네트워크 기초 완전 정복 (OSI·TCP/IP·라우팅) ⏱ 예정
4단계 InfraDevGuide0004 클라우드 AWS 완전 정복 (EC2·S3·RDS·IAM) ⏱ 예정
5단계 InfraDevGuide0005 Docker & 컨테이너 완전 정복 ⏱ 예정
6단계 InfraDevGuide0006 CI/CD & 자동화 완전 정복 ⏱ 예정
7단계 InfraDevGuide0007 실전 프로젝트 & 취업 전략 ⏱ 예정

📝 전체 학습 목차

챕터 제목 핵심 내용 난이도
Ch01 Linux란? — OS와 커널 이해 Linux 역사, 배포판, 커널, 쉘 구조 ★☆☆
Ch02 터미널 & 쉘 기초 bash, 기본 명령어, man, alias, 히스토리 ★☆☆
Ch03 파일시스템 & 디렉토리 구조 /etc /var /home /usr 완전 이해 ★★☆
Ch04 파일 & 디렉토리 조작 ls, cp, mv, rm, find, grep, tar ★★☆
Ch05 파일 권한 & 소유권 chmod, chown, umask, SUID/SGID ★★☆
Ch06 사용자 & 그룹 관리 useradd, sudo, passwd, /etc/passwd ★★☆
Ch07 패키지 관리 & 소프트웨어 설치 apt, yum/dnf, snap, 소스 빌드 ★★☆
Ch08 프로세스 & 시스템 관리 ps, kill, top, systemctl, cron ★★★
Ch09 네트워크 설정 & SSH ip, ss, curl, SSH 키 인증, 포트포워딩 ★★★
Ch10 쉘 스크립트 & 자동화 변수, 조건문, 반복문, 함수, cron 자동화 ★★★
Ch11 현업 면접 Q&A TOP 10 Linux 현업 면접 핵심 질문 & 완벽 답변 ★★★

🐧 Chapter 01

Linux란? — OS와 커널, 배포판 완전 이해

왜 인프라 엔지니어는 Linux를 써야 하는가? 기초 개념부터 현업 배포판 선택까지

💡 Linux란 무엇인가?

Linux는 1991년 Linus Torvalds가 만든 오픈소스 운영체제(OS) 커널입니다. 전 세계 서버의 약 96%가 Linux를 운영체제로 사용합니다. AWS EC2, GCP, Azure의 VM도 대부분 Linux 기반이며, Docker 컨테이너도 Linux 커널 위에서 동작합니다.

🌐
서버 96%

전 세계 웹서버

클라우드 100%

AWS·GCP·Azure VM

📹
Android 기반

30억대+ 스마트폰

🔌
무료·오픈소스

누구나 사용·수정

🪝 1-1. Linux 구조 (커널 ~ 쉘 ~ 앱)

👤 사용자 애플리케이션 (User Applications)
nginx, mysql, python, node.js ...
💻 쉘 (Shell)
bash, zsh, sh — 명령어를 커널에 전달하는 인터프리터
🔐 시스템 콜 인터페이스 (System Call Interface)
open(), read(), write(), fork() ...
⚙ Linux 커널 (Kernel)
프로세스 관리 | 메모리 관리 | 파일시스템 | 네트워크 | 드라이버
💻 하드웨어 (Hardware)
CPU · RAM · Disk · NIC · GPU ...

📊 1-2. Linux 배포판(Distribution) 비교

계열 배포판 패키지 관리자 주요 특징 현업 사용처
Debian 계열 Ubuntu apt 가장 대중적, LTS 5년 지원 🏅 서버 1순위, AWS AMI 기본
Debian apt 안정성 최우선, 보수적 업데이트 웹서버, 임베디드
Kali Linux apt 보안·해킹 특화 도구 번들 보안 엔지니어
RHEL 계열 CentOS/RHEL yum/dnf 엔터프라이즈 표준, 장기 지원 금융·대기업 서버
Rocky Linux dnf CentOS 대안, RHEL 호환 엔터프라이즈 대체재
Amazon Linux dnf AWS EC2 최적화 AWS 인프라
기타 Alpine Linux apk 초경량 5MB, Docker 기본 이미지 컨테이너 최적화

🌟 현업 배포판 선택 가이드

  • 스타트업 / AWS 서버: Ubuntu LTS (22.04, 24.04) — 가장 보편적
  • AWS EC2 기본 선택: Amazon Linux 2023 — AWS 최적화
  • 금융·공공기관: RHEL 또는 Rocky Linux — 엔터프라이즈 표준
  • Docker 이미지: Alpine Linux — 용량 최소화

📱 Chapter 02

터미널 & 쉘 기초 — bash 명령어 완전 정복

Linux를 다루는 첫 번째 도구! 쉘의 구조와 현업에서 매일 쓰는 핵심 명령어 마스터

💡 2-1. 쉘(Shell)이란?

쉘(Shell)은 사용자가 입력한 명령어를 Linux 커널에 전달하는 명령어 인터프리터입니다. 가장 많이 쓰는 쉘은 bash(Bourne Again SHell)입니다.

bash

가장 보편적
Ubuntu 기본

zsh

macOS 기본
기능 풍부

fish

자동완성
초보자 친화

sh

POSIX 표준
스크립트용

📋 2-2. 프롬프트 읽는 법

ubuntu@web-server-01:~/projects$ ls
    
    # 각 부분 설명:
    # ubuntu    → 현재 사용자 이름
    # web-server-01 → 호스트명 (서버 이름)
    # ~/projects → 현재 디렉토리 (~ = 홈 디렉토리)
    # $         → 일반 사용자 ($) vs root (#)

⚙ 2-3. 현업 필수 명령어 완전 정리

카테고리 명령어 설명 현업 예시
파일 탐색 ls -alh 파일 목록 (상세+숨김+크기) ls -alh /var/log/
pwd 현재 디렉토리 경로 pwd → /home/ubuntu
cd 디렉토리 이동 cd /etc/nginx/
tree 트리 구조로 디렉토리 표시 tree -L 2 /etc/
파일 내용 cat 파일 전체 출력 cat /etc/nginx/nginx.conf
tail -f 실시간 로그 모니터링 tail -f /var/log/nginx/error.log
less 페이지 단위로 파일 보기 less /var/log/syslog
grep 패턴 검색 grep -r "ERROR" /var/log/
검색&텍스트 find 파일 검색 find /var -name "*.log" -mtime +30
awk 텍스트 처리·추출 awk '{print $1}' access.log
sed 텍스트 치환 sed -i 's/old/new/g' config.conf
wc -l 줄 수 세기 cat error.log | wc -l
시스템 정보 uname -a 커널 버전 정보 uname -a
hostname 호스트명 확인/설정 hostnamectl set-hostname myserver
uptime 서버 가동시간·로드 uptime → load: 0.15, 0.09

☕ 파이프(|) & 리다이렉션 — 명령어 조합의 핵심

# 파이프(|): 앞 명령의 출력을 뒤 명령의 입력으로
    cat /var/log/nginx/access.log | grep "404" | wc -l
    # → 오늘 404 에러 몇 건인지 카운트
    
    # 리다이렉션 (>): 출력을 파일로 저장 (덮어쓰기)
    echo "Hello Linux" > /tmp/hello.txt
    
    # 리다이렉션 (>>): 파일에 추가 (append)
    date >> /var/log/my_cron.log
    
    # 표준에러(stderr) 리다이렉션
    ./script.sh 2> /tmp/error.log
    
    # 표준출력+에러 모두 저장
    ./script.sh > /tmp/output.log 2>&1
    
    # 현업 실전: 에러 로그에서 특정 시간대 500 에러 추출
    grep "2026:10:" /var/log/nginx/error.log | grep " 500 " | tail -20

⚡ 유용한 단축키 & alias 설정

# 필수 단축키
    Ctrl+C    # 현재 실행 중인 명령 취소
    Ctrl+Z    # 현재 프로세스 백그라운드로 전환
    Ctrl+D    # 터미널 종료 (exit와 동일)
    Ctrl+L    # 화면 클리어 (clear와 동일)
    Ctrl+A    # 줄 맨 앞으로 커서 이동
    Ctrl+E    # 줄 맨 뒤로 커서 이동
    Ctrl+R    # 명령어 히스토리 검색
    Tab       # 자동완성 (파일명, 명령어)
    !!        # 직전 명령 재실행
    !$        # 직전 명령의 마지막 인자 재사용
    
    # ~/.bashrc에 alias 추가 (영구 적용)
    alias ll="ls -alh"
    alias la="ls -A"
    alias ..="cd .."
    alias ...="cd ../.."
    alias grep="grep --color=auto"
    alias tailn="tail -f /var/log/nginx/error.log"
    alias myip="curl ifconfig.me"
    
    # alias 적용
    source ~/.bashrc

📁 Chapter 03

파일시스템 & 디렉토리 구조 완전 정복

Linux의 모든 것은 파일이다! /etc /var /home /usr 디렉토리의 역할을 완벽하게 이해하자

💡 3-1. Linux 파일시스템 핵심 구조 (FHS)

/                                 ← 루트 디렉토리 (모든 것의 시작)
├── bin/                  ← 필수 바이너리 (ls, cp, mv, bash...)
├── sbin/                 ← 시스템 관리 바이너리 (iptables, fdisk...)
├── etc/                  ← 설정 파일 모음 ★ 가장 중요!
├── home/                 ← 사용자 홈 디렉토리
│   └── ubuntu/         ← /home/ubuntu (현재 사용자)
├── root/                 ← root 사용자 홈 디렉토리
├── var/                  ← 가변 데이터 (로그, 캐시, DB) ★ 자주 참조!
│   ├── log/             ← 시스템/앱 로그
│   └── www/             ← 웹 루트 디렉토리
├── usr/                  ← 사용자 설치 프로그램
│   ├── bin/             ← 일반 실행 파일
│   ├── local/           ← 직접 설치한 프로그램
│   └── share/           ← 공유 데이터 (man 페이지 등)
├── tmp/                  ← 임시 파일 (재부팅 시 삭제)
├── dev/                  ← 장치 파일 (디스크, 터미널...)
├── proc/                 ← 프로세스 정보 (가상 파일시스템)
├── sys/                  ← 커널·하드웨어 정보
└── mnt/ / media/        ← 마운트 포인트

⭐ 3-2. 인프라 엔지니어가 꼭 알아야 할 중요 디렉토리

디렉토리 역할 주요 파일/서비스 현업 활용
/etc 시스템 설정 파일 /etc/nginx/, /etc/ssh/, /etc/hosts, /etc/fstab 서버 설정 변경 시 가장 먼저 참조
/var/log 로그 파일 저장 syslog, auth.log, nginx/error.log, mysql/ 장애 원인 분석 시 첫 번째 확인
/home 사용자 홈 디렉토리 .bashrc, .ssh/, .profile, 개인 파일 사용자별 환경 설정
/usr/local 직접 설치한 프로그램 /usr/local/bin/, /usr/local/lib/ apt 외 소스 빌드 설치 위치
/proc 실행 중 프로세스 정보 /proc/cpuinfo, /proc/meminfo, /proc/PID/ CPU/메모리 정보 직접 확인
/dev 장치 파일 /dev/sda (디스크), /dev/null (버리기), /dev/random 디스크 파티션, 장치 관리

☕ 중요 설정 파일 현업 실전

# /etc/hosts — 로컬 DNS 오버라이드
    cat /etc/hosts
    # 127.0.0.1   localhost
    # 10.0.1.10   db-primary.internal
    # 10.0.1.11   db-replica.internal
    
    # /etc/fstab — 디스크 자동 마운트 설정
    cat /etc/fstab
    # UUID=xxx  /  ext4  defaults  0  1
    # /dev/sdb1  /data  xfs  defaults  0  0
    
    # /proc/cpuinfo — CPU 정보 직접 확인
    grep "model name" /proc/cpuinfo | head -1
    cat /proc/meminfo | grep MemTotal
    
    # /var/log 주요 로그 확인
    tail -50 /var/log/syslog          # 시스템 로그
    tail -50 /var/log/auth.log        # SSH 로그인 기록 (보안 감사)
    tail -50 /var/log/nginx/error.log # Nginx 에러
    journalctl -u nginx --since "1 hour ago"  # systemd 로그

💾 3-3. 파일시스템 타입 비교

파일시스템 특징 최대 파일 크기 주요 용도
ext4 Linux 표준, 안정적 16TB OS 파티션, 일반 서버
xfs 대용량·고성능 8EiB DB 서버, 대용량 스토리지
btrfs 스냅샷, CoW 지원 16EiB 백업, 스냅샷 필요 환경
tmpfs 메모리 기반 파일시스템 RAM 크기 /tmp, 고속 임시 저장

📄 Chapter 04

파일 & 디렉토리 조작 완전 정복

현업에서 매일 쓰는 파일 조작 명령어 완전 마스터 — ls·cp·mv·rm·find·grep·tar 실전

📋 파일 생성 & 복사 & 이동

# 파일 생성
    touch myfile.txt           # 빈 파일 생성 (타임스탬프도 업데이트)
    echo "Hello" > test.txt   # 내용으로 파일 생성
    mkdir -p /data/logs/2026  # 중간 디렉토리까지 한 번에 생성
    
    # 파일 복사
    cp source.txt dest.txt             # 파일 복사
    cp -r /etc/nginx/ /backup/nginx/  # 디렉토리 통째로 복사 (-r: 재귀)
    cp -p file.conf /backup/           # 권한·타임스탬프 유지
    rsync -av /data/ /backup/data/     # 대용량 동기화 (네트워크도 가능)
    
    # 파일 이동 & 이름 변경
    mv old.txt new.txt                  # 이름 변경
    mv /tmp/config.conf /etc/myapp/    # 이동
    
    # 파일 삭제 (주의! 복구 어려움)
    rm myfile.txt                # 파일 삭제
    rm -rf /tmp/old_logs/        # 디렉토리 통째로 삭제 (매우 주의!)
    rm -i *.log                  # 삭제 전 확인 (-i: interactive)
    
    # 현업 팁: rm 전에 항상 확인!
    ls -la /경로/ && rm -rf /경로/  # 먼저 ls로 확인 후 삭제

🔎 4-1. find 명령어 — 현업 필수!

# 기본 구조: find [검색경로] [조건] [동작]
    
    # 이름으로 검색
    find /etc -name "nginx.conf"           # 정확한 이름
    find /var -name "*.log"                # 패턴 매칭
    find / -name "*.conf" -type f          # 파일만 (-type f)
    find / -name "logs" -type d            # 디렉토리만 (-type d)
    
    # 크기로 검색
    find /var/log -size +100M              # 100MB 이상 파일
    find /tmp -size -1k                    # 1KB 미만
    
    # 날짜로 검색
    find /var/log -mtime +30               # 30일 이상 지난 파일
    find /home -mtime -1                   # 최근 1일 이내 수정 파일
    find /var -newer /etc/nginx/nginx.conf # 특정 파일보다 새로운 파일
    
    # 동작(action) 지정
    find /var/log -name "*.log" -mtime +30 -delete  # 30일 이상 로그 삭제
    find /data -type f -exec chmod 644 {} \;        # 찾은 파일에 명령 실행
    find /var/log -name "*.gz" | xargs rm -f        # xargs로 대량 삭제
    
    # 현업 실전: 디스크 공간 잡아먹는 파일 찾기
    find / -xdev -size +500M 2>/dev/null | sort -k5 -rn

🔍 4-2. grep 명령어 — 로그 분석 핵심

# 기본 검색
    grep "ERROR" /var/log/app.log           # 대소문자 구분
    grep -i "error" /var/log/app.log        # 대소문자 무시 (-i)
    grep -v "DEBUG" /var/log/app.log        # 반전 (DEBUG가 없는 줄)
    
    # 줄 번호 & 주변 컨텍스트
    grep -n "CRITICAL" app.log              # 줄 번호 표시
    grep -A 5 "Exception" app.log           # 이후 5줄
    grep -B 3 "Exception" app.log           # 이전 3줄
    grep -C 5 "Exception" app.log           # 앞뒤 5줄
    
    # 재귀 검색
    grep -r "password" /etc/              # /etc/ 전체에서 검색 (보안 감사)
    grep -rl "TODO" /app/src/             # 파일 이름만 출력 (-l)
    
    # 정규표현식
    grep -E "^2026" /var/log/nginx/access.log   # 줄 시작이 2026
    grep -E "\b404\b|\b500\b" access.log        # 404 또는 500
    grep -E "[0-9]{1,3}\.[0-9]{1,3}" access.log # IP 패턴
    
    # 현업 실전: 에러 빈도 분석
    grep "ERROR" /var/log/app.log | awk '{print $5}' | sort | uniq -c | sort -rn
    
    # 현업 실전: 특정 IP의 접근 로그만 추출
    grep "^192.168.1.100" /var/log/nginx/access.log | tail -50

📦 4-3. tar & 압축 — 백업 필수 도구

# tar 옵션 암기법: cvf = Create Verbose File | xvf = eXtract Verbose File
    
    # 압축 생성
    tar -cvf archive.tar /data/              # tar만 (압축 없음)
    tar -czvf archive.tar.gz /data/         # gzip 압축 (.tar.gz)
    tar -cjvf archive.tar.bz2 /data/        # bzip2 압축 (.tar.bz2)
    tar -cJvf archive.tar.xz /data/         # xz 압축 (최고 압축률)
    
    # 압축 해제
    tar -xvf archive.tar                    # tar 해제
    tar -xzvf archive.tar.gz               # gzip 해제
    tar -xvf archive.tar.gz -C /target/    # 특정 디렉토리에 해제
    
    # 압축 파일 내용 확인 (해제 없이)
    tar -tzvf archive.tar.gz
    
    # 현업 실전: 날짜 포함 백업
    DATE=$(date +%Y%m%d)
    tar -czvf /backup/nginx_config_${DATE}.tar.gz /etc/nginx/
    
    # zip/unzip
    zip -r myapp.zip /app/                 # zip 압축
    unzip myapp.zip -d /target/            # zip 해제

🔒 Chapter 05

파일 권한 & 소유권 완전 정복

Linux 보안의 핵심! chmod·chown·umask·SUID를 제대로 이해해야 서버 보안을 지킬 수 있다

💡 5-1. 파일 권한(Permission) 읽는 법

$ ls -la /etc/passwd
    -rw-r--r-- 1 root root 2847 Mar 28 10:00 /etc/passwd
    
    # 분해해서 읽기:
    - rw- r-- r--    1    root   root    2847   Mar 28  /etc/passwd
    ^ ^^^  ^^^  ^^^   ^     ^      ^       ^       ^          ^
    |  |    |    |   링크수 소유자 그룹    크기   날짜      파일명
    |  |    |    └── Other  권한 (r--= 읽기만)
    |  |    └─────── Group  권한 (r--= 읽기만)
    |  └──────────── Owner  권한 (rw-= 읽기+쓰기)
    └─────────────── 파일 타입 (- =파일, d=디렉토리, l=심볼릭링크)
r = 4
Read (읽기)
파일 내용 보기 / 디렉토리 목록 보기
w = 2
Write (쓰기)
파일 수정 / 디렉토리 파일 생성·삭제
x = 1
Execute (실행)
파일 실행 / 디렉토리 진입(cd)

⚙ 5-2. chmod — 권한 변경

숫자 방식 (8진수)

# 권한 숫자 계산
    # r(4) + w(2) + x(1) 합산
    # 7 = rwx (4+2+1)
    # 6 = rw- (4+2)
    # 5 = r-x (4+1)
    # 4 = r-- (4)
    # 0 = --- (없음)
    
    chmod 755 script.sh   # rwxr-xr-x
    chmod 644 config.conf # rw-r--r--
    chmod 600 .ssh/id_rsa # rw------- (SSH 키)
    chmod 777 /shared/    # 모두 허용 (위험!)
    chmod -R 755 /app/    # 재귀 적용

문자 방식 (symbolic)

# u=user, g=group, o=other, a=all
    # +=추가, -=제거, ==설정
    
    chmod u+x script.sh   # 소유자에 실행 추가
    chmod g-w file.txt    # 그룹 쓰기 제거
    chmod o= file.txt     # others 권한 모두 제거
    chmod a+r public.html # 모두에게 읽기 추가
    chmod u=rw,g=r,o= sensitive.conf
    # → rw-r-----
권한값 표기 의미 현업 사용 예
777 rwxrwxrwx 모두 접근 가능 🔴 보안 위험! 사용 금지
755 rwxr-xr-x 소유자 전체 / 나머지 읽기+실행 🟢 디렉토리, 실행 파일
644 rw-r--r-- 소유자 읽기+쓰기 / 나머지 읽기만 🟢 설정 파일, HTML
600 rw------- 소유자만 읽기+쓰기 🟢 SSH 키, 비밀번호 파일
400 r-------- 소유자만 읽기 🟢 읽기 전용 설정 파일

👤 5-3. chown — 소유권 변경

# chown [소유자]:[그룹] [파일/디렉토리]
    
    chown ubuntu:ubuntu /home/ubuntu/app/      # 소유자와 그룹 변경
    chown www-data:www-data /var/www/html/     # Nginx/Apache 웹 루트
    chown -R deploy:deploy /app/              # 재귀 변경 (-R)
    chown root /etc/passwd                    # 소유자만 변경
    
    # 현업 실전: 배포 후 권한 설정
    # 1. 앱 파일은 deploy 유저 소유
    chown -R deploy:deploy /app/
    chmod -R 750 /app/
    
    # 2. 로그 디렉토리는 그룹에 쓰기 허용
    chown -R deploy:www-data /app/logs/
    chmod -R 775 /app/logs/
    
    # 3. 설정 파일은 읽기 전용
    chown root:deploy /app/config/prod.env
    chmod 640 /app/config/prod.env

✅ 현업 권한 설정 원칙

  • 최소 권한 원칙: 필요한 최소한의 권한만 부여 (777 절대 금지)
  • SSH 키 권한: ~/.ssh/ → 700, ~/.ssh/authorized_keys → 600 (더 넓으면 SSH 거부!)
  • 웹 루트: /var/www/html → www-data:www-data, 755
  • 환경변수 파일(.env): 600 (소유자만 읽기)
  • 실행 스크립트: 755 또는 750 (타 그룹 실행 불필요 시)

👤 Chapter 06

사용자 & 그룹 관리 완전 정복

멀티 유저 환경에서 인프라를 안전하게 관리하는 법 — useradd·sudo·passwd·그룹 관리 완전 정복

💡 6-1. 리눅스 사용자 구조

👑 root (UID 0)

모든 권한을 가진 슈퍼유저. 잘못된 명령 하나로 서버 전체를 파괴 가능. 직접 로그인 금지!

👤 일반 사용자 (UID 1000+)

제한된 권한. sudo 명령으로 필요 시 root 권한 일시 획득. 현업에서 배포 계정 등에 사용.

⚙ 시스템 계정 (UID 1~999)

nginx, mysql, www-data 등 서비스 실행용 계정. 로그인 불가 설정. 최소 권한으로 서비스 격리.

☕ 사용자 관리 핵심 명령어

# 사용자 생성
    sudo useradd -m -s /bin/bash deploy         # 홈 디렉토리(-m) + bash쉘(-s) 포함
    sudo useradd -m -s /bin/bash -G sudo admin  # sudo 그룹에 추가
    
    # 비밀번호 설정
    sudo passwd deploy              # 비밀번호 설정
    sudo passwd -e deploy           # 다음 로그인 시 비밀번호 강제 변경
    sudo passwd -l deploy           # 계정 잠금 (Lock)
    
    # 사용자 수정
    sudo usermod -aG docker ubuntu  # docker 그룹에 추가 (-a: append)
    sudo usermod -aG sudo deploy    # sudo 권한 부여
    sudo usermod -s /bin/nologin nginx  # 로그인 불가로 설정
    
    # 사용자 삭제
    sudo userdel deploy             # 계정만 삭제
    sudo userdel -r deploy          # 계정 + 홈 디렉토리 삭제
    
    # 사용자 정보 확인
    id ubuntu                       # UID, GID, 그룹 확인
    who                             # 현재 로그인한 사용자
    w                               # 로그인 사용자 + 작업 내용
    last                            # 로그인 기록
    cat /etc/passwd | grep deploy   # /etc/passwd 직접 확인

🛡 6-2. sudo — 권한 상승의 올바른 사용

sudo(Superuser Do)는 특정 명령어를 root 권한으로 실행하는 도구입니다. root 직접 로그인보다 안전하고, 감사 로그(/var/log/auth.log)에 기록됩니다.

# /etc/sudoers 파일 (visudo로만 수정!)
    sudo visudo
    
    # 형식: who  where=(as_who) what
    # root ALL=(ALL:ALL) ALL  # root는 모든 것 가능
    # %sudo ALL=(ALL:ALL) ALL # sudo 그룹은 모든 것 가능
    
    # 특정 명령만 허용 (세밀한 권한 제어)
    deploy ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx
    deploy ALL=(ALL) NOPASSWD: /usr/bin/docker
    
    # sudo 로그 확인
    grep sudo /var/log/auth.log | tail -20
    
    # 현재 sudo 권한 확인
    sudo -l
파일 역할 중요 필드
/etc/passwd 사용자 계정 정보 ubuntu:x:1000:1000::/home/ubuntu:/bin/bash
이름:암호:UID:GID:설명:홈:쉘
/etc/shadow 암호화된 비밀번호 실제 해시 비밀번호 저장 (root만 읽기)
/etc/group 그룹 정보 docker:x:999:ubuntu,deploy
/etc/sudoers sudo 권한 설정 어떤 사용자가 어떤 명령 실행 가능한지

📦 Chapter 07

패키지 관리 & 소프트웨어 설치 완전 정복

apt·yum·dnf·snap·소스 빌드까지 — Linux 소프트웨어 설치의 모든 것

📊 7-1. 패키지 매니저 비교

apt (Ubuntu/Debian 계열)

# 패키지 목록 업데이트 (항상 먼저!)
    sudo apt update
    
    # 패키지 설치
    sudo apt install -y nginx
    sudo apt install -y git curl wget vim
    
    # 업그레이드
    sudo apt upgrade -y
    sudo apt dist-upgrade -y  # 의존성 포함
    
    # 패키지 제거
    sudo apt remove nginx         # 파일만
    sudo apt purge nginx          # 설정파일까지
    sudo apt autoremove           # 불필요 패키지 정리
    
    # 검색
    apt search nginx
    apt show nginx
    apt list --installed

dnf/yum (RHEL/CentOS/Rocky 계열)

# dnf (최신) / yum (구버전) — 사용법 동일
    
    # 패키지 목록 업데이트
    sudo dnf check-update
    
    # 패키지 설치
    sudo dnf install -y nginx
    sudo dnf install -y git curl wget
    
    # 업그레이드
    sudo dnf upgrade -y
    
    # 패키지 제거
    sudo dnf remove nginx
    
    # 검색
    dnf search nginx
    dnf info nginx
    dnf list installed
    
    # 그룹 설치
    dnf groupinstall "Development Tools"

☕ 현업 서버 초기 설정 스크립트 (Ubuntu)

#!/bin/bash
    # 서버 초기 세팅 스크립트
    
    echo "=== 패키지 업데이트 ==="
    sudo apt update && sudo apt upgrade -y
    
    echo "=== 필수 도구 설치 ==="
    sudo apt install -y \
      vim curl wget git \
      htop iotop iftop \
      net-tools dnsutils \
      build-essential \
      ufw fail2ban \
      unzip jq
    
    echo "=== UFW 방화벽 설정 ==="
    sudo ufw allow ssh
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw --force enable
    
    echo "=== 자동 업데이트 설정 ==="
    sudo apt install -y unattended-upgrades
    sudo dpkg-reconfigure -plow unattended-upgrades
    
    echo "=== 타임존 설정 ==="
    sudo timedatectl set-timezone Asia/Seoul
    
    echo "=== 완료! ==="
    echo "서버 초기 설정이 완료되었습니다."

⚙ Chapter 08

프로세스 & 시스템 관리 완전 정복

서버에서 실행 중인 프로세스를 완벽하게 제어하고, systemctl·cron으로 서비스를 자동화한다

📊 8-1. 프로세스 확인 & 제어

# 프로세스 목록 확인
    ps aux                         # 모든 프로세스 (a=all, u=user, x=no-tty)
    ps aux --sort=-%cpu | head -10 # CPU 사용률 상위 10
    ps aux --sort=-%mem | head -10 # 메모리 사용률 상위 10
    ps -ef | grep nginx             # 특정 프로세스 검색
    
    # 실시간 모니터링
    top                    # 기본 모니터링
    htop                   # 컬러풀한 모니터링 (apt install htop)
    
    # top 단축키:
    # P → CPU 정렬  M → 메모리 정렬  q → 종료
    # k → 프로세스 kill 입력  1 → CPU 코어별 보기
    
    # 프로세스 ID(PID) 검색
    pgrep nginx            # nginx PID 출력
    pidof nginx            # PID 출력
    
    # 프로세스 종료
    kill 1234              # SIGTERM (정상 종료 요청)
    kill -9 1234           # SIGKILL (강제 종료)
    killall nginx          # 이름으로 모두 종료
    pkill -f "python app"  # 패턴으로 종료

🔄 8-2. 백그라운드 실행 & nohup

# 백그라운드 실행 (&)
    ./long_script.sh &            # 백그라운드 실행
    jobs                          # 백그라운드 작업 목록
    fg %1                         # 포그라운드로 복귀
    bg %1                         # 백그라운드 계속 실행
    
    # nohup — SSH 종료 후에도 실행 유지
    nohup ./app.sh &              # SSH 끊겨도 실행 계속
    nohup python3 server.py > /var/log/app.log 2>&1 &
    
    # screen / tmux — 세션 유지
    screen -S myapp               # myapp 세션 생성
    screen -r myapp               # 세션 재접속
    screen -ls                    # 세션 목록
    
    # tmux (더 강력한 대안)
    tmux new -s myapp             # 새 세션
    tmux attach -t myapp          # 세션 재접속
    tmux ls                       # 세션 목록
    # Ctrl+B D → 세션에서 분리

🔄 8-3. systemctl — 서비스 관리의 핵심

systemd는 현대 Linux의 init 시스템으로, 서비스(데몬)를 관리합니다. nginx, mysql, sshd 등 모든 서비스가 systemd로 관리됩니다.

# 서비스 상태 확인
    sudo systemctl status nginx
    sudo systemctl status nginx --no-pager -l   # 전체 출력
    
    # 서비스 시작/중지/재시작
    sudo systemctl start nginx
    sudo systemctl stop nginx
    sudo systemctl restart nginx   # 중지 후 시작
    sudo systemctl reload nginx    # 설정만 재로드 (서비스 중단 없음)
    
    # 부팅 시 자동 시작 설정
    sudo systemctl enable nginx    # 자동 시작 활성화
    sudo systemctl disable nginx   # 자동 시작 비활성화
    sudo systemctl is-enabled nginx # 활성화 여부 확인
    
    # 모든 서비스 목록
    sudo systemctl list-units --type=service
    sudo systemctl list-units --type=service --state=failed  # 실패한 서비스만
    
    # 서비스 로그 (journalctl)
    sudo journalctl -u nginx               # nginx 로그 전체
    sudo journalctl -u nginx -f            # 실시간 (-f: follow)
    sudo journalctl -u nginx --since "1 hour ago"
    sudo journalctl -u nginx -n 50         # 마지막 50줄

⌛ 8-4. cron — 작업 자동화 스케줄러

crontab 형식

# 분  시  일  월  요일  명령
    # 0-59 0-23 1-31 1-12 0-7(0,7=일요일)
    
    # crontab 편집
    crontab -e    # 현재 사용자 crontab 편집
    crontab -l    # 현재 crontab 목록
    crontab -r    # crontab 삭제
    
    # 예시:
    # 매분 실행
    * * * * * /usr/bin/python3 /app/monitor.py
    
    # 매일 새벽 2시에 백업
    0 2 * * * /scripts/backup.sh >> /var/log/backup.log 2>&1
    
    # 매주 월요일 오전 9시
    0 9 * * 1 /scripts/weekly_report.sh
    
    # 매월 1일 자정
    0 0 1 * * /scripts/monthly_cleanup.sh
    
    # 5분마다
    */5 * * * * /scripts/health_check.sh
    
    # 현업 실전: 30일 이상 된 로그 자동 삭제
    0 3 * * * find /var/log/nginx -name "*.log.gz" -mtime +30 -delete

✅ 시스템 자원 모니터링 핵심 명령어

명령어 확인 항목 주요 지표
top / htop CPU, 메모리, 프로세스 load average, %cpu, %mem
free -h 메모리 사용량 total, used, free, buff/cache, available
df -h 디스크 사용량 Filesystem, Size, Used, Use%, Mounted on
iostat -x 1 디스크 I/O %util, r/s, w/s, await
vmstat 1 시스템 통계 procs, memory, swap, io, cpu
sar -u 1 10 CPU 히스토리 %user, %system, %idle

🌐 Chapter 09

네트워크 설정 & SSH 완전 정복

Linux 서버 네트워크 설정과 SSH 키 인증 — 인프라 엔지니어의 핵심 실무 스킬

📊 9-1. 네트워크 상태 확인 명령어

# IP 주소 확인
    ip addr show              # 모든 인터페이스 IP 확인
    ip addr show eth0         # 특정 인터페이스만
    ip -4 addr                # IPv4만
    hostname -I               # 서버 IP 빠르게 확인
    curl ifconfig.me          # 외부 공인 IP 확인
    
    # 라우팅 테이블
    ip route show             # 라우팅 테이블
    ip route get 8.8.8.8      # 특정 IP 경로
    
    # 포트 & 연결 확인
    ss -tulnp                 # 열려있는 포트 + PID (현업 필수!)
    ss -s                     # 연결 통계 요약
    netstat -an | grep LISTEN # 리스닝 포트 (구버전)
    
    # 네트워크 연결 테스트
    ping -c 4 google.com      # 연결 테스트 (4번만)
    traceroute google.com     # 경로 추적
    mtr google.com            # ping + traceroute 조합
    
    # DNS 조회
    nslookup google.com       # DNS 조회
    dig google.com            # 상세 DNS 조회
    dig +short google.com A   # A레코드만
    host -t MX google.com     # MX 레코드
    
    # 포트 연결 테스트
    nc -zv db-server 3306     # MySQL 포트 오픈 확인
    telnet redis-server 6379  # Redis 포트 확인
    curl -v https://api.example.com/health  # HTTP 연결 확인

🔑 9-2. SSH 완전 정복 — 키 인증부터 보안 설정까지

SSH(Secure Shell)는 암호화된 원격 서버 접속 프로토콜입니다. 인프라 엔지니어의 가장 기본적인 도구이며, 키 인증 방식이 비밀번호보다 훨씬 안전합니다.

# === SSH 키 생성 (클라이언트에서) ===
    ssh-keygen -t ed25519 -C "admin@myserver"  # ED25519 키 (권장)
    # 또는
    ssh-keygen -t rsa -b 4096 -C "admin@myserver"  # RSA 4096비트
    # 파일 저장 위치: ~/.ssh/id_ed25519 (개인키), ~/.ssh/id_ed25519.pub (공개키)
    
    # === 공개키를 서버에 등록 ===
    ssh-copy-id ubuntu@server-ip              # 자동 복사 (권장)
    # 또는 수동으로:
    cat ~/.ssh/id_ed25519.pub | ssh ubuntu@server-ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
    
    # === SSH 접속 ===
    ssh ubuntu@192.168.1.100                  # 기본 접속
    ssh -p 2222 ubuntu@server-ip             # 포트 지정
    ssh -i ~/.ssh/mykey ubuntu@server-ip     # 특정 키 파일 사용
    
    # === ~/.ssh/config 파일로 간편 접속 ===
    cat ~/.ssh/config
    # Host web-prod
    #     HostName 10.0.1.10
    #     User ubuntu
    #     Port 22
    #     IdentityFile ~/.ssh/prod_key
    # 
    # Host db-prod
    #     HostName 10.0.2.20
    #     User deploy
    #     ProxyJump bastion  # bastion 서버 경유
    
    ssh web-prod   # 간편 접속!

🛡 SSH 서버 보안 강화 (/etc/ssh/sshd_config)

# /etc/ssh/sshd_config 보안 설정
    sudo vim /etc/ssh/sshd_config
    
    # 비밀번호 로그인 비활성화 (키 인증만 허용)
    PasswordAuthentication no
    
    # root 직접 로그인 차단
    PermitRootLogin no
    
    # 허용 사용자 지정 (화이트리스트)
    AllowUsers ubuntu deploy
    
    # SSH 포트 변경 (기본 22 → 다른 포트)
    Port 22  # 변경 시 방화벽도 함께 수정!
    
    # 유휴 연결 자동 종료 (300초)
    ClientAliveInterval 300
    ClientAliveCountMax 2
    
    # 최대 인증 시도 횟수
    MaxAuthTries 3
    
    # X11 포워딩 비활성화 (불필요)
    X11Forwarding no
    
    # 설정 적용
    sudo systemctl restart sshd
    
    # fail2ban 설치 (SSH 브루트포스 방어)
    sudo apt install -y fail2ban
    sudo systemctl enable --now fail2ban
    sudo fail2ban-client status sshd  # 차단 현황 확인

🌐 SSH 터널링 & 포트포워딩

# 로컬 포트포워딩: 로컬 포트 → 서버 너머 서비스 접속
    # 예: 서버 내 DB(3306)를 로컬 3306으로 접근
    ssh -L 3306:localhost:3306 ubuntu@server-ip
    # → 이제 로컬에서 localhost:3306으로 DB 접속 가능!
    
    # 원격 포트포워딩: 서버 포트 → 로컬 서비스
    ssh -R 8080:localhost:3000 ubuntu@server-ip
    # → 서버의 8080으로 접속하면 로컬 3000으로 연결
    
    # SOCKS 프록시 (동적 포트포워딩)
    ssh -D 1080 ubuntu@server-ip
    # → 브라우저 프록시를 localhost:1080으로 설정
    
    # SCP — 파일 전송
    scp local.txt ubuntu@server-ip:/tmp/         # 업로드
    scp ubuntu@server-ip:/var/log/app.log ./     # 다운로드
    scp -r ./deploy/ ubuntu@server-ip:/app/      # 디렉토리
    
    # rsync — 효율적 파일 동기화
    rsync -avz ./app/ ubuntu@server-ip:/app/     # 원격 동기화
    rsync -avz --delete ./app/ ubuntu@server-ip:/app/  # 삭제도 동기화

💻 Chapter 10

쉘 스크립트 & 자동화 완전 정복

반복 작업을 자동화하는 쉘 스크립트! 변수·조건문·반복문·함수·cron 자동화까지 실전 완성

💡 10-1. 쉘 스크립트 기초

#!/bin/bash
    # 첫 줄은 항상 shebang! (어떤 인터프리터로 실행할지)
    
    # === 변수 ===
    NAME="ubuntu"              # 대입 시 공백 없이!
    COUNT=10
    TODAY=$(date +%Y%m%d)      # 명령어 결과를 변수에
    echo "오늘: $TODAY"        # 변수 사용
    echo "이름: ${NAME}이다"   # 중괄호로 명확하게
    
    # 특수 변수
    echo $0    # 스크립트 이름
    echo $1    # 첫 번째 인자
    echo $#    # 인자 개수
    echo $@    # 모든 인자
    echo $?    # 직전 명령 종료 코드 (0=성공)
    echo $$    # 현재 프로세스 PID
    
    # === 조건문 ===
    if [ $COUNT -gt 5 ]; then
        echo "5보다 크다"
    elif [ $COUNT -eq 5 ]; then
        echo "5이다"
    else
        echo "5보다 작다"
    fi
    
    # 파일/디렉토리 조건
    if [ -f "/etc/nginx/nginx.conf" ]; then
        echo "nginx 설정 파일 존재"
    fi
    if [ -d "/app/logs" ]; then
        echo "로그 디렉토리 존재"
    else
        mkdir -p /app/logs
    fi
    
    # 비교 연산자
    # -eq: 같음  -ne: 다름  -gt: 크다  -lt: 작다  -ge: 이상  -le: 이하
    # -f: 파일 존재  -d: 디렉토리 존재  -z: 빈 문자열  -n: 비어있지 않음

🔄 반복문 & 함수

# === for 반복문 ===
    for i in 1 2 3 4 5; do
        echo "아이템: $i"
    done
    
    # 파일 목록 반복
    for log in /var/log/nginx/*.log; do
        echo "처리 중: $log"
    done
    
    # C 스타일 for
    for ((i=1; i<=10; i++)); do
        echo $i
    done
    
    # === while 반복문 ===
    count=0
    while [ $count -lt 5 ]; do
        echo "카운트: $count"
        ((count++))
    done
    
    # === 함수 ===
    log_message() {
        local level=$1    # local = 함수 내 지역 변수
        local msg=$2
        echo "[$(date +%H:%M:%S)] [$level] $msg"
    }
    
    check_service() {
        local service=$1
        if systemctl is-active --quiet $service; then
            log_message "INFO" "$service 실행 중"
            return 0
        else
            log_message "ERROR" "$service 중지됨!"
            return 1
        fi
    }
    
    # 함수 호출
    check_service nginx
    check_service mysql

☕ 현업 실전 스크립트 — 서버 헬스체크 자동화

#!/bin/bash
    # health_check.sh — 서버 헬스체크 + 슬랙 알림
    
    SLACK_WEBHOOK="https://hooks.slack.com/services/YOUR/WEBHOOK"
    THRESHOLD_CPU=80
    THRESHOLD_MEM=85
    THRESHOLD_DISK=90
    
    send_alert() {
        local message=$1
        curl -s -X POST $SLACK_WEBHOOK \
            -H "Content-type: application/json" \
            -d "{"text": "$(hostname): $message"}"
    }
    
    # CPU 확인
    CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d"%" -f1 | cut -d"." -f1)
    if [ "$CPU_USAGE" -gt "$THRESHOLD_CPU" ]; then
        send_alert "CPU 경고: ${CPU_USAGE}% (임계값: ${THRESHOLD_CPU}%)"
    fi
    
    # 메모리 확인
    MEM_USAGE=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
    if [ "$MEM_USAGE" -gt "$THRESHOLD_MEM" ]; then
        send_alert "메모리 경고: ${MEM_USAGE}% 사용 중"
    fi
    
    # 디스크 확인
    DISK_USAGE=$(df / | grep / | awk '{print $5}' | sed 's/%//g')
    if [ "$DISK_USAGE" -gt "$THRESHOLD_DISK" ]; then
        send_alert "디스크 경고: ${DISK_USAGE}% 사용 중 — 즉시 정리 필요!"
    fi
    
    # 서비스 확인
    for service in nginx mysql redis; do
        if ! systemctl is-active --quiet $service; then
            send_alert "$service 서비스 중지됨! 자동 재시작 시도"
            sudo systemctl restart $service
        fi
    done
    
    echo "헬스체크 완료: $(date)"

🏆 Chapter 11

현업 면접 Q&A TOP 10 — Linux 기초

실제 인프라 엔지니어 면접에서 자주 나오는 Linux 질문과 합격 수준의 완벽한 답변

❓ Q1. Linux의 파일 권한 755와 644의 차이를 설명하세요.

A: 755(rwxr-xr-x)는 소유자에게 모든 권한, 그룹과 others에 읽기+실행 권한입니다. 디렉토리나 실행 파일에 적합합니다. 644(rw-r--r--)는 소유자에게 읽기+쓰기, 나머지에 읽기만입니다. 설정 파일, HTML 파일에 사용합니다. SSH 키는 600(rw-------)으로 더 좁게 설정합니다.

❓ Q2. /etc /var /usr /tmp 디렉토리의 역할을 설명하세요.

A: /etc는 시스템 설정 파일 저장소(nginx.conf, sshd_config 등), /var는 가변 데이터(로그, 캐시, DB 파일), /usr는 사용자 설치 프로그램과 공유 라이브러리, /tmp는 임시 파일(재부팅 시 삭제)입니다. 인프라 엔지니어는 /etc와 /var/log를 가장 자주 참조합니다.

❓ Q3. 프로세스와 데몬의 차이는?

A: 프로세스는 실행 중인 프로그램 인스턴스입니다. 데몬(Daemon)은 백그라운드에서 지속적으로 실행되며 서비스를 제공하는 특수한 프로세스입니다. nginx, sshd, mysqld 등이 데몬입니다. 보통 이름 끝에 d가 붙으며, systemd로 관리됩니다.

❓ Q4. 서버 디스크 사용량이 100%라면 어떻게 대응하나요?

A: 1) df -h로 어느 파티션인지 확인, 2) du -sh /*로 큰 디렉토리 찾기, 3) find /var -name "*.log" -size +100M으로 대용량 로그 파일 찾기, 4) 오래된 로그 파일 삭제 또는 gzip 압축, 5) 근본 해결책으로 logrotate 설정 또는 디스크 확장을 진행합니다.

❓ Q5. SSH 키 인증이 비밀번호보다 안전한 이유는?

A: SSH 키는 공개키/개인키 쌍을 사용한 비대칭 암호화입니다. 서버에 공개키만 저장하고 개인키는 클라이언트에만 보관합니다. 무차별 대입(brute force) 공격이 사실상 불가능하며, 네트워크로 비밀번호가 전송되지 않아 중간자 공격에도 안전합니다.

❓ Q6. Linux에서 좀비 프로세스란?

A: 좀비(zombie) 프로세스는 실행은 종료됐지만 부모 프로세스가 wait() 시스템 콜로 종료 상태를 회수하지 않아 프로세스 테이블에 남아있는 상태입니다. ps로 Z 상태로 보입니다. 자원을 거의 사용하지 않지만 PID를 점유합니다. 부모 프로세스를 kill하거나 코드를 수정하여 해결합니다.

❓ Q7. systemctl restart와 reload의 차이는?

A: restart는 서비스를 완전히 중지 후 다시 시작하므로 기존 연결이 모두 끊깁니다. reload는 프로세스는 살아있으면서 설정 파일만 다시 읽어 반영합니다. nginx 설정 변경 시 reload를 사용하면 서비스 중단 없이 적용됩니다. reload를 지원하지 않는 서비스는 restart를 사용해야 합니다.

❓ Q8. cron과 systemd timer의 차이는?

A: cron은 전통적인 스케줄러로 간단하고 널리 사용됩니다. systemd timer는 더 정밀한 시간 제어, 의존성 관리, journalctl 로그 통합이 가능합니다. 또한 부팅 후 일정 시간이 지난 뒤 실행(OnBootSec)이나 이전 실행 종료 후(OnUnitActiveSec) 실행도 지원합니다.

❓ Q9. load average 값을 어떻게 해석하나요?

A: load average는 1분/5분/15분 평균 실행 대기 프로세스 수입니다. CPU 코어 수와 비교합니다. 4코어 서버에서 load 4.0은 100% 포화 상태입니다. 1분 값이 갑자기 높아지면 현재 문제, 15분 값이 높으면 지속적 과부하를 의미합니다. top, uptime 명령으로 확인합니다.

❓ Q10. 특정 포트를 어떤 프로세스가 사용 중인지 확인하는 방법은?

A: ss -tulnp | grep :포트번호 또는 lsof -i :포트번호 명령을 사용합니다. 예를 들어 ss -tulnp | grep :80 으로 80번 포트를 점유한 프로세스와 PID를 확인할 수 있습니다. 방화벽 설정이나 서비스 충돌 문제 해결 시 가장 먼저 사용하는 명령입니다.

✅ InfraDevGuide0002 학습 완료 체크리스트

🐧 Linux 기초 개념

  • Linux 커널 구조 (커널-쉘-앱) 설명 가능
  • Ubuntu/CentOS/Alpine 배포판 특징 이해
  • FHS 디렉토리 구조 (/etc /var /usr 역할)
  • 파일 권한 숫자(755, 644, 600) 즉답 가능
  • 프로세스 vs 데몬 차이 설명 가능

💻 실습 완료

  • find 명령어로 파일 검색 및 삭제 자동화
  • grep으로 로그에서 에러 패턴 추출
  • chmod/chown으로 파일 권한 설정
  • SSH 키 생성 및 서버 등록
  • crontab으로 자동화 스케줄 설정

⚙ 서비스 & 프로세스 관리

  • systemctl start/stop/restart/reload 능숙하게 사용
  • journalctl로 서비스 로그 실시간 확인
  • ps aux / top / htop으로 프로세스 모니터링
  • kill / pkill로 프로세스 종료
  • nohup / screen / tmux 세션 관리

🏆 쉘 스크립트 & 자동화

  • 변수, 조건문, 반복문 활용 스크립트 작성
  • 함수 정의 및 재사용 가능한 스크립트 설계
  • 서버 헬스체크 + 슬랙 알림 스크립트 완성
  • crontab으로 정기 실행 자동화
  • 면접 Q&A 10개 답변 암기
🎉

InfraDevGuide0002 완료!

Linux 기초부터 쉘 스크립트 자동화까지
현업 인프라 엔지니어가 매일 쓰는 Linux 핵심 기술을 완전 마스터했습니다!

👉 다음 단계: InfraDevGuide0003

네트워크 기초 완전 정복 — OSI 7계층·TCP/IP·라우팅·방화벽·DNS까지

📚 11개 핵심 챕터
💻 25+ 실습 예제
📊 현업 필수 명령어 60+
🏆 면접 Q&A 10선

📚 InfraDevGuide Series | ToBeFullStackDev
🕐 최종 업데이트: 2026.03 | ★ 현업 인프라 엔지니어 기준 작성