Skip to content

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