08 · Archives & compression

facile  ·  Durée estimée : 25 min

🎯 Objectif

Savoir regrouper plusieurs fichiers en une seule archive et la compresser. Indispensable pour faire des sauvegardes, transférer des dossiers, ou télécharger des sources.

Tu vas apprendre tar (le standard Unix), gzip (compression), et zip / unzip (compatibles Windows).

1. Archive vs compression — la distinction

Beaucoup de gens confondent, mais ce sont deux choses différentes :

Sur Linux, on combine les deux : tar regroupe, puis gzip compresse. D'où le fameux .tar.gz (ou .tgz).

.tar.gz = archive tar compressée par gzip.
.tar.bz2 = archive tar compressée par bzip2 (plus lent, plus compact).
.zip = format tout-en-un (archive + compression).
2. Préparer des fichiers de test

Créons un petit dossier avec plusieurs fichiers :

mkdir ~/projet
cd ~/projet
echo "Fichier 1" > f1.txt
echo "Fichier 2" > f2.txt
echo "Fichier 3" > f3.txt
mkdir sous_dossier
echo "Dans le sous-dossier" > sous_dossier/note.txt
ls -la
Tu dois voir 3 fichiers + 1 dossier.
Crée cette structure et vérifie avec ls -la.
ls doit afficher f1.txt, f2.txt, f3.txt, sous_dossier.
3. Tar — créer une archive

La syntaxe de tar est un peu obscure au début, mais on retient 3 combinaisons clés.

Les 3 options fondamentales

c   → créer (create)
x   → extraire (extract)
t   → lister (list)
f   → fichier (file)  ← toujours suivi du nom de l'archive
v   → verbeux (affiche ce qui est fait)

Créer une archive tar simple

tar -cvf projet.tar projet/
-cvf = create + verbose + file. Crée projet.tar contenant tout le dossier projet/.

Créer une archive compressée (.tar.gz)

tar -czvf projet.tar.gz projet/
z = gzip. C'est l'option que tu utiliseras 95 % du temps.

Créer une archive .tar.bz2

tar -cjvf projet.tar.bz2 projet/
j = bzip2. Plus lent, plus compact.

Autres options utiles

-C /chemin      → se placer dans ce dossier avant d'archiver
--exclude=*.log → exclure certains fichiers
-p              → préserver les permissions
--wildcards     → activer les jokers
tar -czvf : mémorise-le comme "Créer, Zippé, Verbeux, Fichier".
Depuis ~, crée une archive projet.tar.gz contenant le dossier projet/.
ls -lh projet.tar.gz doit montrer le fichier et sa taille.
4. Tar — lister et extraire

Lister le contenu d'une archive sans l'extraire

tar -tzvf projet.tar.gz
Affiche la liste des fichiers contenus, avec leurs permissions et leurs tailles.

Extraire une archive

tar -xzvf projet.tar.gz
-xzvf = extract + gzip + verbose + file.

Extraire dans un dossier spécifique

tar -xzvf projet.tar.gz -C /tmp/
Extrait dans /tmp/ au lieu du dossier courant.

Extraire un seul fichier

tar -xzvf projet.tar.gz projet/f1.txt
N'extrait que f1.txt depuis l'archive.
Extraction en tant que root : ne fais jamais sudo tar -xvf sur une archive téléchargée d'Internet. Elle peut contenir des chemins malveillants (../../../etc/passwd). Extrait d'abord dans un dossier utilisateur, puis copie manuellement ce dont tu as besoin.
tar -tzvf avant tar -xzvf : toujours vérifier ce qu'on va extraire. Réflexe de sécurité.
Liste le contenu de projet.tar.gz, puis extrais-le dans /tmp/test_extract/.
ls /tmp/test_extract/projet/ doit montrer les 3 fichiers et le dossier.
5. Gzip — compresser un fichier seul

gzip compresse un fichier unique (pas un dossier, pas plusieurs fichiers à la fois). Par défaut, il remplace le fichier original par une version .gz.

Compresser

gzip f1.txt
f1.txt devient f1.txt.gz. L'original disparaît.

Décompresser

gunzip f1.txt.gz
f1.txt.gz redevient f1.txt.

Conserver l'original

gzip -k f1.txt       # garde f1.txt ET f1.txt.gz

Voir le taux de compression

gzip -v f1.txt
Sortie : f1.txt: 25.0% -- replaced with f1.txt.gz
zcat f1.txt.gz affiche le contenu d'un fichier .gz sans le décompresser sur disque. Très pratique pour lire un gros log compressé.
Compresse f2.txt, vérifie avec ls, puis décompresse-le.
Après gunzip, f2.txt doit être de nouveau présent.
6. Zip — compatible Windows

zip combine archivage et compression en une seule étape. C'est le format le plus universel, compatible avec Windows et macOS sans rien installer.

Sur Alpine, installe-le d'abord :

apk add zip unzip

Créer une archive zip

zip -r projet.zip projet/
-r = récursif (obligatoire pour un dossier).

Ajouter des options

zip -r -9 projet.zip projet/     # compression maximale
zip -r -e projet.zip projet/     # avec mot de passe
zip -r projet.zip projet/ -x "*.log"  # exclure

Lister le contenu

unzip -l projet.zip

Extraire

unzip projet.zip                 # dans le dossier courant
unzip projet.zip -d /tmp/        # dans /tmp/
unzip projet.zip f1.txt          # un seul fichier

Tester l'intégrité

unzip -t projet.zip
Le zip est pratique pour partager avec des utilisateurs Windows. Sous Linux, préfère tar.gz qui préserve mieux les permissions et la structure.
Crée une archive projet.zip, liste son contenu, puis extrais-la dans /tmp/zip_test/.
ls /tmp/zip_test/projet/ doit afficher les fichiers.
7. Comparer les formats

Tableau récapitulatif

Format      Archive  Compresse  Commande création
----------  -------  ---------  -------------------------
.tar        oui      non        tar -cvf
.tar.gz     oui      oui        tar -czvf
.tar.bz2    oui      oui (+++)  tar -cjvf
.gz         non      oui        gzip
.zip        oui      oui        zip -r

Quand utiliser quoi ?

8. Cas pratique — sauvegarde d'un dossier

Tu veux sauvegarder ton dossier projet/ avec la date dans le nom, en excluant les fichiers de log.

DATE=$(date +%Y-%m-%d)
tar -czvf "projet_$DATE.tar.gz" projet/ --exclude="*.log"
ls -lh projet_*.tar.gz
Crée projet_2026-11-20.tar.gz.

Restaurer

tar -xzvf projet_2026-11-20.tar.gz -C /tmp/restauration/
C'est exactement ce que font les scripts de sauvegarde automatique : nom horodaté, exclusion, compression, stockage ailleurs.
Crée une sauvegarde horodatée de projet/ puis vérifie qu'elle contient bien les 4 éléments.
tar -tzvf projet_*.tar.gz doit lister f1.txt, f2.txt, f3.txt et sous_dossier/.
🎓 Récapitulatif
TAR
tar -cvf  a.tar dossier/       → créer
tar -czvf a.tar.gz dossier/    → créer + gzip
tar -cjvf a.tar.bz2 dossier/   → créer + bzip2
tar -tzvf a.tar.gz             → lister
tar -xzvf a.tar.gz             → extraire
tar -xzvf a.tar.gz -C /tmp/    → extraire ailleurs
tar -xzvf a.tar.gz fichier.txt → extraire 1 fichier

GZIP
gzip fichier.txt               → compresser (efface l'original)
gzip -k fichier.txt            → compresser (garde l'original)
gunzip fichier.txt.gz          → décompresser
zcat fichier.txt.gz            → lire sans décompresser

ZIP
zip -r a.zip dossier/          → créer
unzip -l a.zip                 → lister
unzip a.zip                    → extraire
unzip a.zip -d /tmp/           → extraire ailleurs
unzip -t a.zip                 → tester

Moyens mnémotechniques

tar -czvf   → "Créer Zippé Verbeux Fichier"
tar -xzvf   → "eXtract Zippé Verbeux Fichier"
tar -tzvf   → "lisTer Zippé Verbeux Fichier"
🏆 Défi final
  1. Créer un dossier sauvegarde_test avec 5 fichiers
  2. Y ajouter un sous-dossier archive avec 2 fichiers
  3. Créer une archive backup.tar.gz de tout
  4. Lister son contenu
  5. Créer une copie backup.zip au format zip
  6. Comparer les tailles des deux archives
  7. Extraire les deux dans /tmp/comparaison/
  8. Vérifier que les fichiers extraits sont identiques
ls -lh backup.tar.gz backup.zip
mkdir -p /tmp/comparaison/tar /tmp/comparaison/zip
tar -xzf backup.tar.gz -C /tmp/comparaison/tar/
unzip -q backup.zip -d /tmp/comparaison/zip/
diff -r /tmp/comparaison/tar/sauvegarde_test /tmp/comparaison/zip/sauvegarde_test
diff -r ne doit afficher aucune différence.
Tu viens de faire exactement ce que fait un script de sauvegarde professionnel : archiver, compresser, comparer, restaurer. C'est de l'administration système réelle.
📚 Sommaire