Archivage et compression
Table des matières
- tar : créer et extraire
- gzip, bzip2, xz
- zip et unzip
- Sauvegardes avec tar et rsync
- Stratégies de backup
- 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
| Option | Description |
|---|---|
-c | Create (créer) |
-x | eXtract (extraire) |
-t | lisT (lister le contenu) |
-v | Verbose (afficher les fichiers) |
-f | File (spécifier le fichier archive) |
-z | gzip |
-j | bzip2 |
-J | xz |
-C | Changer de répertoire |
--exclude | Exclure 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
| Algorithme | Extension | Vitesse | Compression |
|---|---|---|---|
| gzip | .gz | Rapide | Moyenne |
| bzip2 | .bz2 | Moyenne | Bonne |
| xz | .xz | Lente | Excellente |
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 ?
| Situation | Recommandation |
|---|---|
| Usage quotidien | gzip |
| Archives longue durée | xz |
| Équilibre vitesse/taille | bzip2 |
| Compatibilité maximale | gzip |
🔝 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
| Option | Description |
|---|---|
-a | Archive (preserve tout) |
-v | Verbose |
-z | Compression pendant transfert |
-h | Human readable |
-n | Dry run |
--delete | Supprimer fichiers absents de source |
--exclude | Exclure patterns |
--progress | Afficher progression |
--bwlimit | Limiter bande passante |
🔝 Retour à la table des matières
5 - Stratégies de backup
Règle 3-2-1
| Règle | Exemple |
|---|---|
| 3 copies | Original + 2 backups |
| 2 supports | Disque local + cloud |
| 1 hors-site | Serveur distant, S3 |
Types de backup
| Type | Avantage | Inconvénient |
|---|---|---|
| Full | Restauration simple | Lent, volumineux |
| Incremental | Rapide, petit | Restauration 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
-z → tar -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 →