RHCSA 5일차

Chapter 3. Basic Commands & Simple Shell Scripts

Jun Noh

사실, AI한테 리눅스 명령어를 물어보는건 책의 내용을 입력하나 안하나 동일하게 잘 나온다.

워낙 기초부터 하고 있으니까…

하지만 이제는 책의 커리큘럼이라는 단단한 뼈대 위에서 논리적으로 학습이 진행되는 기분이다.

진행률이 잘 보인달까…

오늘의 주제는 Chapter 3: Basic Commands & Simple Shell Scripts이다.

리눅스의 기초 중의 기초지만, 늘 아무것도 없이 해봐라. 라고하면, 조금씩 멈추는 구간들이 분명히 있어왔다.

1. 뼈대가 되는 핵심 명령어

CategoryCommandOption/UsageDescription
Filesystemls-l, -a, -R파일 목록 확인 (상세, 숨김, 재귀적)
mkdir-p하위 경로까지 한 번에 생성
rm-r, -f삭제 (디렉터리, 강제)
Archivingtar-czf, -xzf아카이브 생성 및 압축 해제
Verificationtar-tf풀지 않고 내부 목록만 미리 보기 (중요!)
Permissionchmod+x, 755스크립트 실행 권한 부여

tar -tf는 정말 요긴하다. 압축을 풀기 전에 내용물을 확인하는 습관은 서버 용량 관리의 기본이다.

2. 쉘 스크립트

A. 변수와 치환

  • Shebang: #!/bin/bash는 스크립트의 정체성이다.
  • 공백 주의: VAR="value" (O), VAR = "value" (X). 리눅스는 공백에 예민한 녀석이다.
  • 명령어 치환: DATE=$(date) 처럼 결과값을 변수에 담는 테크닉은 자동화의 핵심이다.

B. 조건문(if)과 반복문(for)

가장 삽질을 많이 했던 구간이다.

if [ -d "$DIR" ]; then
    echo "Exists"
fi

삽질 포인트: if [ 뒤에 공백을 안 줬더니 바로 command not found 에러가 떴다.

여기서 [는 단순한 기호가 아니라 test라는 이름의 명령어였다.

명령어나 인자 사이에 공백을 주는 건 선택이 아니라 필수다.

3. 미션 리뷰

Gemini 강사님이 던져준 미션은 단순하지 않았다.

“책에는 이렇게 나와 있지만, 당신은 이렇게 해보세요”라는 식이었다.

Mission: 백업 자동화 스크립트 만들기

rhcsa_lab 디렉터리를 압축 백업하고, 제대로 생성됐는지 검증하는 스크립트를 짜야 했다.

내가 저지른 주요 실수들 (Pitfalls):

  1. 변수명 오타: ${BAKCUP_FILE}이라고 적어놓고 왜 백업 파일이 안 생기는지 한참 로그를 뒤졌다.. 변수가 없으면 null로 써버린다. 에러도 안뜬다.
  2. 경로 의존성: SOURCE_DIR=$(pwd)로 잡았더니, 스크립트를 어디서 실행하느냐에 따라 백업 대상이 바뀌어버렸다. 절대 경로로 씁시다.
  3. 재귀적 백업 (Recursive Loop): 백업 파일을 원본 폴더 안에 저장하는 바보 같은 짓을 했다. 백업 파일이 자기 자신을 포함하며 용량이 무한 증식할 뻔했다.

4. 최종 답안

피드백을 모두 반영하여 완성한, 엔지니어의 습관이 담긴 모범 답안이다.

#!/bin/bash

# 1. 절대 경로 사용으로 실행 위치 독립성 확보
BASE_DIR="$HOME"
SOURCE_DIR="$BASE_DIR/rhcsa_lab"
DEST_DIR="$BASE_DIR/backups"
BACKUP_FILE="$DEST_DIR/archive.tar.gz"

# 2. 안전 장치: 디렉터리 존재 여부 확인
if [ ! -d "$DEST_DIR" ]; then
    mkdir -p "$DEST_DIR"
fi

if [ ! -d "$SOURCE_DIR" ]; then
    echo "[Error] Source directory not found!"
    exit 1
fi

# 3. 실행 및 에러 핸들링
echo "Archiving..."
tar -czf "$BACKUP_FILE" "$SOURCE_DIR" 2> /dev/null

# 4. 검증 (Verification)
if [ -f "$BACKUP_FILE" ]; then
    echo "[OK] Backup created at: $BACKUP_FILE"
    # 내부 목록 3줄만 확인해서 진짜 압축됐는지 검증
    tar -tf "$BACKUP_FILE" | head -3
else
    echo "[FAIL] Backup creation failed."
    exit 1
fi

마침.

다른 글 보기