La compression est essentielle pour économiser espace disque et bande passante. Ce guide explique comment utiliser tar, gzip, bzip2, xz, zip et 7z pour créer et gérer archives sous Linux.
Comprendre la Compression
Pourquoi Compresser ?
Avantages :
- Économiser espace disque (50-90% selon format)
- Transferts réseau plus rapides
- Backups plus légers
- Archivage long terme
Use cases :
- Backups serveurs
- Transfert fichiers
- Logs rotation
- Distribution code source
Compression vs Archivage
Archivage (tar) : Regrouper fichiers en un seul Compression (gzip, bzip2) : Réduire taille
Combinaison courante : tar + gzip = .tar.gz
tar : Archivage Fichiers
Syntaxe de Base
# Créer archive (sans compression)
tar -cf archive.tar fichiers/
# Options principales :
# c - create (créer)
# x - extract (extraire)
# t - list (lister contenu)
# f - file (fichier archive)
# v - verbose (afficher détails)
# z - gzip compression
# j - bzip2 compression
# J - xz compression
Créer Archives
# Archive simple (pas de compression)
tar -cf backup.tar /var/www
# Avec verbose (voir fichiers ajoutés)
tar -cvf backup.tar /var/www
# Archive + gzip (.tar.gz ou .tgz)
tar -czf backup.tar.gz /var/www
# Archive + bzip2 (.tar.bz2)
tar -cjf backup.tar.bz2 /var/www
# Archive + xz (.tar.xz)
tar -cJf backup.tar.xz /var/www
# Multiple dossiers/fichiers
tar -czf archive.tar.gz /var/www /etc/nginx /home/user
Extraire Archives
# Extraire dans dossier actuel
tar -xf archive.tar
# Extraire .tar.gz
tar -xzf archive.tar.gz
# Extraire .tar.bz2
tar -xjf archive.tar.bz2
# Extraire .tar.xz
tar -xJf archive.tar.xz
# Extraire dans dossier spécifique
tar -xzf backup.tar.gz -C /restore/
# Extraire fichier spécifique
tar -xzf backup.tar.gz var/www/index.html
# Avec verbose
tar -xzvf backup.tar.gz
Lister Contenu
# Voir contenu sans extraire
tar -tf archive.tar
# Avec détails
tar -tvf archive.tar
# Filtrer avec grep
tar -tzf backup.tar.gz | grep ".conf"
Options Avancées
# Exclure fichiers
tar -czf backup.tar.gz /var/www --exclude='*.log' --exclude='cache/*'
# Exclure pattern depuis fichier
echo "*.log" > exclude.txt
echo "node_modules" >> exclude.txt
tar -czf backup.tar.gz /project -X exclude.txt
# Préserver permissions
tar -czpf backup.tar.gz /var/www
# p = preserve permissions
# Update archive (ajouter si plus récent)
tar -uzf backup.tar.gz newfile.txt
# Append fichiers à archive existante
tar -rzf backup.tar.gz additional.txt
# Différence entre archive et filesystem
tar -df backup.tar /var/www
# Archive avec date dans nom
tar -czf backup-$(date +%Y%m%d).tar.gz /var/www
gzip : Compression Rapide
Utilisation gzip
# Compresser fichier (remplace original par .gz)
gzip file.txt
# Crée : file.txt.gz
# Garder original
gzip -k file.txt
# Décompresser
gunzip file.txt.gz
# Ou
gzip -d file.txt.gz
# Niveau compression (1-9)
gzip -1 file.txt # Rapide, moins compressé
gzip -9 file.txt # Lent, plus compressé
gzip -6 file.txt # Défaut
# Compresser récursivement
gzip -r dossier/
# Voir infos sans décompresser
gzip -l file.txt.gz
gzip avec Pipes
# Compresser output commande
mysqldump database | gzip > backup.sql.gz
# Décompresser et lire
zcat file.txt.gz
# Ou
gunzip -c file.txt.gz
# Grep dans fichier compressé
zgrep "error" logfile.gz
# Less sur fichier compressé
zless file.txt.gz
# Diff fichiers compressés
zdiff file1.txt.gz file2.txt.gz
bzip2 : Meilleure Compression
Utilisation bzip2
# Compresser (plus lent que gzip, meilleur ratio)
bzip2 file.txt
# Crée : file.txt.bz2
# Garder original
bzip2 -k file.txt
# Décompresser
bunzip2 file.txt.bz2
# Ou
bzip2 -d file.txt.bz2
# Niveau compression (1-9)
bzip2 -9 file.txt
# Compresser avec verbose
bzip2 -v file.txt
# Test intégrité
bzip2 -t file.txt.bz2
bzip2 Outils
# Lire sans décompresser
bzcat file.txt.bz2
# Grep
bzgrep "pattern" file.txt.bz2
# Less
bzless file.txt.bz2
# Diff
bzdiff file1.txt.bz2 file2.txt.bz2
xz : Compression Maximale
Utilisation xz
# Compresser (meilleur ratio, très lent)
xz file.txt
# Crée : file.txt.xz
# Garder original
xz -k file.txt
# Décompresser
unxz file.txt.xz
# Ou
xz -d file.txt.xz
# Niveaux compression (0-9)
xz -0 file.txt # Rapide
xz -9 file.txt # Maximum (défaut : -6)
# Extreme mode (encore meilleur)
xz -9e file.txt
# Multi-thread
xz -T 4 file.txt # 4 threads
xz -T 0 file.txt # Tous cores disponibles
# Test intégrité
xz -t file.txt.xz
xz Outils
# Lire
xzcat file.txt.xz
# Grep
xzgrep "pattern" file.txt.xz
# Less
xzless file.txt.xz
zip : Compatibilité Multi-OS
Créer Archives ZIP
# Archive ZIP simple
zip archive.zip file1.txt file2.txt
# Récursif (dossiers)
zip -r archive.zip dossier/
# Avec compression max
zip -9 -r archive.zip dossier/
# Sans compression (store)
zip -0 -r archive.zip dossier/
# Exclure fichiers
zip -r archive.zip dossier/ -x "*.log" "cache/*"
# Update archive
zip -u archive.zip newfile.txt
# Ajouter avec chemins relatifs
cd /var/www
zip -r /backup/web.zip .
# Protéger par mot de passe
zip -e -r secure.zip dossier/
# Demande mot de passe
# Splitter archive (100MB chunks)
zip -s 100m -r archive.zip bigsoftware/
Extraire ZIP
# Extraire tout
unzip archive.zip
# Dans dossier spécifique
unzip archive.zip -d /restore/
# Lister contenu
unzip -l archive.zip
# Test intégrité
unzip -t archive.zip
# Extraire fichier spécifique
unzip archive.zip file.txt
# Extraire avec pattern
unzip archive.zip "*.conf"
# Quiet mode
unzip -q archive.zip
# Overwrite sans demander
unzip -o archive.zip
zipinfo
# Infos détaillées archive
zipinfo archive.zip
# Court format
zipinfo -1 archive.zip
# Avec dates
zipinfo -T archive.zip
7z : Compression Ultime
Installer 7zip
# Debian/Ubuntu
sudo apt install p7zip-full
# RedHat/CentOS/Rocky/AlmaLinux
sudo dnf install epel-release -y
sudo dnf install p7zip p7zip-plugins -y
Créer Archives 7z
# Archive 7z
7z a archive.7z fichiers/
# Compression maximale
7z a -mx=9 archive.7z fichiers/
# Multi-thread
7z a -mmt=4 archive.7z fichiers/
# Mot de passe + chiffrement noms
7z a -p -mhe=on secure.7z fichiers/
# Splitter (100MB)
7z a -v100m archive.7z bigfiles/
# Format ZIP avec 7z
7z a -tzip archive.zip fichiers/
Extraire 7z
# Extraire
7z x archive.7z
# Dans dossier
7z x archive.7z -o/restore/
# Extract sans structure dossiers
7z e archive.7z
# Lister contenu
7z l archive.7z
# Test intégrité
7z t archive.7z
zstd : Moderne et Rapide
Utilisation zstd
# Installer
sudo apt install zstd
# Compresser
zstd file.txt
# Crée : file.txt.zst
# Garder original
zstd -k file.txt
# Décompresser
unzstd file.txt.zst
# Ou
zstd -d file.txt.zst
# Niveaux (1-19, défaut 3)
zstd -1 file.txt # Rapide
zstd -19 file.txt # Max
# Ultra mode (20-22)
zstd --ultra -22 file.txt
# Multi-thread
zstd -T0 file.txt
# Tar + zstd
tar --zstd -cf archive.tar.zst dossier/
tar --zstd -xf archive.tar.zst
Comparaison Formats
Benchmark Compression
Test sur 1GB fichiers logs :
| Format | Taille | Temps | Ratio | Décompression |
| gzip -6 | 250 MB | 15s | 75% | 5s |
| bzip2 -9 | 200 MB | 45s | 80% | 20s |
| xz -6 | 180 MB | 90s | 82% | 10s |
| xz -9 | 170 MB | 180s | 83% | 12s |
| 7z -mx=9 | 165 MB | 120s | 83.5% | 15s |
| zstd -3 | 260 MB | 8s | 74% | 3s |
| zstd -19 | 190 MB | 60s | 81% | 4s |
Choisir Format
gzip : Standard, rapide, compatible partout
- Logs quotidiens
- Backups fréquents
- Bon compromis vitesse/ratio
bzip2 : Meilleur ratio que gzip
- Archives moyen terme
- Moins utilisé maintenant
xz : Meilleure compression
- Distribution software (Linux kernels)
- Archives long terme
- Bande passante limitée
zip : Compatibilité Windows/Mac
- Partage multi-OS
- Moins bon que tar.gz
7z : Maximum compression
- Archives très volumineuses
- Storage long terme
zstd : Moderne, très rapide
- Backups temps réel
- Streaming data
- Meilleur équilibre vitesse/ratio
Scripts Automatisation
Backup Automatique
#!/bin/bash
# /usr/local/bin/backup.sh
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup"
SOURCE="/var/www"
# Créer archive
tar -czf "$BACKUP_DIR/www-$DATE.tar.gz" "$SOURCE"
# Garder seulement 7 derniers jours
find "$BACKUP_DIR" -name "www-*.tar.gz" -mtime +7 -delete
# Vérifier taille
SIZE=$(du -h "$BACKUP_DIR/www-$DATE.tar.gz" | cut -f1)
echo "Backup created: www-$DATE.tar.gz ($SIZE)"
Backup Incrémental
#!/bin/bash
# Backup incrémental avec tar
FULL_BACKUP="/backup/full-$(date +%Y%m%d).tar.gz"
SNAPSHOT="/backup/snapshot.snar"
# Full backup si snapshot n'existe pas
if [ ! -f "$SNAPSHOT" ]; then
tar -czf "$FULL_BACKUP" -g "$SNAPSHOT" /var/www
else
# Incrémental
INCR_BACKUP="/backup/incr-$(date +%Y%m%d-%H%M).tar.gz"
tar -czf "$INCR_BACKUP" -g "$SNAPSHOT" /var/www
fi
Compression Logs Anciens
#!/bin/bash
# Compresser logs > 1 jour
find /var/log -name "*.log" -mtime +1 -exec gzip {} \;
# Supprimer logs compressés > 30 jours
find /var/log -name "*.log.gz" -mtime +30 -delete
Backup Base Données
#!/bin/bash
# Backup MySQL compressé
DATE=$(date +%Y%m%d-%H%M)
DB="mydb"
mysqldump "$DB" | gzip > "/backup/db-$DB-$DATE.sql.gz"
# Rotation 14 jours
find /backup -name "db-$DB-*.sql.gz" -mtime +14 -delete
Extraction Intelligente
Script Extract Universel
#!/bin/bash
# extract.sh - Extraire n'importe quel format
extract() {
if [ -f "$1" ]; then
case "$1" in
*.tar.gz|*.tgz) tar -xzf "$1" ;;
*.tar.bz2|*.tbz2) tar -xjf "$1" ;;
*.tar.xz|*.txz) tar -xJf "$1" ;;
*.tar.zst) tar --zstd -xf "$1" ;;
*.tar) tar -xf "$1" ;;
*.gz) gunzip "$1" ;;
*.bz2) bunzip2 "$1" ;;
*.xz) unxz "$1" ;;
*.zip) unzip "$1" ;;
*.7z) 7z x "$1" ;;
*.rar) unrar x "$1" ;;
*.zst) unzstd "$1" ;;
*) echo "Format non supporté: $1" ;;
esac
else
echo "Fichier introuvable: $1"
fi
}
extract "$1"
Alias Bash
# Ajouter dans ~/.bashrc
# Extraction automatique
extract() {
if [ -f $1 ]; then
case $1 in
*.tar.*) tar -xf $1 ;;
*.gz) gunzip $1 ;;
*.zip) unzip $1 ;;
*.7z) 7z x $1 ;;
esac
fi
}
# Backup rapide
backup() {
tar -czf "$1-$(date +%Y%m%d).tar.gz" "$1"
}
Performance et Optimisation
Multi-Threading
# pigz (parallel gzip)
sudo apt install pigz
# Utilise tous cores
pigz file.txt
tar -I pigz -cf archive.tar.gz dossier/
# pbzip2 (parallel bzip2)
sudo apt install pbzip2
pbzip2 file.txt
tar -I pbzip2 -cf archive.tar.bz2 dossier/
# xz multi-thread
xz -T 0 file.txt # Auto threads
Compression par Blocs
# zstd avec dictionnaire (meilleur ratio)
zstd --train files/*.txt -o dict
zstd -D dict file.txt
Benchmark Custom
#!/bin/bash
# Comparer formats sur fichier
FILE="testfile.bin"
echo "Testing compression on: $FILE"
# gzip
time gzip -k -6 $FILE
ls -lh $FILE.gz
# bzip2
time bzip2 -k -9 $FILE
ls -lh $FILE.bz2
# xz
time xz -k -6 $FILE
ls -lh $FILE.xz
# zstd
time zstd -k $FILE
ls -lh $FILE.zst
# Cleanup
rm $FILE.{gz,bz2,xz,zst}
Troubleshooting
Archive Corrompue
# Tester intégrité
gzip -t file.gz
bzip2 -t file.bz2
xz -t file.xz
unzip -t file.zip
7z t file.7z
# Réparer si possible (zip)
zip -F broken.zip --out fixed.zip
Espace Disque Insuffisant
# Compresser sur place (remplace original)
gzip largefile.log
# Stream vers autre disque
tar -czf - /var/www | ssh remote "cat > backup.tar.gz"
# Split archive
split -b 1G largefile.tar.gz part-
# Reconstituer
cat part-* > largefile.tar.gz
Extraction Lente
# Extraire seulement fichiers nécessaires
tar -xzf backup.tar.gz specific/file.txt
# Paralléliser extraction
unpigz file.gz # Plus rapide que gunzip
Bonnes Pratiques
Nommage Archives
# Format recommandé :
project-YYYYMMDD.tar.gz
backup-full-20260125.tar.gz
db-incremental-20260125-1430.tar.gz
# Éviter espaces et caractères spéciaux
# Bon : web-backup-20260125.tar.gz
# Mauvais : Web Backup (Jan 25).tar.gz
Checksums
# Créer checksum avec archive
tar -czf backup.tar.gz /data
sha256sum backup.tar.gz > backup.tar.gz.sha256
# Vérifier avant extraction
sha256sum -c backup.tar.gz.sha256
Checklist Backup
□ Format adapté (gzip quotidien, xz long terme)
□ Rotation automatique (7j, 30j, 1an)
□ Test extraction régulier
□ Checksums générés
□ Stockage redondant (local + remote)
□ Monitoring espace disque
□ Documentation procédure restore
Conclusion
La compression Linux offre de nombreux outils :
Usage quotidien :
tar -czf backup.tar.gz /data # Archive + gzip
tar -xzf backup.tar.gz # Extraire
Formats par use case :
- gzip : Standard, rapide, quotidien
- xz : Distribution, long terme
- zstd : Moderne, meilleur équilibre
- zip : Compatibilité Windows
- 7z : Maximum compression
Automatisation :
# Backup quotidien avec rotation
tar -czf backup-$(date +%Y%m%d).tar.gz /data
find /backup -mtime +7 -delete
Performance :
pigz -k file.txt # Parallel gzip
xz -T 0 file.txt # Multi-thread xz
zstd -19 file.txt # Meilleur ratio rapide
Avec ces outils, vous gérez efficacement compression et archivage sous Linux !


