RHCSA 5일차
Chapter 3. Basic Commands & Simple Shell Scripts
Jun Noh
사실, AI한테 리눅스 명령어를 물어보는건 책의 내용을 입력하나 안하나 동일하게 잘 나온다.
워낙 기초부터 하고 있으니까…
하지만 이제는 책의 커리큘럼이라는 단단한 뼈대 위에서 논리적으로 학습이 진행되는 기분이다.
진행률이 잘 보인달까…
오늘의 주제는 Chapter 3: Basic Commands & Simple Shell Scripts이다.
리눅스의 기초 중의 기초지만, 늘 아무것도 없이 해봐라. 라고하면, 조금씩 멈추는 구간들이 분명히 있어왔다.
1. 뼈대가 되는 핵심 명령어
| Category | Command | Option/Usage | Description |
|---|---|---|---|
| Filesystem | ls | -l, -a, -R | 파일 목록 확인 (상세, 숨김, 재귀적) |
mkdir | -p | 하위 경로까지 한 번에 생성 | |
rm | -r, -f | 삭제 (디렉터리, 강제) | |
| Archiving | tar | -czf, -xzf | 아카이브 생성 및 압축 해제 |
| Verification | tar | -tf | 풀지 않고 내부 목록만 미리 보기 (중요!) |
| Permission | chmod | +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):
- 변수명 오타:
${BAKCUP_FILE}이라고 적어놓고 왜 백업 파일이 안 생기는지 한참 로그를 뒤졌다.. 변수가 없으면 null로 써버린다. 에러도 안뜬다. - 경로 의존성:
SOURCE_DIR=$(pwd)로 잡았더니, 스크립트를 어디서 실행하느냐에 따라 백업 대상이 바뀌어버렸다. 절대 경로로 씁시다. - 재귀적 백업 (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
마침.