우분투 실전 명령어 | tar gzip 압축 백업과 복원

우분투 실전 명령어 | tar gzip 압축 백업과 복원

운영 중인 디렉터리를 한 번에 묶어서 백업하거나, 전달받은 압축 파일을 빠르게 복원해야 할 때 tar가 가장 먼저 쓰입니다. 아래 명령만 익혀두면 로그 보관, 배포 전 스냅샷, 장애 복구까지 대부분 처리할 수 있습니다.

언제 쓰는가

  • 배포 전 현재 설정 파일/코드 디렉터리를 통째로 보관할 때
  • 서버에서 수집한 로그를 기간별로 묶어서 전달할 때
  • 다른 서버로 파일 트리를 그대로 옮길 때

바로 쓰는 명령어

# 1) 디렉터리 백업 (gzip 압축)
tar -czf app-backup-$(date +%F).tar.gz /srv/app

# 2) 압축 내용 확인 (복원 전 미리 점검)
tar -tzf app-backup-2026-02-19.tar.gz | head -n 20

# 3) 복원 (원래 경로 대신 /tmp/restore로 풀기)
mkdir -p /tmp/restore
tar -xzf app-backup-2026-02-19.tar.gz -C /tmp/restore
# 4) 특정 파일/패턴 제외하고 백업
sudo tar -czf etc-backup.tar.gz /etc \
  --exclude='/etc/ssl/private/*' \
  --exclude='*.swp'

# 5) 진행 상황을 보면서 백업 (파일명 출력)
tar -czvf logs-$(date +%F).tar.gz /var/log/nginx

핵심 옵션/패턴

  • -c: 새 아카이브 생성
  • -x: 아카이브 해제
  • -t: 아카이브 내부 목록 조회
  • -z: gzip 압축 사용
  • -f <파일명>: 아카이브 파일 지정
  • -C <경로>: 해당 경로로 이동한 뒤 작업
  • --exclude='패턴': 제외 규칙 지정

명령 출력 예시

$ tar -tzf app-backup-2026-02-19.tar.gz | head -n 5
srv/app/
srv/app/.env
srv/app/docker-compose.yml
srv/app/nginx/
srv/app/nginx/default.conf
$ tar -xzf app-backup-2026-02-19.tar.gz -C /tmp/restore
# (정상 종료 시 별도 에러 메시지 없음)

자주 하는 실수

  • 상대 경로/절대 경로를 헷갈려서 복원 위치가 꼬임
    • -C를 항상 명시하고, 복원 전에 대상 디렉터리를 먼저 확인하는 습관이 안전합니다.
  • 실행 중인 서비스의 데이터 디렉터리를 그대로 백업해 파일 일관성이 깨짐
    • DB나 상태 파일은 서비스 정지/스냅샷 후 백업하거나, 서비스별 백업 도구를 병행하세요.
  • sudo 없이 시스템 경로를 백업해 일부 파일이 누락됨
    • /etc, /var/log 같은 경로는 권한 오류 로그를 꼭 확인해야 합니다.

검증 방법

# 1) 아카이브 무결성 기본 점검 (목록 조회가 되면 최소 구조는 정상)
tar -tzf app-backup-2026-02-19.tar.gz >/dev/null && echo "OK"

# 2) 복원 후 파일 개수 비교
find /srv/app -type f | wc -l
find /tmp/restore/srv/app -type f | wc -l

# 3) 중요한 파일 존재 확인
test -f /tmp/restore/srv/app/docker-compose.yml && echo "compose found"

운영 팁

  • 백업 파일명에 날짜를 넣고(YYYY-MM-DD), 보관 기간 정책을 미리 정해 두면 운영이 깔끔해집니다.
  • 대용량 백업은 nice, ionice와 함께 돌려 서비스 영향도를 낮추세요.
  • 복구 훈련 없는 백업은 거의 무의미합니다. 월 1회는 샘플 복원을 실제로 해보는 걸 권장합니다.

출처

  • GNU tar Manual
  • Ubuntu Server Guide
  • The Linux Documentation Project