1. tar: 리눅스/유닉스에서 파일 묶을 때

tar는 원래 ‘테이프 아카이브(Tape Archive)’의 약자로, 여러 파일을 하나로 묶는 도구입니다. 중요한 점은 tar 자체는 압축을 하지 않고 단지 여러 파일을 하나의 파일로 묶기만 한다는 것입니다.

tar의 다양한 옵션들

tar 명령어는 정말, 정말 다양한 옵션이 있어요. 아래 옵션들을 잘 조합하면 거의 모든 압축 작업을 해결할 수 있답니다.

# 자주 사용하는 tar 옵션들
-c : 새 아카이브 만들기 (create)
-x : 아카이브 풀기 (extract)
-t : 아카이브 내용 보기 (list)
-f : 파일 이름 지정 (file) - 거의 항상 필요한 옵션!
-v : 진행 상황 자세히 보기 (verbose)
-z : gzip으로 압축/해제 (for .tar.gz)
-j : bzip2로 압축/해제 (for .tar.bz2)
-J : xz로 압축/해제 (for .tar.xz)
-P : 절대 경로 유지 (주의해서 사용!)
-r : 아카이브에 파일 추가 (append)
-u : 아카이브에 파일 업데이트 (newer files only)
--exclude : 특정 파일/디렉토리 제외
--wildcards : 와일드카드 패턴 사용 가능

기본 tar 명령어

자, 이제 tar 명령어를 한번 같이 살펴볼까요? 처음엔 복잡해 보여도 몇 번만 사용해보면 금방 익숙해집니다.

# 여러 파일을 하나의 tar 파일로 묶기
tar -cf archive.tar file1 file2 directory1

# tar 파일 내용 확인하기
tar -tf archive.tar

# tar 파일 풀기
tar -xf archive.tar

tar 활용 예시를 볼까요?

일상에서 자주 마주치는 상황들을 통해 tar 명령어를 익혀봅시다. 제가 실제로 거의 매일 사용하는 명령어들이에요.

# 작업 중인 프로젝트 디렉토리 백업하기
tar -cvf backup.tar .

# 웹사이트 파일 백업하기
tar -cvf website-backup.tar /var/www/html

# 특정 디렉토리 제외하고 압축하기
tar -czf backup.tar.gz /home/user --exclude=/home/user/tmp --exclude=/home/user/Downloads

# 기존 tar 파일에 새 파일 추가하기
tar -rf archive.tar newfile.txt

# 압축 풀기 전에 악성 코드 확인을 위해 미리보기
tar -tf suspicious.tar.gz | grep -E '\.(sh|exe)$'

# 특정 파일만 골라서 압축 풀기
tar -xf backup.tar.gz path/to/specific/file

# 다른 디렉토리에 압축 풀기
tar -xf archive.tar -C /different/directory/

# 사용자 권한 유지하며 백업하기 (루트 권한 필요)
sudo tar -czpf system-backup.tar.gz /etc /var/www

💡 사용 팁: tar 명령에 -v 옵션을 추가하면 어떤 파일이 처리되고 있는지 실시간으로 볼 수 있어 대용량 파일 작업 시 진행 상황을 파악하는 데 도움이 됩니다.

 

2. gzip: 가장 널리 사용되는 압축 도구

gzip은 리눅스에서 가장 널리 사용되는 압축 도구로, 하나의 파일을 압축하는 데 특화되어 있습니다. 보통 tar와 함께 사용하여 여러 파일을 먼저 하나로 묶은 다음 압축하는 방식으로 활용합니다.

gzip의 주요 옵션들

gzip도 단순해 보이지만 다양한 옵션으로 활용도가 높아집니다.

# 주요 gzip 옵션 정리
-1 ~ -9 : 압축 수준 설정 (1: 가장 빠름, 압축률 낮음 / 9: 가장 느림, 압축률 높음)
-d : 압축 해제 (decompress)
-f : 강제 실행 (force)
-k : 원본 파일 유지 (keep)
-l : 압축 파일 정보 보기 (list)
-r : 디렉토리 재귀적 처리 (recursive)
-t : 압축 파일 무결성 테스트 (test)
-v : 상세 정보 출력 (verbose)

기본 gzip 명령어

gzip은 정말 친숙한 압축 도구인데요, 단독으로도 쓸 수 있지만 보통은 tar와 함께 쓰는 경우가 많습니다. 한번 살펴볼까요?

# 파일 압축하기
gzip filename

# 파일 압축 해제하기
gzip -d filename.gz
# 또는
gunzip filename.gz

# 원본 파일 유지하면서 압축하기
gzip -k largefile.sql

# 최대 압축률로 파일 압축하기
gzip -9 hugefile.log

# 빠른 속도로 압축하기
gzip -1 largefile.dat

tar와 gzip 조합하기

# 여러 파일을 묶어서 gzip으로 압축 (가장 흔한 방식)
tar -czvf archive.tar.gz directory/

# tar.gz 파일 압축 해제하기
tar -xzvf archive.tar.gz

# 특정 압축 레벨로 tar.gz 만들기
# 최신 버전 tar에서 지원하는 방식
tar -czf --options=compression-level=9 max-compressed.tar.gz large-directory/

# 범용적인 방식 (모든 리눅스 배포판에서 작동)
tar -cf - directory/ | gzip -9 > backup.tar.gz

gzip 활용 예시를 한 번 봅시다!

서버 관리자로서 로그 파일 관리는 늘 골치였는데, gzip이 이 문제를 해결해주었어요.

# 넘쳐나는 로그 파일 정리하기
gzip /var/log/apache2/access.log

# 압축 파일 정보 확인하기
gzip -l *.gz

# 압축 해제하면서 진행 상황 보기
gzip -dv archive.gz

# 압축된 파일 내용 보기 (압축 해제 없이)
zcat archive.gz

# 압축된 파일 검색하기
zgrep "error" logfile.gz

# 압축된 로그 파일 실시간 모니터링하기
zcat -f access.log.gz | tail -f

고급 gzip 활용 기법

멀티코어 시스템에서 더 효율적으로 압축하는 방법들입니다.

# 진행 상황 표시줄과 함께 압축하기 (pv 패키지 설치 필요)
tar -cf - directory/ | pv -s $(du -sb directory/ | awk '{print $1}') | gzip > backup.tar.gz

# 여러 CPU 코어 활용하여 병렬 압축 (pigz 패키지 설치 필요)
tar -cf - directory/ | pigz -9 > backup.tar.gz

# 원격 시스템으로 직접 압축 전송 (로컬 네트워크에 적합)
tar -czf - /home | ssh user@remote "cat > /backup/home.tar.gz"

🚀 : gzip은 -1(가장 빠름, 낮은 압축률)부터 -9(가장 느림, 높은 압축률)까지 압축 수준을 지정할 수 있습니다. 기본값은 -6입니다.

 

3. bzip2: 더 강력한 압축률이 필요할 때

bzip2gzip보다 더 나은 압축률을 제공하지만, 그만큼 압축과 해제 시간이 더 오래 걸립니다. 디스크 공간이 제한적이고 시간이 덜 중요한 경우에 적합합니다.

기본 bzip2 명령어

# 파일 압축하기
bzip2 filename

# 파일 압축 해제하기
bzip2 -d filename.bz2
# 또는
bunzip2 filename.bz2

tar와 bzip2 조합하기

# 여러 파일을 묶어서 bzip2로 압축
tar -cjvf archive.tar.bz2 directory/

# tar.bz2 파일 압축 해제하기
tar -xjvf archive.tar.bz2

실전 bzip2 활용 예제

# 대용량 로그 파일 압축하기
bzip2 huge-logfile.log

# 여러 파일과 디렉토리를 높은 압축률로 백업
tar -cjvf full-backup.tar.bz2 /home/user /etc /var/www

# 원본 유지하면서 압축하기
bzip2 -k important-file.sql

# 압축된 파일 내용 보기 (압축 해제 없이)
bzcat archive.bz2

# 압축 파일 무결성 검사하기
bzip2 -t archive.bz2

# 멀티코어 CPU를 활용한 병렬 압축 (pbzip2 패키지 설치 필요)
pbzip2 -9 huge-database-dump.sql

 

4. xz: 최고의 압축률을 자랑하는 힙한 압축 도구

xz는 최근 많이 쓰는 압축 도구로, 대부분의 파일 유형에서 가장 높은 압축률을 제공합니다. 그러나 압축 및 해제 시간이 가장 오래 걸리므로 장기 보관용 백업이나 공간이 매우 제한적인 환경에 적합합니다.

기본 xz 명령어

# 파일 압축하기
xz filename

# 파일 압축 해제하기
xz -d filename.xz
# 또는
unxz filename.xz

tar와 xz 조합하기

# 여러 파일을 묶어서 xz로 압축
tar -cJvf archive.tar.xz directory/

# tar.xz 파일 압축 해제하기
tar -xJvf archive.tar.xz

실전 xz 활용 예제

# 대용량 데이터베이스 덤프 압축하기
xz database-dump.sql

# 시스템 전체 백업을 최고 압축률로 저장
tar -cJvf system-backup.tar.xz --exclude=/proc --exclude=/tmp --exclude=/sys /

# 압축 레벨 지정하기 (0-9, 기본값 6)
xz -9 max-compression.bin

# 원본 파일 유지하면서 압축하기
xz -k source-code.tar

# 여러 코어 활용해서 압축 속도 높이기 (xz 5.2.0 이상 버전 필요)
xz -T 0 big-file.iso

# 메모리 사용량 제한하기 (저사양 시스템에 유용)
xz --memory=128MiB huge-file.bin

# 압축 파일 내용 보기 (압축 해제 없이)
xzcat archive.xz

# 압축 파일 무결성 검사하기
xz -t archive.xz

고급 팁: 멀티코어 시스템에서는 -T 0 옵션을 사용해 모든 가용 코어를 활용하여 xz 압축 속도를 높일 수 있습니다. 이 기능은 xz 5.2.0 이상 버전에서만 지원되니 참고하세요.

 

5. zip: 윈도우와 호환성이 중요할 때

zip은 윈도우, 맥OS, 리눅스 모두에서 지원되는 범용 압축 형식으로, 다른 운영체제와 파일을 주고받을 때 특히 유용합니다.

기본 zip 명령어

# 파일 압축하기
zip archive.zip file1 file2 directory1

# zip 파일 압축 해제하기
unzip archive.zip

실전 zip 활용 예제

# 디렉토리를 재귀적으로 압축하기
zip -r website-backup.zip /var/www/html

# 비밀번호로 보호된 zip 파일 만들기
zip -e -r secure-docs.zip ~/Documents/confidential

# 기존 zip 파일에 새 파일 추가하기
zip archive.zip newfile.txt

# 특정 디렉토리에 압축 해제하기
unzip archive.zip -d /path/to/extract

# 압축 파일 내용만 보기 (압축 해제 없이)
unzip -l archive.zip

# 압축 파일 내 특정 파일만 추출하기
unzip archive.zip filename.txt

# 압축 파일 무결성 검사하기
unzip -t archive.zip

# 기존 파일을 덮어쓰지 않고 압축 해제하기
unzip -n archive.zip

# 특정 파일 형식만 압축하기
find . -name "*.jpg" | zip photos.zip -@

💼 비즈니스 팁: 윈도우 사용자와 파일을 주고받을 때는 항상 zip 형식을 사용하세요. 다른 리눅스 압축 형식은 윈도우에서 기본적으로 지원되지 않습니다.

 

6. 어떤 압축 도구가 내 상황에 딱 맞을까?

제가 리눅스를 다루면서 느낀 건, 상황에 맞는 압축 도구를 고르는 것이 정말 중요하다는 거예요. 마치 요리사가 재료에 맞는 칼을 고르는 것처럼요. 아래 표를 통해 여러분의 상황에 가장 적합한 압축 ‘도구’를 찾아보세요!

압축 도구 압축률은? 속도는? 다른 OS와 사이좋게? 이럴 때 딱이에요!
tar 압축 안 함 (그냥 묶어줘요) 번개처럼 빠름 ⚡ 리눅스/유닉스 친구들 단순히 파일들을 한데 모으고 싶을 때
gzip 괜찮은 편 꽤 빠른 편 🚀 대부분 환경 OK 일상적인 압축, 로그파일 정리할 때
bzip2 꽤 빡빡하게 압축 좀 느린 편 🐢 대부분 리눅스 공간을 더 아끼고 싶을 때
xz 파일 유형에 따라 최고 수준 파일 크기에 따라 수분~수시간 소요 ☕ 최신 리눅스 장기 보관이나 정말 큰 파일 다룰 때
zip 적당한 압축 적당한 속도 거의 모든 OS와 친구 👫 윈도우/맥 사용자와 파일 주고받을 때

 

7. 실제 참고 할만한 압축 방법 및 조합들

이론적인 설명보다 실제 업무에서 마주치는 상황별로 어떤 명령어를 사용해야 하는지 알아보는 게 더 도움이 될 것 같네요. 제가 리눅스 서버를 관리하며 자주 사용한 방법들을 공유해 드릴게요.

웹 서버 백업시 사용할 수 있는 압축 조합들

#!/bin/bash
# 웹사이트 백업 스크립트

# 변수 설정
SITE_DIR="/var/www/html"
DB_NAME="wordpress_db"
DB_USER="dbuser"
# 보안을 위해 비밀번호는 환경 변수나 별도 설정 파일에서 가져오세요
DB_PASS="${DB_PASSWORD}" # 환경 변수 사용 예시
BACKUP_DIR="/backup"
DATE=$(date +%Y-%m-%d)

# 디렉토리 확인
mkdir -p $BACKUP_DIR

# 1. 데이터베이스 덤프
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/db-$DATE.sql.gz

# 2. 웹사이트 파일 압축 (특정 디렉토리 제외)
tar -czf $BACKUP_DIR/www-$DATE.tar.gz $SITE_DIR \
    --exclude="*/cache/*" \
    --exclude="*/tmp/*" \
    --exclude="*/logs/*"

# 3. 로그 파일 별도 압축 (로그는 오래된 것부터 지워질 수 있게)
find $SITE_DIR/logs -name "*.log" -mtime +7 | xargs tar -czf $BACKUP_DIR/logs-$DATE.tar.gz

# 4. 30일 이상 된 백업 정리
find $BACKUP_DIR -name "*.gz" -mtime +30 -delete

echo "백업 완료: $BACKUP_DIR ($(date))"

대용량 로그 파일 관리시 사용할 수 있는 압축 조합

# 실시간으로 압축하면서 로그 기록하기
app_process | tee >(gzip > app.log.gz)

# 로그 로테이션 자동화 (logrotate 설정 예시)
cat > /etc/logrotate.d/myapp << EOF
/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data www-data
    sharedscripts
    postrotate
        service myapp restart > /dev/null
    endscript
}
EOF

# 오래된 로그파일 배치 압축
find /var/log -name "*.log" -mtime +7 -exec gzip {} \;

# 로그 파일 분석 (압축된 상태로)
zgrep "ERROR" /var/log/application/*.gz | sort | uniq -c | sort -nr | head -10

대용량 파일 전송시 사용가능한 압축 조합

# 로컬 네트워크에서 서버 간 대용량 파일 압축 전송 (중간 파일 생성 없이)
tar -cz /large/directory | ssh user@remote "cat > /destination/file.tar.gz"

# 네트워크 부하 분산을 위한 낮은 우선순위 압축 전송
nice -n 19 tar -czf - /huge/dataset | ssh remote "cat > dataset.tar.gz"

# 대역폭 제한하면서 압축 파일 전송 (pv 패키지 설치 필요)
tar -czf - /large/directory | pv -L 10m | ssh user@remote "cat > /destination/file.tar.gz"

# rsync와 함께 사용하여 증분 백업
rsync -avz --compress-level=9 /source/directory user@remote:/destination

날짜 기반 아카이브와 작업 자동화 관련 압축 조합

# 날짜 스탬프가 있는 백업 만들기
DATE=$(date +%Y-%m-%d)
tar -czf backup-$DATE.tar.gz /important/data

# 30일 이상 된 백업 자동 삭제하기
find /backup/ -name "backup-*.tar.gz" -mtime +30 -delete

# 백업 중 진행 상황을 파일로 로깅하기
tar -czf backup.tar.gz /data 2> backup-log.txt

# 백업 파일 무결성 검증을 위한 체크섬 생성
md5sum backup.tar.gz > backup.tar.gz.md5
# 나중에 확인할 때
md5sum -c backup.tar.gz.md5

 

8. 압축 툴 관련 Q&A

“tar.gz와 tgz는 차이가 있나요?”

아니요, 완전히 동일합니다! .tgz는 그냥 .tar.gz의 짧은 별명이에요. 둘 다 tar로 묶은 후 gzip으로 압축한 파일이죠. 타이핑을 조금이라도 줄이고 싶을 때 tgz를 쓰시면 됩니다. 저도 귀찮을 때는 항상 tgz를 써요. 😉

“압축 파일 내용만 살짝 엿보고 싶을 때는요?”

압축을 풀지 않고도 내용물을 확인할 수 있어요! 이건 정말 유용한 기능이죠:

# tar나 tar.gz 파일의 내용 들여다보기
tar -tf archive.tar
tar -tzf archive.tar.gz

# zip 파일 속 내용 훔쳐보기
unzip -l archive.zip

“초대용량 파일 압축 시 메모리 부족 에러가 뜨는데 어떻게 해결하죠?”

아, 이 문제는 특히 xz 압축에서 자주 발생해요. 제 서버에서도 비슷한 문제를 겪었는데, 이렇게 해결했습니다:

# 메모리 사용량에 제한 걸기 (이건 마법처럼 효과가 있어요!)
xz --memory=128MiB huge-file.bin

# 또는 압축 강도를 낮추기 (속도는 빨라지고 메모리는 적게 써요)
xz -1 huge-file.bin

“받은 압축 파일이 깨진 것 같은데 확인하는 방법이 있나요?”

물론이죠! 각 압축 도구마다 건강 검진 같은 무결성 테스트 옵션이 있어요:

# gzip 파일 건강 체크
gzip -t file.gz

# bzip2 파일 상태 확인
bzip2 -t file.bz2

# xz 파일 이상 없는지 테스트
xz -t file.xz

# zip 파일 안전하게 검사
unzip -t archive.zip

“tar.xz와 tar.bz2 중 어떤 것이 더 좋나요?”

대체로 tar.xz가 더 높은 압축률을 제공하지만, tar.bz2가 더 널리 지원되고 약간 더 빠른 경우가 많아요. 다음처럼 생각하시면 됩니다:

  • 공간이 극도로 제한적이거나 장기 보관용이라면 → tar.xz
  • 더 다양한 시스템에서 쓰거나 xz보다 빠르게 압축/해제하려면 → tar.bz2

“백업 파일이 무결성을 잃지 않게 하려면 어떻게 해야 하나요?”

백업 후에는 체크섬을 생성해두는 것이 좋아요:

# MD5 체크섬 생성
md5sum backup.tar.gz > backup.tar.gz.md5

# 나중에 무결성 확인
md5sum -c backup.tar.gz.md5

“자동 압축을 설정하고 싶은데 어떻게 하나요?”

cron 작업으로 설정하는 것이 가장 좋은 방법입니다:

# crontab에 매일 밤 12시에 백업 작업 추가
0 0 * * * /path/to/backup-script.sh

# 또는 logrotate를 사용하여 로그 파일 자동 압축
# /etc/logrotate.conf나 /etc/logrotate.d/ 아래에 설정 추가

“압축 파일이 암호로 보호되어 있는데 어떻게 열어야 하나요?”

암호화된 zip 파일은 unzip 명령에 암호를 입력하면 됩니다:

# 비밀번호로 보호된 ZIP 파일 해제
unzip -P "password" secure-archive.zip

# 또는 대화형으로 암호 입력 (더 안전)
unzip secure-archive.zip
# 암호 입력 프롬프트가 나타납니다

 

9. 간편하게 자주 쓰는 압축 명령어 정리

매일 사용하는 명령어도 가끔은 기억이 나지 않을 때가 있죠. 아래 요약표를 북마크해두시면 필요할 때 바로 찾아볼 수 있답니다.

압축 도구 압축하기 압축 해제하기 내용 보기 특별한 팁
tar tar -cf file.tar dir/ tar -xf file.tar tar -tf file.tar -v 옵션으로 진행 상황 확인
gzip gzip file gzip -d file.gz zcat file.gz 원본 유지는 -k 옵션
tar+gzip tar -czf file.tar.gz dir/ tar -xzf file.tar.gz tar -tzf file.tar.gz -9로 최대 압축률 지정
bzip2 bzip2 file bzip2 -d file.bz2 bzcat file.bz2 멀티코어는 pbzip2 사용
tar+bzip2 tar -cjf file.tar.bz2 dir/ tar -xjf file.tar.bz2 tar -tjf file.tar.bz2 --exclude 로 파일 제외
xz xz file xz -d file.xz xzcat file.xz 멀티코어는 -T 0 옵션
tar+xz tar -cJf file.tar.xz dir/ tar -xJf file.tar.xz tar -tJf file.tar.xz 메모리 제한은 --memory=
zip zip -r file.zip dir/ unzip file.zip unzip -l file.zip 비밀번호 설정은 -e

 


 

리눅스를 사용하면서 느끼는 가장 큰 장점은 바로 강력한 명령줄 도구들이 있다는 점입니다. 압축 툴들도 그 중 하나입니다. 처음에는 어렵게 느껴질 수 있지만, 익숙해지면 윈도우의 GUI보다 훨씬 더 빠르고 효율적으로 작업할 수 있답니다. 😉

 

댓글 남기기