Aller au contenu
Administration Linux medium

Archiver et compresser sous Linux

55 min de lecture

Vous devez sauvegarder un dossier de configuration, transférer un projet à un collègue ou libérer de l'espace disque. Sous Linux, deux gestes couvrent ces besoins : archiver (regrouper plusieurs fichiers en un seul) et compresser (réduire la taille). Ce guide vous montre les commandes essentielles : tar, gzip et zip.

  • Distinguer archivage et compression
  • Créer et extraire une archive avec tar
  • Compresser un fichier avec gzip
  • Combiner archivage et compression avec tar -czvf
  • Utiliser zip / unzip pour le partage multiplateforme
OpérationCe que ça faitOutil principal
ArchiverRegroupe plusieurs fichiers en un seul fichiertar
CompresserRéduit la taille d'un fichiergzip, bzip2, xz

En pratique, on fait souvent les deux en même temps : tar archive + gzip compresse → un fichier .tar.gz.

tar (Tape Archive) regroupe des fichiers et répertoires dans un seul fichier .tar. Il conserve l'arborescence, les permissions et les dates.

L'ordre des arguments compte : le nom de l'archive vient juste après -f, et les fichiers à archiver ensuite. Inverser les deux fait écraser votre dossier source par une archive, c'est l'erreur classique du débutant avec tar. Le tableau qui suit détaille les trois options de la commande ; retenez surtout que -f est celle qui manque le plus souvent, et que sans elle tar écrit sur la sortie standard.

Fenêtre de terminal
tar -cvf sauvegarde.tar /home/bob/projets/
OptionSignification
-cCréer une archive
-vVerbose, afficher les fichiers traités
-fFichier, le nom de l'archive à créer

Avant d'extraire, vérifiez ce que l'archive contient :

Fenêtre de terminal
tar -tvf sauvegarde.tar

Une seule lettre change par rapport à la création : -x remplace -c. Tout le reste de la commande est identique, ce qui explique qu'une faute de frappe puisse détruire une archive au lieu de l'ouvrir. L'extraction dépose les fichiers dans le répertoire courant, pas à leur emplacement d'origine : si vous lancez la commande depuis votre home, l'arborescence de l'archive apparaît là.

Fenêtre de terminal
tar -xvf sauvegarde.tar
OptionSignification
-xExtraire

Pour extraire dans un répertoire précis :

Fenêtre de terminal
tar -xvf sauvegarde.tar -C /tmp/restauration/

gzip compresse un fichier unique. Il remplace le fichier original par sa version compressée .gz :

Fenêtre de terminal
gzip fichier.log

Le fichier fichier.log.gz est créé et fichier.log disparaît.

Le remplacement du fichier source est le comportement par défaut de gzip, et il surprend systématiquement la première fois. Sur un fichier de log en cours d'analyse, ou sur un dump que vous voulez garder lisible, ajoutez -k :

Fenêtre de terminal
gzip -k fichier.log

L'option -k (keep) conserve le fichier d'origine. Vous vous retrouvez alors avec fichier.log et fichier.log.gz, donc avec l'espace disque des deux.

Deux commandes font exactement la même chose. Sur GNU gzip, gunzip n'est pas un programme distinct : c'est un script shell qui se termine par exec gzip -d "$@", vous pouvez le lire avec cat $(command -v gunzip). Dans les deux cas, le fichier .gz disparaît au profit du fichier décompressé, avec la même logique de remplacement qu'à la compression.

Fenêtre de terminal
gunzip fichier.log.gz

Ou de façon équivalente :

Fenêtre de terminal
gzip -d fichier.log.gz

En pratique, on combine tar et un compresseur en une seule commande. C'est le cas le plus courant.

Fenêtre de terminal
tar -czvf sauvegarde.tar.gz /home/bob/projets/

L'option -z active la compression gzip. C'est la combinaison la plus répandue sous Linux, au point que .tar.gz et son abréviation .tgz désignent la même chose. Le gain de temps est net face aux deux formats suivants, pour un fichier un peu plus gros.

Fenêtre de terminal
tar -cjvf sauvegarde.tar.bz2 /home/bob/projets/

L'option -j active la compression bzip2. Ce format compresse mieux que gzip mais reste lent à la décompression, et il n'est plus le choix par défaut de personne : xz et zstd l'ont largement remplacé. Vous le rencontrerez surtout sur des archives anciennes qu'il faut savoir ouvrir.

Fenêtre de terminal
tar -cJvf sauvegarde.tar.xz /home/bob/projets/

L'option -J (majuscule) active la compression xz. Attention à la casse : -j minuscule est bzip2, -J majuscule est xz, et les deux se ressemblent dans une ligne de commande relue vite. xz produit les archives les plus petites des trois, au prix d'un temps de compression et d'une consommation mémoire nettement supérieurs sur les gros volumes.

À la lecture, GNU tar détecte seul le compresseur en inspectant les premiers octets du fichier : tar -xvf sauvegarde.tar.gz fonctionne sans -z. Les lettres ci-dessous restent utiles pour deux raisons : elles documentent le format attendu, et elles font échouer la commande si le fichier n'est pas celui qu'on croit, ce qui vaut mieux qu'une extraction silencieuse du mauvais type.

Fenêtre de terminal
tar -xzvf sauvegarde.tar.gz # gzip
tar -xjvf sauvegarde.tar.bz2 # bzip2
tar -xJvf sauvegarde.tar.xz # xz

Trois lettres à retenir, et un critère pour choisir : le temps de compression contre la taille finale. Pour une sauvegarde quotidienne rejouée souvent, -z reste le bon compromis. Pour une archive écrite une fois et conservée longtemps, -J gagne nettement en taille. Si vous ne voulez pas mémoriser ce tableau, -a déduit la bonne option de l'extension que vous donnez.

OptionCompressionExtension
-zgzip (rapide).tar.gz
-jbzip2 (meilleur ratio).tar.bz2
-Jxz (meilleur ratio, plus lent).tar.xz

Le format ZIP est reconnu par Windows, macOS et Linux. C'est le format à privilégier quand vous partagez des fichiers avec des utilisateurs sur d'autres systèmes.

Contrairement à tar, zip compresse chaque fichier séparément avant de les assembler. Le taux de compression est donc un peu moins bon sur un lot de petits fichiers similaires, mais l'extraction d'un seul élément ne demande pas de relire toute l'archive. Autre différence de comportement : zip n'est pas récursif par défaut. Un dossier passé sans -r n'ajoute que l'entrée du dossier lui-même, sans son contenu, et unzip -l affiche alors une archive à un seul élément de 0 octet.

Fenêtre de terminal
zip archive.zip fichier1.txt fichier2.txt

Pour archiver un dossier entier (récursif) :

Fenêtre de terminal
zip -r archive.zip dossier/

unzip extrait dans le répertoire courant et vous demande confirmation avant d'écraser un fichier existant, fichier par fichier. Sur une archive volumineuse, cette invite interactive bloque un script : dans ce cas, -o écrase sans poser de question et -n ne remplace jamais rien.

Fenêtre de terminal
unzip archive.zip

Pour extraire dans un répertoire précis :

Fenêtre de terminal
unzip archive.zip -d /tmp/extraction/

Le réflexe est le même qu'avec tar -tvf : regarder avant d'extraire. La sortie donne pour chaque entrée sa taille décompressée, sa date et son chemin. Surveillez ce chemin : une entrée en ../ ou en chemin absolu signale une archive douteuse. unzip refuse de sortir du répertoire courant, il affiche alors skipped "../" path component(s) ou stripped absolute path spec, mais une archive qui déclenche ces messages mérite qu'on cherche d'où elle vient.

Fenêtre de terminal
unzip -l archive.zip

Ni zip ni unzip ne font partie des installations minimales sur RHEL et dérivés, alors que tar et gzip y sont toujours présents. Vérifiez leur présence avec command -v zip avant d'écrire un script qui en dépend, sinon l'échec ne surviendra qu'en production, sur le serveur le moins fourni.

Fenêtre de terminal
sudo apt install zip unzip

Le choix se joue sur un seul critère : qui va lire l'archive. Entre machines Linux, tar conserve permissions, liens symboliques et arborescence, c'est le format à utiliser pour une sauvegarde restaurable. Dès qu'un poste Windows ou macOS entre dans la boucle, zip s'ouvre d'un double-clic sans rien installer. Entrez dans le tableau par la ligne qui décrit votre situation, la commande de droite est directement copiable.

BesoinCommande
Sauvegarder un dossier (Linux ↔ Linux)tar -czvf archive.tar.gz dossier/
Partager avec Windows/macOSzip -r archive.zip dossier/
Compresser un seul fichier (log, dump)gzip fichier
Extraire un .tar.gztar -xzvf archive.tar.gz
Extraire un .zipunzip archive.zip

Les messages de tar sont laconiques et deux d'entre eux ne sont pas des erreurs. Removing leading '/' from member names est une protection, pas un échec : tar retire le / initial pour qu'une extraction distraite n'écrase pas /etc sur la machine de destination. En revanche, tout message contenant Broken pipe ou Child returned status signale un compresseur absent, et l'archive produite est inutilisable même si elle existe sur le disque.

ProblèmeCause probableSolution
tar: Cannot open: No such file or directoryChemin incorrectVérifier le chemin avec ls
tar: Removing leading '/' from member namesChemin absolu stockéComportement normal, sécurité pour éviter l'écrasement
gzip: fichier already has .gz suffixFichier déjà compresséLe fichier est déjà en .gz, pas besoin de re-compresser
unzip: cannot find or openFichier absent ou mauvais nomVérifier avec ls le nom exact
Archives très volumineuses trop lentesCompression xz sur gros dossierUtiliser gzip (-z) qui est plus rapide
Permission denied à l'extractionPas le droit d'écrireExtraire dans /tmp ou utiliser sudo

Les options de tar se confondent vite tant qu'on ne les a pas tapées soi-même. Dans ce lab, vous créez des archives gzip et bzip2, vous listez leur contenu avec -tvf et vous extrayez un seul fichier vers un répertoire cible : exactement les gestes d'une restauration réelle.

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • tar archive (regroupe), gzip compresse (réduit la taille).
  • tar -czvf fait les deux en une seule commande, c'est le cas le plus courant.
  • zip est le format universel pour le partage multiplateforme.
  • Toujours vérifier le contenu d'une archive avec -tvf ou unzip -l avant d'extraire.
  • Pour la compression seule d'un fichier : gzip fichier (et gunzip pour décompresser).

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn