리눅스에서 파일을 백업하거나 여러 파일을 하나로 묶어야 할 때 가장 먼저 떠오르는 도구가 바로 tar입니다. tar(Tape Archive)는 여러 파일과 디렉토리를 하나의 아카이브 파일로 만들고, 압축까지 함께 처리할 수 있는 강력한 명령어입니다. 이번 포스트에서는 tar의 기초부터 실무 활용까지 상세히 알아보겠습니다.
tar란 무엇인가?
tar는 원래 테이프 백업을 위해 만들어진 유닉스 유틸리티로, 여러 파일과 디렉토리를 하나의 아카이브 파일로 묶는 도구입니다. 현재는 파일 압축, 백업, 배포 등 다양한 용도로 사용됩니다.
tar의 주요 특징
- 아카이빙: 여러 파일을 하나로 묶기
- 압축 통합: gzip, bzip2, xz 등 다양한 압축 포맷 지원
- 권한 보존: 파일 권한, 소유자, 타임스탬프 유지
- 증분 백업: 변경된 파일만 백업 가능
- 원격 아카이브: SSH를 통한 원격 백업 지원
아카이브 vs 압축
# 아카이브만 (압축 없음)
file.tar # 여러 파일을 하나로 묶기만 함
# 아카이브 + 압축
file.tar.gz # tar + gzip 압축
file.tar.bz2 # tar + bzip2 압축
file.tar.xz # tar + xz 압축
기본 개념과 동작 원리
tar 파일 구조
tar 파일은 헤더와 데이터로 구성됩니다:
[파일1 헤더][파일1 데이터][파일2 헤더][파일2 데이터]...
각 헤더에는 파일명, 크기, 권한, 타임스탬프 등의 메타데이터가 포함됩니다.
기본 문법
tar [옵션] [아카이브파일] [파일/디렉토리...]
핵심 옵션 (주요 모드)
-c, --create # 새 아카이브 생성
-x, --extract # 아카이브 추출
-t, --list # 아카이브 내용 목록 보기
-r, --append # 아카이브에 파일 추가
-u, --update # 변경된 파일만 업데이트
일반적인 옵션
-f, --file # 아카이브 파일명 지정 (필수)
-v, --verbose # 상세 정보 출력
-z, --gzip # gzip 압축 사용
-j, --bzip2 # bzip2 압축 사용
-J, --xz # xz 압축 사용
-C, --directory # 지정한 디렉토리로 이동
-p, --preserve # 권한 정보 보존
기본 사용법
1. 아카이브 생성하기
기본 아카이브 (압축 없음)
# 단일 파일 아카이브
tar -cf archive.tar file.txt
# 여러 파일 아카이브
tar -cf archive.tar file1.txt file2.txt file3.txt
# 디렉토리 전체 아카이브
tar -cf project.tar myproject/
# 여러 디렉토리와 파일
tar -cf backup.tar dir1/ dir2/ file.txt
# 상세 정보와 함께 (-v 옵션)
tar -cvf archive.tar myproject/
gzip 압축 아카이브
gzip은 가장 널리 사용되는 압축 방식으로, 속도와 압축률의 균형이 좋습니다.
# gzip 압축 아카이브 생성
tar -czf archive.tar.gz myproject/
# 상세 정보와 함께
tar -czvf backup.tar.gz documents/
# 여러 항목 압축
tar -czf data.tar.gz data1/ data2/ config.txt
bzip2 압축 아카이브
bzip2는 gzip보다 압축률이 높지만 느립니다.
# bzip2 압축 아카이브 생성
tar -cjf archive.tar.bz2 myproject/
# 상세 정보와 함께
tar -cjvf backup.tar.bz2 documents/
xz 압축 아카이브
xz는 가장 높은 압축률을 제공하지만 가장 느립니다.
# xz 압축 아카이브 생성
tar -cJf archive.tar.xz myproject/
# 상세 정보와 함께
tar -cJvf backup.tar.xz documents/
2. 아카이브 추출하기
기본 추출
# 현재 디렉토리에 추출
tar -xf archive.tar
# gzip 압축 파일 추출
tar -xzf archive.tar.gz
# bzip2 압축 파일 추출
tar -xjf archive.tar.bz2
# xz 압축 파일 추출
tar -xJf archive.tar.xz
# 상세 정보와 함께
tar -xzvf archive.tar.gz
특정 디렉토리에 추출
# -C 옵션으로 대상 디렉토리 지정
tar -xzf archive.tar.gz -C /destination/path/
# 대상 디렉토리가 없으면 생성 후 추출
mkdir -p extracted/
tar -xzf backup.tar.gz -C extracted/
특정 파일만 추출
# 단일 파일 추출
tar -xzf archive.tar.gz path/to/file.txt
# 여러 파일 추출
tar -xzf archive.tar.gz file1.txt file2.txt
# 패턴으로 추출
tar -xzf archive.tar.gz --wildcards '*.txt'
# 특정 디렉토리만 추출
tar -xzf backup.tar.gz myproject/src/
3. 아카이브 내용 확인하기
# 파일 목록 보기
tar -tf archive.tar
# gzip 파일 목록 상세 보기
tar -tzvf archive.tar.gz
# bzip2 파일 목록 보기
tar -tjvf archive.tar.bz2
# 특정 파일 찾기
tar -tzf archive.tar.gz | grep "config"
# 파일 개수 확인
tar -tzf archive.tar.gz | wc -l
고급 옵션과 활용
1. 파일 제외하기
# 특정 파일 제외
tar -czf backup.tar.gz --exclude='*.log' myproject/
# 여러 패턴 제외
tar -czf backup.tar.gz \
--exclude='*.log' \
--exclude='*.tmp' \
--exclude='node_modules' \
myproject/
# 디렉토리 제외
tar -czf backup.tar.gz --exclude='cache' --exclude='temp' project/
# 제외 파일 목록 사용
echo "*.log" > exclude.txt
echo "*.tmp" >> exclude.txt
tar -czf backup.tar.gz --exclude-from=exclude.txt project/
# 숨김 파일 제외
tar -czf backup.tar.gz --exclude='.*' project/
2. 증분 백업
변경된 파일만 백업하는 증분 백업 기능입니다.
# 전체 백업 (스냅샷 생성)
tar -czf full-backup.tar.gz --listed-incremental=snapshot.snar project/
# 증분 백업 (변경된 파일만)
tar -czf incremental-backup.tar.gz --listed-incremental=snapshot.snar project/
# 복원 시 순서대로 복원 필요
tar -xzf full-backup.tar.gz
tar -xzf incremental-backup.tar.gz
3. 권한과 속성 보존
# 권한 보존
tar -czpf archive.tar.gz project/
# -p 옵션: 파일 권한 보존
# 소유자 정보 보존
tar -czf archive.tar.gz --preserve-permissions project/
# 모든 속성 보존
tar -czpf archive.tar.gz --same-owner project/
# SELinux 컨텍스트 보존
tar -czf archive.tar.gz --selinux project/
# 확장 속성 보존
tar -czf archive.tar.gz --xattrs project/
4. 아카이브 업데이트
# 기존 아카이브에 파일 추가
tar -rf archive.tar newfile.txt
# 변경된 파일만 업데이트
tar -uf archive.tar modifiedfile.txt
# 압축 파일은 업데이트 불가
# 해결책: 압축 해제 → 업데이트 → 재압축
gunzip archive.tar.gz
tar -rf archive.tar newfile.txt
gzip archive.tar
5. 아카이브 분할
대용량 파일을 여러 개로 분할합니다.
# 100MB 단위로 분할
tar -czf - largedir/ | split -b 100M - backup.tar.gz.
# 결과: backup.tar.gz.aa, backup.tar.gz.ab, backup.tar.gz.ac...
# 분할된 파일 합치기
cat backup.tar.gz.* | tar -xzf -
6. 압축 레벨 조정
# gzip 압축 레벨 (1-9, 기본값 6)
tar -czf archive.tar.gz --gzip project/
GZIP=-9 tar -czf archive.tar.gz project/ # 최대 압축
# bzip2 압축 레벨 (1-9, 기본값 9)
BZIP2=-1 tar -cjf archive.tar.bz2 project/ # 빠른 압축
BZIP2=-9 tar -cjf archive.tar.bz2 project/ # 최대 압축
# xz 압축 레벨 (0-9, 기본값 6)
XZ_OPT=-0 tar -cJf archive.tar.xz project/ # 빠른 압축
XZ_OPT=-9 tar -cJf archive.tar.xz project/ # 최대 압축
7. 진행 상황 표시
# pv(pipe viewer) 사용
tar -czf - project/ | pv > backup.tar.gz
# 파일 수 표시
tar -czvf backup.tar.gz project/ | wc -l
# 진행률 표시 (GNU tar 1.30+)
tar -czf backup.tar.gz --checkpoint=1000 --checkpoint-action=dot project/
실전 활용 예제
1. 프로젝트 백업
소스 코드 백업
# 기본 프로젝트 백업
tar -czf project-backup-$(date +%Y%m%d).tar.gz myproject/
# node_modules 제외
tar -czf project-backup.tar.gz --exclude='node_modules' --exclude='.git' myproject/
# Python 프로젝트 백업 (가상환경 제외)
tar -czf python-project.tar.gz \
--exclude='venv' \
--exclude='__pycache__' \
--exclude='*.pyc' \
python-project/
# 빌드 파일 제외
tar -czf source-backup.tar.gz \
--exclude='dist' \
--exclude='build' \
--exclude='*.o' \
project/
설정 파일 백업
# 홈 디렉토리 설정 백업
tar -czf dotfiles-$(date +%Y%m%d).tar.gz \
~/.bashrc \
~/.vimrc \
~/.gitconfig \
~/.ssh/config
# 프로젝트 설정만 백업
tar -czf config-backup.tar.gz project/config/
2. 데이터 백업
문서 백업
# 문서 디렉토리 백업
tar -czf documents-backup-$(date +%Y%m%d).tar.gz ~/documents/
# 최근 7일 수정된 파일만 백업
find ~/documents -mtime -7 -type f -print0 | \
tar -czf recent-docs.tar.gz --null -T -
# 특정 확장자만 백업
tar -czf text-backup.tar.gz $(find . -name "*.txt" -o -name "*.md")
데이터베이스 백업
# MySQL 덤프와 함께 압축
mysqldump -u user -p database > db.sql
tar -czf db-backup-$(date +%Y%m%d).tar.gz db.sql
# PostgreSQL 백업
pg_dump dbname > db.sql
tar -czf postgres-backup-$(date +%Y%m%d).tar.gz db.sql
# 여러 데이터베이스 백업
mkdir -p db-backups
mysqldump db1 > db-backups/db1.sql
mysqldump db2 > db-backups/db2.sql
tar -czf all-databases-$(date +%Y%m%d).tar.gz db-backups/
3. 로그 파일 관리
# 로그 파일 아카이브
tar -czf logs-$(date +%Y%m%d).tar.gz logs/*.log
# 오래된 로그만 압축
find logs/ -name "*.log" -mtime +30 -print0 | \
tar -czf old-logs.tar.gz --null -T -
# 월별 로그 아카이브
tar -czf logs-$(date +%Y-%m).tar.gz logs/$(date +%Y-%m)-*.log
4. 웹사이트 백업
# 전체 사이트 백업
tar -czf website-backup-$(date +%Y%m%d).tar.gz \
--exclude='cache' \
--exclude='sessions' \
website/
# 업로드 파일만 백업
tar -czf uploads-backup.tar.gz website/uploads/
# 테마와 플러그인 백업
tar -czf themes-plugins-backup.tar.gz \
website/themes/ \
website/plugins/
5. 배포 패키지 만들기
# 릴리스 패키지 생성
tar -czf myapp-v1.0.0.tar.gz \
--exclude='.git' \
--exclude='tests' \
--exclude='docs' \
myapp/
# 버전 정보 포함
VERSION=$(cat VERSION)
tar -czf myapp-${VERSION}.tar.gz myapp/
# 체크섬 파일 포함
cd myapp
find . -type f -exec md5sum {} \; > checksums.txt
cd ..
tar -czf myapp-release.tar.gz myapp/
압축 포맷 비교
속도와 압축률 비교
# 테스트용 대용량 디렉토리 생성
mkdir -p testdir
cp -r /some/large/directory testdir/
# 압축 없음
time tar -cf test.tar testdir/
# gzip (빠른 속도, 중간 압축률)
time tar -czf test.tar.gz testdir/
# bzip2 (중간 속도, 높은 압축률)
time tar -cjf test.tar.bz2 testdir/
# xz (느린 속도, 최고 압축률)
time tar -cJf test.tar.xz testdir/
# 크기 비교
ls -lh test.tar*
일반적인 압축률 비교
파일 타입 | 압축 없음 | gzip | bzip2 | xz
텍스트 파일 | 100% | 30% | 25% | 20%
바이너리 | 100% | 70% | 65% | 60%
이미 압축된 것 | 100% | 95% | 95% | 95%
용도별 추천 포맷
# 빠른 백업 (속도 우선)
tar -czf quick-backup.tar.gz project/
# 배포용 (호환성 우선)
tar -czf release.tar.gz app/
# 장기 보관 (압축률 우선)
tar -cJf archive.tar.xz olddata/
# 대용량 전송 (균형)
tar -cjf transfer.tar.bz2 data/
원격 백업
SSH를 통한 원격 백업
# 로컬에서 압축하여 원격 서버로 전송
tar -czf - project/ | ssh user@remote "cat > backup.tar.gz"
# 원격 서버의 파일을 로컬로 백업
ssh user@remote "tar -czf - /remote/path" > local-backup.tar.gz
# 원격에서 직접 압축하여 저장
ssh user@remote "tar -czf backup.tar.gz project/"
# rsync와 조합
tar -czf - project/ | ssh user@remote "tar -xzf - -C /destination/"
네트워크를 통한 직접 전송
# 수신측 (서버)
nc -l 9999 | tar -xzf -
# 송신측 (클라이언트)
tar -czf - project/ | nc server 9999
아카이브 검증 및 관리
아카이브 무결성 확인
# 아카이브 테스트
tar -tzf archive.tar.gz > /dev/null
echo $? # 0이면 정상
# 상세 검증
tar -tzvf archive.tar.gz
# gzip 무결성 검사
gzip -t archive.tar.gz
# 체크섬 생성
md5sum backup.tar.gz > backup.tar.gz.md5
# 체크섬 검증
md5sum -c backup.tar.gz.md5
아카이브 비교
# 두 아카이브 비교
diff <(tar -tf archive1.tar | sort) <(tar -tf archive2.tar | sort)
# 파일 시스템과 비교
tar -df archive.tar.gz
# 변경된 파일만 표시
tar -df archive.tar.gz | grep "Mod time differs"
아카이브 정보 확인
# 압축률 확인
tar -tzf archive.tar.gz | wc -l # 파일 개수
du -h archive.tar.gz # 압축 후 크기
# 압축 전 크기 추정
tar -tzf archive.tar.gz --totals
# 아카이브 내 큰 파일 찾기
tar -tzvf archive.tar.gz | sort -k3 -rn | head
자동화 스크립트
일일 백업 스크립트
#!/bin/bash
# daily-backup.sh
# 설정
BACKUP_DIR="backups"
SOURCE_DIR="project"
DATE=$(date +%Y%m%d)
RETENTION_DAYS=7
# 백업 디렉토리 생성
mkdir -p $BACKUP_DIR
# 백업 실행
tar -czf $BACKUP_DIR/backup-$DATE.tar.gz \
--exclude='*.log' \
--exclude='temp' \
$SOURCE_DIR
# 오래된 백업 삭제
find $BACKUP_DIR -name "backup-*.tar.gz" -mtime +$RETENTION_DAYS -delete
# 로그 기록
echo "$(date): Backup completed - backup-$DATE.tar.gz" >> backup.log
주간 백업 스크립트
#!/bin/bash
# weekly-backup.sh
BACKUP_DIR="weekly-backups"
DATE=$(date +%Y-week-%V)
SOURCES=("documents" "projects" "config")
mkdir -p $BACKUP_DIR
for source in "${SOURCES[@]}"; do
if [ -d "$source" ]; then
echo "Backing up $source..."
tar -czf $BACKUP_DIR/${source}-${DATE}.tar.gz $source/
fi
done
# 4주 이상 된 백업 삭제
find $BACKUP_DIR -name "*.tar.gz" -mtime +28 -delete
echo "Weekly backup completed: $DATE"
증분 백업 스크립트
#!/bin/bash
# incremental-backup.sh
BACKUP_DIR="incremental-backups"
SOURCE_DIR="data"
SNAPSHOT_FILE="snapshot.snar"
DATE=$(date +%Y%m%d-%H%M%S)
mkdir -p $BACKUP_DIR
if [ ! -f "$SNAPSHOT_FILE" ]; then
# 전체 백업
echo "Creating full backup..."
tar -czf $BACKUP_DIR/full-$DATE.tar.gz \
--listed-incremental=$SNAPSHOT_FILE \
$SOURCE_DIR
else
# 증분 백업
echo "Creating incremental backup..."
tar -czf $BACKUP_DIR/inc-$DATE.tar.gz \
--listed-incremental=$SNAPSHOT_FILE \
$SOURCE_DIR
fi
echo "Backup completed: $(ls -lh $BACKUP_DIR/*-$DATE.tar.gz)"
조건부 백업 스크립트
#!/bin/bash
# conditional-backup.sh
BACKUP_FILE="backup-$(date +%Y%m%d).tar.gz"
SOURCE_DIR="project"
LAST_BACKUP="last-backup.txt"
# 마지막 백업 이후 변경 확인
if [ -f "$LAST_BACKUP" ]; then
CHANGED=$(find $SOURCE_DIR -newer $LAST_BACKUP -type f | wc -l)
if [ $CHANGED -eq 0 ]; then
echo "No changes detected. Skipping backup."
exit 0
fi
echo "Found $CHANGED changed files. Creating backup..."
fi
# 백업 실행
tar -czf $BACKUP_FILE $SOURCE_DIR/
# 백업 시간 기록
touch $LAST_BACKUP
echo "Backup completed: $BACKUP_FILE"
일반적인 실수와 해결책
1. 절대 경로 vs 상대 경로
# 문제: 절대 경로로 압축
cd /
tar -czf backup.tar.gz /home/user/project
# 추출 시 전체 경로가 생성됨: /home/user/project
# 해결책 1: 상대 경로 사용
cd /home/user
tar -czf backup.tar.gz project/
# 해결책 2: -C 옵션 사용
tar -czf backup.tar.gz -C /home/user project/
# 추출 시 절대 경로 제거
tar -xzf backup.tar.gz --strip-components=3
2. 압축 옵션 누락
# 문제: .tar.gz인데 -z 옵션 없음
tar -cf backup.tar.gz project/ # 압축되지 않음!
# 해결책: 올바른 옵션 사용
tar -czf backup.tar.gz project/
# 또는: 자동 감지 (GNU tar)
tar -caf backup.tar.gz project/
3. 디스크 공간 부족
# 문제: 압축 중 디스크 공간 부족
tar -czf huge-backup.tar.gz large-directory/
# 해결책 1: 파이프로 직접 전송
tar -czf - large-directory/ | ssh remote "cat > backup.tar.gz"
# 해결책 2: 분할 압축
tar -czf - large-directory/ | split -b 1G - backup.tar.gz.
# 해결책 3: 다른 디스크에 저장
tar -czf /mnt/external/backup.tar.gz large-directory/
4. 심볼릭 링크 처리
# 문제: 심볼릭 링크가 깨짐
tar -czf backup.tar.gz project/ # 링크가 일반 파일로 변환될 수 있음
# 해결책 1: 링크 보존
tar -czf backup.tar.gz -h project/ # 링크를 따라가서 실제 파일 저장
# 해결책 2: 링크 그대로 유지
tar -czf backup.tar.gz --dereference project/
5. 권한 문제
# 문제: 추출 시 권한 에러
tar -xzf backup.tar.gz
# tar: Cannot change ownership: Operation not permitted
# 해결책: 권한 무시
tar -xzf backup.tar.gz --no-same-owner
# 또는: 권한 보존 안함
tar -xzf backup.tar.gz --no-same-permissions
6. 인코딩 문제
# 문제: 한글 파일명 깨짐
tar -czf backup.tar.gz 한글파일.txt
# 해결책: 로케일 설정
LANG=ko_KR.UTF-8 tar -czf backup.tar.gz 한글파일.txt
# 추출 시에도 동일한 로케일
LANG=ko_KR.UTF-8 tar -xzf backup.tar.gz
성능 최적화
1. 병렬 압축
# pigz 사용 (병렬 gzip)
tar -cf - project/ | pigz > backup.tar.gz
# 추출도 병렬로
pigz -dc backup.tar.gz | tar -xf -
# pbzip2 사용 (병렬 bzip2)
tar -cf - project/ | pbzip2 > backup.tar.bz2
# pxz 사용 (병렬 xz)
tar -cf - project/ | pxz > backup.tar.xz
2. 버퍼 크기 조정
# 큰 버퍼로 성능 향상
tar -czf backup.tar.gz --blocking-factor=20 project/
# 네트워크 전송 시 버퍼링
tar -czf - project/ | pv -B 1M | ssh remote "cat > backup.tar.gz"
3. 제외 패턴 최적화
# 비효율적: 많은 --exclude 옵션
tar -czf backup.tar.gz \
--exclude='file1' \
--exclude='file2' \
--exclude='file3' \
project/
# 효율적: exclude 파일 사용
cat > exclude.txt << EOF
*.log
*.tmp
node_modules
.git
EOF
tar -czf backup.tar.gz --exclude-from=exclude.txt project/
고급 기능
1. 다중 볼륨 아카이브
# 1GB 단위로 분할
tar -czf backup.tar.gz -M --tape-length=1024 project/
# DVD 크기로 분할 (4.7GB)
tar -czf backup.tar.gz -L 4812800 project/
2. 암호화된 아카이브
# gpg로 암호화
tar -czf - project/ | gpg -c > backup.tar.gz.gpg
# 복호화 및 추출
gpg -d backup.tar.gz.gpg | tar -xzf -
# openssl로 암호화
tar -czf - project/ | openssl enc -aes-256-cbc -salt -out backup.tar.gz.enc
# 복호화
openssl enc -aes-256-cbc -d -in backup.tar.gz.enc | tar -xzf -
3. 필터와 변환
# 압축하면서 파일 변환
tar -czf backup.tar.gz --transform='s/old/new/' project/
# 파일명에 prefix 추가
tar -czf backup.tar.gz --transform='s|^|backup-|' project/
# 대소문자 변경
tar -czf backup.tar.gz --transform='s/.*/\L&/' project/
모니터링과 로깅
백업 상태 확인
# 진행 상황 표시
tar -czf backup.tar.gz --checkpoint=1000 --checkpoint-action=echo project/
# 진행률 퍼센트 표시
tar -czf - project/ | pv -s $(du -sb project/ | awk '{print $1}') > backup.tar.gz
# 로그 파일 기록
tar -czvf backup.tar.gz project/ 2>&1 | tee backup.log
에러 처리
# 에러 무시하고 계속
tar -czf backup.tar.gz --ignore-failed-read project/
# 에러 발생 시 중단하지 않음
tar -czf backup.tar.gz --warning=no-file-changed project/
# 에러만 로그
tar -czf backup.tar.gz project/ 2> error.log
유용한 tar 원라이너
# 가장 큰 파일 10개 찾기
tar -tzvf backup.tar.gz | sort -k3 -rn | head -10
# 특정 날짜 이후 파일만 압축
find . -type f -newermt "2024-01-01" -print0 | tar -czf recent.tar.gz --null -T -
# 디렉토리 구조만 복사
tar -cf - source/ | (cd dest/ && tar -xf -)
# 압축 없이 빠른 복사
tar -cf - source/ | tar -xf - -C dest/
# 아카이브 크기 추정
tar -czf - project/ | wc -c
# 중복 파일 제거하며 압축
tar -czf backup.tar.gz --exclude-caches project/
# 마지막 수정 시간 기준 정렬
tar -tzvf backup.tar.gz | sort -k4,5
# 확장자별 개수
tar -tzf backup.tar.gz | grep -o '\.[^.]*$' | sort | uniq -c
# 빈 디렉토리 제외
tar -czf backup.tar.gz --exclude-vcs --exclude-vcs-ignores project/
# 아카이브 비교
diff <(tar -tzf backup1.tar.gz | sort) <(tar -tzf backup2.tar.gz | sort)
실무 체크리스트
백업 실행 전
# 1. 백업 대상 크기 확인
du -sh project/
# 2. 디스크 공간 확인
df -h
# 3. 테스트 압축 (작은 샘플)
tar -czf test.tar.gz project/sample/
# 4. 제외 패턴 검증
tar -czf - --exclude='*.log' project/ | tar -t | grep '.log'
# 5. 백업 계획 검토
echo "백업 시작: $(date)" >> backup.log
백업 실행 후
# 1. 아카이브 무결성 검사
tar -tzf backup.tar.gz > /dev/null
# 2. 파일 개수 확인
echo "Files: $(tar -tzf backup.tar.gz | wc -l)"
# 3. 압축률 확인
echo "Size: $(du -h backup.tar.gz)"
# 4. 체크섬 생성
sha256sum backup.tar.gz > backup.tar.gz.sha256
# 5. 로그 기록
echo "백업 완료: $(date)" >> backup.log
복원 테스트
# 1. 테스트 디렉토리에 추출
mkdir -p test-restore
tar -xzf backup.tar.gz -C test-restore/
# 2. 파일 개수 비교
echo "Original: $(find project -type f | wc -l)"
echo "Restored: $(find test-restore -type f | wc -l)"
# 3. 내용 비교 (선택적)
diff -r project/ test-restore/project/
# 4. 권한 확인
ls -la test-restore/project/
# 5. 정리
rm -rf test-restore/
마무리
tar는 리눅스에서 가장 기본적이면서도 강력한 아카이브 도구입니다. 단순히 파일을 묶는 것부터 복잡한 백업 전략까지, tar를 마스터하면 데이터 관리와 백업 작업을 효율적으로 수행할 수 있습니다.
tar 마스터를 위한 학습 로드맵:
- 기본 생성/추출/목록 보기 (c, x, t) 마스터
- 압축 옵션 (z, j, J) 이해와 선택
- 제외 패턴과 필터링 활용
- 백업 자동화 스크립트 작성
- 원격 백업과 고급 기능 실습
- 실전 백업 전략 수립
핵심 팁:
- 항상 테스트: 중요한 데이터는 복원 테스트 필수
- 압축 포맷 선택: 용도에 맞는 압축 방식 사용
- 제외 패턴: 불필요한 파일은 백업에서 제외
- 자동화: 정기 백업은 스크립트와 cron으로 자동화
- 검증: 백업 후 무결성 검사와 체크섬 생성
백업은 “만약을 위한” 것이 아니라 “언젠가 필요할” 필수 작업입니다. tar를 효과적으로 활용하여 안전한 데이터 관리 체계를 구축하세요!