Linux Archives and Compression Guide
Archiving and compression are essential for backup, distribution, and storage optimization. This guide covers all major archive and compression tools in Linux.
Overview: Archive and Compression Tools
| Tool | Type | Extension | Compression | Example |
|---|---|---|---|---|
tar |
Archive | .tar |
None | tar -cf archive.tar files/ |
gzip |
Compress | .gz |
Good | gzip file.txt |
bzip2 |
Compress | .bz2 |
Better | bzip2 file.txt |
xz |
Compress | .xz |
Best | xz file.txt |
zip |
Both | .zip |
Good | zip archive.zip files |
7z |
Both | .7z |
Excellent | 7z a archive.7z files/ |
tar - Tape Archive
Creating Archives
# Create archive
tar -cf archive.tar files/
# Create with verbose output
tar -cvf archive.tar files/
# Create and compress with gzip
tar -czf archive.tar.gz files/
# Create and compress with bzip2
tar -cjf archive.tar.bz2 files/
# Create and compress with xz
tar -cJf archive.tar.xz files/
# Archive multiple items
tar -czf backup.tar.gz /etc /var/www
# Archive with exclusions
tar -czf backup.tar.gz --exclude='*.log' /var/log
Extracting Archives
# Extract archive
tar -xf archive.tar
# Extract with verbose output
tar -xvf archive.tar
# Extract gzipped tar
tar -xzf archive.tar.gz
# Extract bzipped tar
tar -xjf archive.tar.bz2
# Extract xz tar
tar -xJf archive.tar.xz
# Extract to specific directory
tar -xzf archive.tar.gz -C /destination/
# Extract specific files
tar -xzf archive.tar.gz path/to/file
Viewing Archive Contents
# List contents
tar -tf archive.tar
# List with details
tar -tvf archive.tar
# List gzipped tar
tar -tzf archive.tar.gz
# Search for file in archive
tar -tzf archive.tar.gz | grep filename
Advanced tar Usage
# Append files to archive
tar -rf archive.tar newfiles/
# Update archive with newer files
tar -uf archive.tar files/
# Archive with timestamps
tar -czf backup-$(date +%Y%m%d).tar.gz /data
# Preserve permissions and ownership
tar -czpf archive.tar.gz /path
# Follow symbolic links
tar -czf archive.tar.gz -h /path
# Split large archive
tar -czf - /large/dir | split -b 100M - archive.tar.gz.
# Reconstruct: cat archive.tar.gz.* | tar -xzf -
gzip - GNU Zip
Compressing Files
# Compress file (removes original)
gzip file.txt
# Compress and keep original
gzip -k file.txt
# Compress with best compression
gzip -9 file.txt
# Compress with fastest compression
gzip -1 file.txt
# Compress multiple files
gzip file1.txt file2.txt file3.txt
# Compress recursively
gzip -r directory/
# Verbose output
gzip -v file.txt
Decompressing Files
# Decompress file
gunzip file.txt.gz
# Decompress alternative
gzip -d file.txt.gz
# Decompress and keep original
gunzip -k file.txt.gz
# Decompress to stdout
gunzip -c file.txt.gz
# View compressed file without extracting
zcat file.txt.gz
zless file.txt.gz
zgrep "pattern" file.txt.gz
bzip2 - Better Compression
Compressing with bzip2
# Compress file
bzip2 file.txt
# Keep original
bzip2 -k file.txt
# Best compression
bzip2 -9 file.txt
# Multiple files
bzip2 file1.txt file2.txt
# Verbose
bzip2 -v file.txt
Decompressing bzip2
# Decompress
bunzip2 file.txt.bz2
# Alternative
bzip2 -d file.txt.bz2
# Keep original
bunzip2 -k file.txt.bz2
# View without extracting
bzcat file.txt.bz2
bzless file.txt.bz2
bzgrep "pattern" file.txt.bz2
xz - Maximum Compression
Compressing with xz
# Compress file
xz file.txt
# Keep original
xz -k file.txt
# Maximum compression
xz -9 file.txt
# Fast compression
xz -1 file.txt
# Multiple threads
xz -T4 file.txt
# Verbose output
xz -v file.txt
Decompressing xz
# Decompress
unxz file.txt.xz
# Alternative
xz -d file.txt.xz
# Keep original
unxz -k file.txt.xz
# View without extracting
xzcat file.txt.xz
xzless file.txt.xz
xzgrep "pattern" file.txt.xz
zip - Cross-Platform Archives
Creating ZIP Archives
# Create zip archive
zip archive.zip file1 file2 file3
# Archive directory recursively
zip -r archive.zip directory/
# Maximum compression
zip -9 archive.zip files
# Encrypt zip archive
zip -e -r secure.zip directory/
# Will prompt for password
# Exclude files
zip -r archive.zip directory/ -x "*.log"
# Update existing archive
zip -u archive.zip newfile.txt
# Show progress
zip -r archive.zip directory/ -v
# Split zip archive
zip -r -s 100m archive.zip largedir/
Extracting ZIP Archives
# Extract zip archive
unzip archive.zip
# Extract to specific directory
unzip archive.zip -d /destination/
# List contents without extracting
unzip -l archive.zip
# Test archive integrity
unzip -t archive.zip
# Extract specific files
unzip archive.zip file1.txt file2.txt
# Extract with pattern
unzip archive.zip "*.txt"
# Overwrite without prompting
unzip -o archive.zip
# Never overwrite
unzip -n archive.zip
# Quiet extraction
unzip -q archive.zip
7z - 7-Zip
Creating 7z Archives
# Install 7zip
sudo apt install p7zip-full
# Create archive
7z a archive.7z files/
# Maximum compression
7z a -mx=9 archive.7z files/
# Encrypt archive
7z a -p archive.7z files/
# Will prompt for password
# Split archive
7z a -v100m archive.7z largedir/
# Archive with specific format
7z a -tzip archive.zip files/
Extracting 7z Archives
# Extract archive
7z x archive.7z
# Extract to specific directory
7z x archive.7z -o/destination/
# Extract without directory structure
7z e archive.7z
# List contents
7z l archive.7z
# Test archive
7z t archive.7z
Compression Comparison
Compression Ratios
# Test file: 100MB
Original: 100.0 MB
gzip: 25.3 MB (74% reduction) - Fast
bzip2: 18.7 MB (81% reduction) - Medium
xz: 15.2 MB (85% reduction) - Slow
7z (LZMA2): 14.8 MB (85% reduction) - Slowest
Speed Comparison
# Compression speed (100MB file)
gzip: 3s (fastest)
bzip2: 8s (medium)
xz: 25s (slow)
7z: 30s (slowest)
# Decompression speed
gzip: 1s (fastest)
bzip2: 4s (fast)
xz: 2s (fast)
7z: 3s (fast)
Common Use Cases
Backup Scripts
#!/bin/bash
# Daily backup script
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup"
SOURCE="/var/www"
tar -czf "$BACKUP_DIR/website-$DATE.tar.gz" "$SOURCE"
# Keep only last 7 days
find "$BACKUP_DIR" -name "website-*.tar.gz" -mtime +7 -delete
Incremental Backups
# Full backup
tar -czf full-backup-$(date +%Y%m%d).tar.gz /data
# Incremental backup (files modified today)
tar -czf incremental-$(date +%Y%m%d).tar.gz \
--newer-mtime="1 day ago" /data
Encrypted Backups
# With zip
zip -e -r backup.zip /important-data/
# With tar and gpg
tar -czf - /data | gpg -c > backup.tar.gz.gpg
# Decrypt and extract
gpg -d backup.tar.gz.gpg | tar -xzf -
Remote Backups over SSH
# Backup to remote server
tar -czf - /data | ssh user@remote 'cat > backup.tar.gz'
# Backup from remote server
ssh user@remote 'tar -czf - /data' > backup.tar.gz
# With timestamp
tar -czf - /data | ssh user@remote \
"cat > backup-$(date +%Y%m%d).tar.gz"
Archive Maintenance
Testing Archives
# Test tar archive
tar -tzf archive.tar.gz > /dev/null && echo "OK" || echo "CORRUPT"
# Test zip archive
unzip -t archive.zip
# Test 7z archive
7z t archive.7z
# Test gzip file
gzip -t file.gz
Repairing Archives
# Attempt to recover damaged gzip
gzip -d -c damaged.gz > recovered.txt 2>/dev/null
# Extract partial tar archive
tar -xzf damaged.tar.gz --ignore-command-error
# Recover zip archive
zip -F broken.zip --out fixed.zip
zip -FF broken.zip --out fixed.zip # More aggressive
Converting Between Formats
# tar.gz to tar.bz2
gunzip -c archive.tar.gz | bzip2 > archive.tar.bz2
# tar.gz to tar.xz
gunzip -c archive.tar.gz | xz > archive.tar.xz
# zip to tar.gz
unzip -p archive.zip | tar -czf archive.tar.gz -T -
Performance Tips
Optimal Compression
# Fast compression (backups)
tar -czf --fast archive.tar.gz files/
# Balanced (general use)
tar -czf archive.tar.gz files/
# Maximum compression (distribution)
tar -cJf archive.tar.xz files/
# Parallel compression with pigz
tar -cf - files/ | pigz > archive.tar.gz
# Parallel xz compression
tar -cf - files/ | xz -T0 > archive.tar.xz
Quick Reference
# Create archives
tar -czf archive.tar.gz files/ # tar + gzip
tar -cjf archive.tar.bz2 files/ # tar + bzip2
tar -cJf archive.tar.xz files/ # tar + xz
zip -r archive.zip files/ # zip
7z a archive.7z files/ # 7z
# Extract archives
tar -xzf archive.tar.gz # tar.gz
tar -xjf archive.tar.bz2 # tar.bz2
tar -xJf archive.tar.xz # tar.xz
unzip archive.zip # zip
7z x archive.7z # 7z
# View contents
tar -tzf archive.tar.gz # tar
unzip -l archive.zip # zip
7z l archive.7z # 7z
# Compress single file
gzip file.txt # gzip
bzip2 file.txt # bzip2
xz file.txt # xz
# Decompress single file
gunzip file.txt.gz # gunzip
bunzip2 file.txt.bz2 # bunzip2
unxz file.txt.xz # unxz