Aller au contenu principal

Archivage et compression


Table des matières

  1. tar : créer et extraire
  2. gzip, bzip2, xz
  3. zip et unzip
  4. Sauvegardes avec tar et rsync
  5. Stratégies de backup
  6. Exercices pratiques


1 - tar : créer et extraire

Qu'est-ce que tar ?

tar (Tape ARchive) regroupe plusieurs fichiers en un seul, sans compression.

Créer une archive

# Archive simple (sans compression)
tar -cvf archive.tar dossier/

# Avec compression gzip (.tar.gz ou .tgz)
tar -czvf archive.tar.gz dossier/

# Avec compression bzip2 (.tar.bz2)
tar -cjvf archive.tar.bz2 dossier/

# Avec compression xz (.tar.xz)
tar -cJvf archive.tar.xz dossier/

Extraire une archive

# Extraire dans le répertoire courant
tar -xvf archive.tar

# Extraire un .tar.gz
tar -xzvf archive.tar.gz

# Extraire dans un répertoire spécifique
tar -xzvf archive.tar.gz -C /destination/

# Extraire un seul fichier
tar -xzvf archive.tar.gz chemin/vers/fichier.txt

Options principales

OptionDescription
-cCreate (créer)
-xeXtract (extraire)
-tlisT (lister le contenu)
-vVerbose (afficher les fichiers)
-fFile (spécifier le fichier archive)
-zgzip
-jbzip2
-Jxz
-CChanger de répertoire
--excludeExclure des fichiers

Lister le contenu

# Sans extraction
tar -tvf archive.tar.gz

# Rechercher un fichier
tar -tvf archive.tar.gz | grep "config"

Exclure des fichiers

# Exclure un pattern
tar -czvf archive.tar.gz --exclude='*.log' --exclude='node_modules' dossier/

# Depuis un fichier d'exclusion
tar -czvf archive.tar.gz -X exclude.txt dossier/

🔝 Retour à la table des matières



2 - gzip, bzip2, xz

Comparaison des algorithmes

AlgorithmeExtensionVitesseCompression
gzip.gzRapideMoyenne
bzip2.bz2MoyenneBonne
xz.xzLenteExcellente

gzip - Le plus courant

# Compresser (remplace l'original)
gzip fichier.txt
# Crée fichier.txt.gz

# Garder l'original
gzip -k fichier.txt

# Décompresser
gunzip fichier.txt.gz
# ou
gzip -d fichier.txt.gz

# Voir le contenu compressé
zcat fichier.txt.gz
zless fichier.txt.gz
zgrep "pattern" fichier.txt.gz

bzip2 - Meilleure compression

# Compresser
bzip2 fichier.txt
# Crée fichier.txt.bz2

# Décompresser
bunzip2 fichier.txt.bz2
# ou
bzip2 -d fichier.txt.bz2

# Garder l'original
bzip2 -k fichier.txt

xz - Compression maximale

# Compresser
xz fichier.txt
# Crée fichier.txt.xz

# Décompresser
unxz fichier.txt.xz
# ou
xz -d fichier.txt.xz

# Garder l'original
xz -k fichier.txt

# Compression maximale
xz -9 fichier.txt

Quand utiliser quoi ?

SituationRecommandation
Usage quotidiengzip
Archives longue duréexz
Équilibre vitesse/taillebzip2
Compatibilité maximalegzip

🔝 Retour à la table des matières



3 - zip et unzip

zip - Compatible Windows/Mac

# Installer si nécessaire
sudo apt install zip unzip

# Créer une archive
zip archive.zip fichier1.txt fichier2.txt

# Archive récursive (dossier)
zip -r archive.zip dossier/

# Avec mot de passe
zip -e archive.zip fichier.txt

# Exclure des fichiers
zip -r archive.zip dossier/ -x "*.log" -x "*.tmp"

unzip - Extraire

# Extraire
unzip archive.zip

# Dans un répertoire
unzip archive.zip -d /destination/

# Lister le contenu
unzip -l archive.zip

# Extraire un seul fichier
unzip archive.zip chemin/fichier.txt

# Tester l'intégrité
unzip -t archive.zip

7zip - Format universel

# Installer
sudo apt install p7zip-full

# Créer une archive
7z a archive.7z dossier/

# Extraire
7z x archive.7z

# Lister
7z l archive.7z

🔝 Retour à la table des matières



4 - Sauvegardes avec tar et rsync

Backup avec tar

#!/bin/bash
# backup.sh

DATE=$(date +%Y%m%d_%H%M%S)
SOURCE="/var/www"
DEST="/backup"

# Créer le backup
tar -czvf "$DEST/www_$DATE.tar.gz" "$SOURCE"

# Rotation : garder 7 jours
find "$DEST" -name "www_*.tar.gz" -mtime +7 -delete

echo "Backup terminé : www_$DATE.tar.gz"

Backup incrémental avec tar

# Premier backup (complet)
tar -czvf backup_full.tar.gz \
--listed-incremental=/var/backup/snapshot.snar \
/data/

# Backups suivants (incrémentaux)
tar -czvf backup_incr_$(date +%Y%m%d).tar.gz \
--listed-incremental=/var/backup/snapshot.snar \
/data/

rsync - Synchronisation intelligente

# Synchronisation locale
rsync -avh source/ destination/

# Vers un serveur distant
rsync -avz /data/ user@server:/backup/

# Avec suppression des fichiers supprimés
rsync -avz --delete source/ destination/

# Dry run (simulation)
rsync -avzn source/ destination/

# Exclure des fichiers
rsync -avz --exclude='*.log' --exclude='cache/' source/ dest/

# Limiter la bande passante
rsync -avz --bwlimit=5000 source/ dest/ # 5 Mo/s

# Avec progression
rsync -avz --progress source/ destination/

Options rsync importantes

OptionDescription
-aArchive (preserve tout)
-vVerbose
-zCompression pendant transfert
-hHuman readable
-nDry run
--deleteSupprimer fichiers absents de source
--excludeExclure patterns
--progressAfficher progression
--bwlimitLimiter bande passante

🔝 Retour à la table des matières



5 - Stratégies de backup

Règle 3-2-1

RègleExemple
3 copiesOriginal + 2 backups
2 supportsDisque local + cloud
1 hors-siteServeur distant, S3

Types de backup

TypeAvantageInconvénient
FullRestauration simpleLent, volumineux
IncrementalRapide, petitRestauration complexe
DifferentialÉquilibréPlus gros qu'incremental

Script de backup complet

#!/bin/bash
# /usr/local/bin/backup_system.sh

# Configuration
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
RETENTION_DAYS=30

# Créer les dossiers
mkdir -p "$BACKUP_DIR"/{daily,weekly,monthly}

# Backup quotidien
tar -czf "$BACKUP_DIR/daily/backup_$DATE.tar.gz" \
--exclude='/backup' \
--exclude='/proc' \
--exclude='/sys' \
--exclude='/tmp' \
--exclude='/var/cache' \
/etc /home /var/www

# Rotation quotidienne (30 jours)
find "$BACKUP_DIR/daily" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete

# Copie hebdomadaire (dimanche)
if [ "$(date +%u)" -eq 7 ]; then
cp "$BACKUP_DIR/daily/backup_$DATE.tar.gz" "$BACKUP_DIR/weekly/"
find "$BACKUP_DIR/weekly" -name "*.tar.gz" -mtime +90 -delete
fi

# Copie mensuelle (1er du mois)
if [ "$(date +%d)" -eq 01 ]; then
cp "$BACKUP_DIR/daily/backup_$DATE.tar.gz" "$BACKUP_DIR/monthly/"
find "$BACKUP_DIR/monthly" -name "*.tar.gz" -mtime +365 -delete
fi

echo "Backup completed: $DATE"

🔝 Retour à la table des matières



6 - Exercices pratiques

Exercice 1 : Créer des archives

# 1. Créez un dossier de test
mkdir -p ~/test_archive/{docs,images}
echo "Test 1" > ~/test_archive/docs/doc1.txt
echo "Test 2" > ~/test_archive/docs/doc2.txt

# 2. Créez une archive tar.gz
tar -czvf test_archive.tar.gz ~/test_archive/

# 3. Listez le contenu sans extraire
tar -tvf test_archive.tar.gz

# 4. Extrayez dans un nouveau dossier
mkdir ~/extracted
tar -xzvf test_archive.tar.gz -C ~/extracted/

# 5. Nettoyez
rm -rf ~/test_archive ~/extracted test_archive.tar.gz

Exercice 2 : Comparer les compressions

# 1. Créez un fichier de test volumineux
yes "Hello World" | head -c 10M > test_file.txt

# 2. Compressez avec différents algorithmes
cp test_file.txt test_gzip.txt && gzip test_gzip.txt
cp test_file.txt test_bzip2.txt && bzip2 test_bzip2.txt
cp test_file.txt test_xz.txt && xz test_xz.txt

# 3. Comparez les tailles
ls -lh test_*.* test_file.txt

# 4. Nettoyez
rm test_*.* test_file.txt

Quiz

Q1. Quelle option de tar compresse en gzip ?

Réponse

-ztar -czvf archive.tar.gz dossier/

Q2. Comment extraire une archive tar.gz ?

Réponse

tar -xzvf archive.tar.gz

Q3. Quelle commande rsync simule sans modifier ?

Réponse

rsync -avzn source/ dest/ (option -n = dry run)

🔝 Retour à la table des matières



Points clés à retenir

  • tar -czvf = créer, tar -xzvf = extraire
  • gzip = rapide, xz = meilleure compression
  • rsync > tar pour les sauvegardes régulières
  • Option -n (dry run) pour tester rsync
  • Règle 3-2-1 pour les backups
  • Rotation avec find -mtime +N -delete
  • Toujours tester la restauration !

🔝 Retour à la table des matières


← Chapitre précédent | Chapitre suivant : Recherche avancée →