Retour au cours

infra / linux-bash

Archivage et compression (tar, gzip)

Leçon 131 exercice

Explication

Beaucoup de débutants croient que tar compresse les fichiers. Ce n'est pas le cas : tar (Tape ARchive) fait uniquement une chose, rassembler plusieurs fichiers et dossiers en une seule "archive" en conservant leur structure et leurs métadonnées. La compression, elle, est une étape complètement séparée réalisée par un algorithme dédié comme gzip, bzip2 ou xz.

Ce que vous allez apprendre

  • Comprendre que tar assemble et que gzip/bzip2/xz compressent, deux opérations distinctes
  • Créer et extraire une archive compressée avec les bons flags (-czvf, -xzvf)
  • Choisir le bon algorithme de compression selon le compromis vitesse/taille recherché
  • Exclure des fichiers ou dossiers inutiles d'une archive (--exclude)
  • Vérifier qu'une archive de sauvegarde est réellement fiable avant d'en avoir besoin

Dans quel contexte ?

Un administrateur système programme une sauvegarde nocturne du dossier /var/www/mon-site/ vers un fichier backup-20260905.tar.gz, avant de le transférer sur un stockage distant. Six mois plus tard, un incident survient et il faut restaurer cette sauvegarde en urgence — c'est le pire moment pour découvrir que l'archive est corrompue parce que personne ne l'avait jamais testée.

Une fois cette distinction posée, comment choisir un algorithme de compression ?

Chaque algorithme fait un compromis différent entre rapidité et taille finale.

FormatVitesseRatioCas d'usage typique
gzip (.gz)rapidecorrectlogs, backups fréquents
bzip2 (.bz2)moyenbonarchivage moyen terme
xz (.xz)lentexcellentdistribution, archivage long terme

Le bon choix dépend du contexte. Des logs compressés tous les jours ont intérêt à privilégier la vitesse (gzip), alors qu'une archive destinée à durer longtemps a intérêt à privilégier la taille finale (xz).

Prérequis

Être à l'aise avec la navigation et les chemins (leçons 2 et 3) : les commandes tar manipulent constamment des chemins relatifs et absolus.

Il reste une question essentielle : peut-on faire confiance à une archive ?

Une archive de sauvegarde n'a de valeur que si elle peut réellement être restaurée le jour où on en a besoin. Beaucoup d'incidents de production viennent justement de sauvegardes jamais testées, qui s'avèrent corrompues ou incomplètes au pire moment.

Bonne pratique

Après chaque sauvegarde importante, exécute tar -tzvf backup.tar.gz > /dev/null && echo "archive OK" pour vérifier son intégrité sans l'extraire, puis génère une somme de contrôle avec sha256sum backup.tar.gz > backup.sha256 que tu pourras revalider après un transfert avec sha256sum -c backup.sha256.

Le lien avec la suite du cours

La notion de sauvegarde fiable revient plus loin dans le cours, notamment dans la gestion du stockage et les scripts de production. Cette leçon en pose déjà les bases techniques : la prochaine s'intéresse à la façon dont Linux organise concrètement l'espace disque.

Commandes & code

Archivage et compression

bash
# tar : regroupe des fichiers en une seule archive (n'est PAS un compresseur en soi)
tar -cvf archive.tar dossier/          # c=create v=verbose f=fichier de sortie
tar -xvf archive.tar                     # x=extract
tar -tvf archive.tar                       # t=liste le contenu sans extraire
tar -xvf archive.tar -C /destination/        # extrait vers un dossier précis

# tar + compression en une seule commande (flags combinés)
tar -czvf archive.tar.gz dossier/     # z = gzip (rapide, ratio correct)
tar -xzvf archive.tar.gz                # extraction gzip
tar -cjvf archive.tar.bz2 dossier/        # j = bzip2 (plus lent, meilleure compression)
tar -cJvf archive.tar.xz dossier/           # J = xz (le meilleur ratio, plus lent)

# Exclure des fichiers/dossiers de l'archive
tar -czvf backup.tar.gz --exclude="*.log" --exclude="node_modules" dossier/

# Archive incrémentale (ne sauvegarde que ce qui a changé depuis le snapshot)
tar -czvf full.tar.gz -g snapshot.file dossier/         # 1er backup : snapshot créé
tar -czvf incr.tar.gz -g snapshot.file dossier/           # backups suivants : incrémental

# gzip / gunzip : compresse un fichier unique (remplace le fichier par défaut)
gzip fichier.txt              # produit fichier.txt.gz, supprime l'original
gzip -k fichier.txt             # -k = keep, garde aussi l'original
gunzip fichier.txt.gz             # décompresse
gzip -9 fichier.txt                 # niveau de compression max (plus lent)
zcat fichier.txt.gz                   # affiche le contenu sans décompresser sur disque

# zip / unzip (format multiplateforme, pratique pour échanger avec Windows/macOS)
zip -r archive.zip dossier/
unzip archive.zip
unzip -l archive.zip           # liste le contenu sans extraire

# Vérifier l'intégrité d'une archive avant de la déployer
tar -tzvf backup.tar.gz > /dev/null && echo "archive OK"

# Calculer et vérifier une somme de contrôle (indispensable pour un transfert fiable)
sha256sum backup.tar.gz > backup.sha256
sha256sum -c backup.sha256
FormatVitesseRatioCas d'usage typique
gzip (.gz)rapidecorrectlogs, backups fréquents
bzip2 (.bz2)moyenbonarchivage moyen terme
xz (.xz)lentexcellentdistribution, archivage long terme

Résumé

  • tar assemble, gzip/bzip2/xz compressent — souvent combinés (-czvf, -cJvf).
  • --exclude évite d'archiver du superflu (logs, node_modules, .git).
  • Toujours vérifier une archive de backup (-tzvf + sha256sum -c) avant de compter dessus.

Exercices pratiques

1 disponible
1

Mission : garantir une sauvegarde réellement restaurable

Objectif : Créer une archive compressée fiable, vérifier son intégrité, et comprendre pourquoi une sauvegarde jamais testée ne vaut rien.

Contexte

Tu programmes la sauvegarde nocturne de /var/www/mon-site/ vers backup-20260905.tar.gz. Cette archive devra peut-être servir à restaurer le site en urgence des mois plus tard : elle doit être fiable, légère et vérifiable.

Résoudre l’exercice →