Gérer les archives sous UNIX/LINUX : tar, gzip et compagnie
Sous Unix et Linux, archiver et compresser sont deux opérations distinctes, assurées par des outils différents. tar rassemble des fichiers en un seul, gzip réduit la taille d’un fichier. C’est leur combinaison qui produit les fameux .tar.gz, et c’est aussi la source de la plupart des confusions.
Ce guide sépare d’abord les deux notions, puis détaille la création et l’extraction d’archives, les formats de compression et leurs compromis, la consultation sans extraction, les exclusions, et les pièges qui font perdre du temps — chemins absolus, écrasement silencieux, archives corrompues. Tous les exemples sont réutilisables tels quels.
Archiver n’est pas compresser
La distinction est ancienne et reste structurante. tar signifie tape archive : il a été conçu pour écrire plusieurs fichiers à la suite sur une bande magnétique, en conservant leurs noms, leurs droits et leur arborescence. Il ne réduit rien ; une archive tar est même légèrement plus grosse que la somme de son contenu.
La compression est le travail d’un autre programme — gzip, bzip2, xz, zstd — qui prend un fichier et en produit une version plus petite. Historiquement, on enchaînait donc les deux :
tar -cf sauvegarde.tar dossier/
gzip sauvegarde.tar
Ce qui donnait sauvegarde.tar.gz. Les versions modernes de tar savent appeler le compresseur elles-mêmes, ce qui évite l’étape intermédiaire — mais la logique reste la même, et le nom du fichier le raconte encore.
Créer une archive
Les trois options à retenir se combinent presque toujours de la même façon :
-c: créer (create) ;-f: suivi du nom du fichier d’archive ;-v: afficher la liste des fichiers traités (verbose), facultatif mais rassurant.
tar -cvf archive.tar dossier/
Pour compresser au passage, ajoutez la lettre du format. -z pour gzip, -j pour bzip2, -J pour xz :
tar -czvf archive.tar.gz dossier/
tar -cjvf archive.tar.bz2 dossier/
tar -cJvf archive.tar.xz dossier/
Une habitude qui évite des surprises : nommez l’archive d’après ce qu’elle contient et la date du jour.
tar -czvf site-$(date +%Y%m%d).tar.gz /var/www/site/
Extraire une archive
L’option -x remplace -c. Le reste ne change pas :
tar -xzvf archive.tar.gz
Les versions récentes détectent seules le format de compression, ce qui rend -z et -j superflus à l’extraction. Un simple tar -xvf archive.tar.gz fonctionne donc dans la plupart des cas. Les garder ne coûte rien et reste compatible avec les systèmes anciens.
Par défaut, l’extraction se fait dans le répertoire courant. Pour choisir la destination, utilisez -C :
tar -xzvf archive.tar.gz -C /tmp/restauration/
Le dossier de destination doit exister au préalable : tar ne le crée pas.
Regarder sans extraire
C’est le réflexe à prendre avant toute extraction, et il évite l’essentiel des accidents. L’option -t liste le contenu sans rien écrire sur le disque :
tar -tzvf archive.tar.gz
Vous voyez alors si l’archive contient un dossier racine ou une série de fichiers en vrac — la différence entre une extraction propre et deux cents fichiers éparpillés dans votre répertoire courant.
Sur une archive volumineuse, combinez avec head pour ne voir que le début :
tar -tzf archive.tar.gz | head -20
Et pour retrouver un fichier précis dans une archive de plusieurs milliers d’entrées, passez par grep — la démarche est détaillée dans notre article sur la commande grep :
tar -tzf archive.tar.gz | grep config
Extraire un seul fichier
Inutile de tout décompresser pour récupérer un fichier de configuration. Indiquez son chemin exact, tel qu’il apparaît dans la liste :
tar -xzvf archive.tar.gz dossier/config/app.conf
Le chemin doit correspondre au caractère près à ce que montre -t. C’est la raison pour laquelle on liste avant d’extraire : un ./ en tête suffit à faire échouer la commande sans message explicite.
Exclure des fichiers
Une sauvegarde de site n’a aucune raison d’embarquer les caches, les journaux ou les dépendances réinstallables. L’option --exclude se répète autant de fois que nécessaire :
tar -czvf site.tar.gz /var/www/site/ \
--exclude='*.log' \
--exclude='cache/*' \
--exclude='node_modules'
Un détail qui coûte du temps à qui l’ignore : --exclude doit être écrit avant le chemin source sur les versions anciennes de tar. Sur les versions récentes l’ordre est libre, mais placer les exclusions en premier reste l’habitude sûre.
Si la liste s’allonge, mettez-la dans un fichier :
tar -czvf site.tar.gz /var/www/site/ --exclude-from=exclusions.txt
Choisir son format de compression
Les quatre formats courants offrent des compromis différents entre taille obtenue et temps de calcul.
| Format | Option | Compression | Vitesse | Usage typique |
|---|---|---|---|---|
| gzip | -z |
correcte | rapide | le choix par défaut |
| bzip2 | -j |
bonne | lente | archives peu relues |
| xz | -J |
excellente | très lente | distribution de logiciels |
| zstd | --zstd |
bonne | très rapide | sauvegardes fréquentes |
En pratique, gzip reste le choix raisonnable pour un usage quotidien : il est présent partout, et son écart de taille avec xz ne justifie rarement le temps de calcul supplémentaire. Xz se justifie quand l’archive sera téléchargée des milliers de fois — chaque octet économisé l’est autant de fois.
Zstd mérite d’être connu : à taux de compression comparable à gzip, il est plusieurs fois plus rapide. Sur un serveur qui sauvegarde toutes les nuits, la différence se mesure en minutes.
Compresser un fichier seul
Hors archive, gzip s’emploie directement. Attention à un comportement qui surprend : il remplace le fichier d’origine.
gzip rapport.txt
Vous obtenez rapport.txt.gz, et rapport.txt a disparu. Pour conserver l’original, utilisez -k :
gzip -k rapport.txt
La décompression suit la même logique :
gunzip rapport.txt.gz
gzip -d rapport.txt.gz
Et pour lire un fichier compressé sans le décompresser — très utile sur des journaux archivés — les variantes en z font le travail :
zcat journal.log.gz
zless journal.log.gz
zgrep "erreur" journal.log.gz
Chemins absolus : le piège classique
Si vous créez une archive avec un chemin absolu, tar affiche un avertissement et retire le / initial :
tar -czvf site.tar.gz /var/www/site/
# tar: Suppression de « / » au début des noms des membres
Ce comportement est une protection délibérée. Sans lui, extraire l’archive écraserait /var/www/site/ sur la machine de destination, quel que soit le répertoire courant — avec les dégâts qu’on imagine si la destination n’était pas celle attendue.
La bonne pratique consiste donc à se placer dans le dossier parent et à archiver un chemin relatif :
cd /var/www
tar -czvf /tmp/site.tar.gz site/
L’archive contient alors site/…, et son extraction se fait là où on le décide.
Vérifier une archive
Une archive corrompue ne se signale qu’au moment de la restauration, c’est-à-dire au pire moment. Le test coûte quelques secondes :
gzip -t archive.tar.gz && echo "archive saine"
tar -tzf archive.tar.gz > /dev/null && echo "contenu lisible"
La première commande vérifie l’intégrité de la compression, la seconde que l’archive se parcourt entièrement. Les deux ensemble donnent une confiance raisonnable.
Sur une sauvegarde importante, une empreinte enregistrée à côté de l’archive permet de détecter une altération ultérieure :
sha256sum site.tar.gz > site.tar.gz.sha256
sha256sum -c site.tar.gz.sha256
Archiver vers une autre machine
tar peut écrire sur la sortie standard, ce qui permet d’envoyer une archive directement par SSH sans fichier intermédiaire. Le tiret remplace le nom de fichier :
tar -czf - /var/www/site/ | ssh utilisateur@serveur "cat > /sauvegardes/site.tar.gz"
La construction inverse restaure à distance :
ssh utilisateur@serveur "cat /sauvegardes/site.tar.gz" | tar -xzf - -C /var/www/
C’est commode quand le disque local n’a pas la place d’héberger l’archive. Pour les transferts réguliers, rsync est généralement plus adapté, et l’authentification par clé évite d’avoir à saisir un mot de passe : voyez notre article sur les clés SSH et le transfert de fichiers.
Et les fichiers .zip ?
Le format zip existe aussi sous Unix, et reste le plus sûr pour échanger avec des postes Windows. Il compresse chaque fichier séparément, ce qui le rend moins efficace qu’un .tar.gz sur de nombreux petits fichiers, mais permet d’en extraire un sans lire l’ensemble.
zip -r archive.zip dossier/
unzip archive.zip
unzip -l archive.zip
unzip archive.zip -d /tmp/destination/
Les commandes zip et unzip ne sont pas toujours installées par défaut sur les distributions minimales ; un which unzip le dira avant de chercher longtemps.
En résumé
- archiver et compresser sont deux choses :
tarrassemble,gzipréduit ; - créer avec
-czvf, extraire avec-xzvf, lister avec-tzvf— et toujours lister avant d’extraire ; - extraire ailleurs avec
-C, exclure avec--exclude, placé avant le chemin source par prudence ; - gzip pour l’usage courant, xz pour ce qui sera beaucoup téléchargé, zstd pour les sauvegardes fréquentes ;
gzipseul supprime l’original :-kpour le conserver ;- archiver depuis le dossier parent en chemin relatif, jamais en absolu ;
- vérifier avec
gzip -tavant d’avoir besoin de la restauration.
Ces commandes prennent tout leur sens combinées à d’autres : find pour sélectionner ce qu’on archive, cron pour l’automatiser, ssh pour l’envoyer ailleurs. C’est cette composition qui fait la force de la ligne de commande Unix.