동작하는 코드
예제 1: tar로 파일 묶기
# 연습용 파일 만들기
mkdir myproject
echo "메인 파일" > myproject/main.py
echo "설정 파일" > myproject/config.yaml
echo "README" > myproject/README.md
tar로 묶기(압축 없이):
tar -cf myproject.tar myproject/
ls -lh myproject.tar
출력:
-rw-r--r-- 1 dale staff 10K Jan 15 10:30 myproject.tar
아카이브 내용 확인:
tar -tf myproject.tar
출력:
myproject/
myproject/main.py
myproject/config.yaml
myproject/README.md
예제 2: gzip으로 압축까지
# 묶기 + gzip 압축 (-z 옵션)
tar -czf myproject.tar.gz myproject/
ls -lh myproject.tar.gz
출력:
-rw-r--r-- 1 dale staff 512B Jan 15 10:30 myproject.tar.gz
훨씬 작아졌습니다!
# 압축 풀기
tar -xzf myproject.tar.gz
# 다른 위치에 풀기
tar -xzf myproject.tar.gz -C /tmp/
예제 3: zip 형식
# zip 압축 (Windows/Mac 호환)
zip -r myproject.zip myproject/
# 압축 풀기
unzip myproject.zip
# 내용 확인
unzip -l myproject.zip
직접 수정하기
tar 옵션 완전 정복
tar는 옵션 조합이 복잡해 보이지만 패턴을 알면 쉽습니다:
tar [동작] [옵션] [아카이브명] [대상]
동작:
-c create (만들기)
-x extract (풀기)
-t list (목록 보기)
옵션:
-f 파일 이름 지정 (항상 필요)
-z gzip 압축 (.tar.gz)
-j bzip2 압축 (.tar.bz2)
-J xz 압축 (.tar.xz)
-v verbose (진행 상황 출력)
-C 압축 풀 디렉토리 지정
자주 쓰는 명령어:
# 압축 생성
tar -czf archive.tar.gz directory/ # gzip (.tar.gz)
tar -cjf archive.tar.bz2 directory/ # bzip2 (.tar.bz2)
tar -czf archive.tgz *.txt # 여러 파일
# 압축 풀기
tar -xzf archive.tar.gz
tar -xjf archive.tar.bz2
tar -xzf archive.tgz -C /target/dir/
# 내용 확인 (풀지 않고)
tar -tzf archive.tar.gz
tar -tjf archive.tar.bz2
# 진행 상황 보면서 생성/풀기
tar -czfv archive.tar.gz large-dir/
단일 파일 gzip 압축
tar는 여러 파일을 묶는 도구이고, gzip은 단일 파일을 압축합니다:
# 파일 압축 (원본이 .gz로 교체됨)
gzip large-file.log
ls
# large-file.log.gz
# 압축 해제
gunzip large-file.log.gz
# 또는
gzip -d large-file.log.gz
# 원본 유지하면서 압축
gzip -k large-file.log
# large-file.log (유지) + large-file.log.gz (새로 생성)
# 압축률 확인
gzip -l large-file.log.gz
bzip2와 xz: 더 높은 압축률
# bzip2 (gzip보다 압축률 높음, 느림)
bzip2 file.txt # → file.txt.bz2
bunzip2 file.txt.bz2 # → file.txt
# xz (가장 높은 압축률, 가장 느림)
xz file.txt # → file.txt.xz
unxz file.txt.xz # → file.txt
압축 형식 비교
| 형식 | 확장자 | 압축률 | 속도 | 호환성 |
| ----- | ------ | ------ | ---- | ------------------- |
| gzip | .gz | 보통 | 빠름 | 매우 좋음 |
| bzip2 | .bz2 | 좋음 | 중간 | 좋음 |
| xz | .xz | 최고 | 느림 | 보통 |
| zip | .zip | 보통 | 빠름 | 최고 (Windows 지원) |
실무에서 선택 기준:
- 리눅스/서버 배포:
.tar.gz - 매우 큰 파일:
.tar.xz - Windows 사용자와 공유:
.zip
"왜?" — 아카이브가 필요한 상황
시나리오 1: 서버 배포
# 프로젝트를 서버에 배포
tar -czf deploy-20260306.tar.gz \
--exclude='node_modules' \
--exclude='.git' \
myproject/
# 서버에 업로드 후 풀기
scp deploy-20260306.tar.gz user@server:/tmp/
ssh user@server "tar -xzf /tmp/deploy-20260306.tar.gz -C /var/www/"
시나리오 2: 로그 파일 보관
# 오래된 로그 압축 보관
tar -czf logs-2025.tar.gz /var/log/app/2025/
rm -r /var/log/app/2025/
# 용량 확인
du -sh logs-2025.tar.gz
시나리오 3: 소프트웨어 설치
# 오픈소스 소프트웨어 다운로드 후 설치
wget https://example.com/software-1.0.tar.gz
tar -xzf software-1.0.tar.gz
cd software-1.0/
./configure && make && sudo make install
흔한 실수
실수 1: tar 옵션 순서
# 잘못됨: -f 다음에 파일명이 와야 함
tar -fczv archive.tar.gz dir/ # -f가 먼저면 다음 인자를 파일명으로 봄
# 올바름: -f를 마지막 옵션으로 (또는 파일명 바로 앞)
tar -czvf archive.tar.gz dir/
실수 2: 절대 경로로 압축해서 해제 시 문제
# 위험: 절대 경로로 압축
tar -czf archive.tar.gz /etc/hosts
# 압축 해제 시 /etc/hosts를 덮어씌울 수 있음!
# 안전: 상대 경로 사용 또는 -C로 이동 후
cd /etc
tar -czf ~/archive.tar.gz hosts
실수 3: gzip으로 이미 압축된 파일 중복 압축
# 이미 .gz인 파일을 tar.gz로 만들 필요 없음
# .jpg, .mp4 같은 이미 압축된 형식도 마찬가지
tar -czf images.tar.gz *.jpg # 압축 효과 거의 없음
tar -cf images.tar *.jpg # 그냥 묶기만 하는 게 나음
심화 학습
tar에서 파일 제외하기
# 특정 파일/디렉토리 제외
tar -czf project.tar.gz project/ \
--exclude='project/node_modules' \
--exclude='project/.git' \
--exclude='*.log' \
--exclude='*.tmp'
배포용 아카이브를 만들 때 불필요한 파일을 제외합니다.
압축 파일 내 특정 파일만 추출
# 압축 내용 확인
tar -tzf archive.tar.gz
# 특정 파일만 추출
tar -xzf archive.tar.gz myproject/config.yaml
# 특정 패턴 파일만 추출
tar -xzf archive.tar.gz --wildcards '*.txt'
pigz로 병렬 압축 가속
# pigz 설치 (parallel gzip)
brew install pigz
# 병렬 압축 (CPU 코어 수만큼 빠름)
tar -I pigz -cf archive.tar.gz large-directory/
# 병렬 해제
tar -I pigz -xf archive.tar.gz
대용량 파일을 자주 압축한다면 pigz를 쓰면 속도가 크게 빨라집니다.
- 연습용 디렉토리를 만들고 파일을 몇 개 넣으세요.
tar -czf test.tar.gz 디렉토리/로 압축하세요.tar -tzf test.tar.gz로 내용을 확인하세요.- 다른 위치에
tar -xzf test.tar.gz -C /tmp/로 풀어보세요. gzip 파일명으로 단일 파일을 압축하고ls -lh로 크기를 비교해보세요.
Q1. tar -xzf archive.tar.gz에서 각 옵션의 의미가 올바른 것은?
- A)
-x만들기,-zgzip,-f파일 지정 - B)
-x풀기,-zgzip,-f파일 지정 - C)
-x확인,-z압축,-f강제 - D)
-x풀기,-zzip,-f파일 지정