glossaire-linux

Archives et compression

Sous Unix, archivage (regroupement de fichiers) et compression (réduction de taille) sont deux étapes distinctes. tar archive, gzip/bzip2/xz compressent. Les deux sont presque toujours combinés.

tar

tar (tape archive) regroupe plusieurs fichiers en un seul, en préservant les permissions et la structure. Combiné avec une option de compression, il produit les fameux .tar.gz.

tar

Archiver et compresser des fichiers

Drapeaux principaux

ccréer une archive.
xextraire une archive.
tlister le contenu sans extraire.
vverbose : affiche chaque fichier traité.
fIndique le fichier d’archive ; utiliser -f - pour l’entrée ou la sortie standard. Le préciser explicitement évite de dépendre des valeurs par défaut ou de la variable TAPE.
zcompression gzip (.tar.gz).
jcompression bzip2 (.tar.bz2, plus dense, plus lent).
Jcompression xz (.tar.xz, encore plus dense).
-C dirChange vers ce dossier avant l'opération.
--exclude=motifIgnore les fichiers correspondant.

Mémo essentiel

tar -czvf X.tar.gz dir/Créer une archive compressée gzip.
tar -xzvf X.tar.gzExtraire dans le dossier courant.
tar -tzvf X.tar.gzLister le contenu sans extraire.

Retenir une seule action principale : c pour créer, x pour extraire ou t pour lister. Ajouter v pour détailler, f pour désigner l’archive et éventuellement z, j ou J pour la compression. Ne pas combiner c, x et t.

$ tar -czvf sauvegarde.tar.gz mon-projet/
Crée sauvegarde.tar.gz contenant tout mon-projet/.
$ tar -xzvf sauvegarde.tar.gz
Extrait dans le dossier courant.
$ tar -xzvf sauvegarde.tar.gz -C /tmp/restauration/
Extrait dans un dossier précis (qui doit exister).
$ tar -tzvf sauvegarde.tar.gz | head
Inspecte rapidement le contenu sans rien extraire.
$ tar -czvf backup-$(date +%F).tar.gz \
        --exclude='*.log' --exclude='node_modules' \
        projet/
Sauvegarde datée en excluant les fichiers volumineux ou regénérables.
$ tar -cJvf release.tar.xz dist/
Compression xz : plus lente mais beaucoup plus dense, idéale pour les artefacts à diffuser.
$ tar -C /var/www/site -czf - . | ssh deploy@web 'tar -C /srv/site -xzf -'
Streaming d'archive à travers SSH : -f - dit à tar d'écrire sur stdout (côté source) ou de lire stdin (côté destination), pas de fichier intermédiaire. Cette commande copie le contenu de /var/www/site vers /srv/site sans fichier intermédiaire. Les chemins sont explicites ; pour synchroniser régulièrement et gérer les suppressions, préférer rsync.
$ tar czf - mon-dossier/ | gpg -c > mon-dossier.tar.gz.gpg
Archive chiffrée en une seule passe : la sortie de tar est redirigée vers gpg -c (chiffrement symétrique avec passphrase). Aucun fichier intermédiaire en clair sur disque.

Voir aussi : gzip zip cp rsync

Compression de fichier

Compression et décompression d'un fichier individuel.

gzip

Compresser un fichier (le remplace par sa version .gz)

Options

-kGarde le fichier original.
-dDécompresse (équivaut à gunzip).
-1 à -9Niveau de compression (1=rapide, 9=meilleur).
-rRécursif sur un répertoire.
-lAffiche le ratio de compression d'un .gz existant.
$ gzip access.log
access.log disparaît, remplacé par access.log.gz.
$ gzip -k -9 rapport.pdf
Compression maximale, garde le fichier d'origine.
Important : par défaut gzip remplace le fichier original. Utilisez -k pour conserver l'original.

gunzip · zcat

Décompresser ou lire un fichier .gz

$ gunzip access.log.gz
Décompresse — le .gz disparaît.
$ zcat access.log.gz | tail -100
Lit un fichier compressé sans le décompresser sur disque. Idéal pour les vieux logs.
$ zgrep "ERROR" access.log.gz
Variante z* : zgrep, zless, zmore fonctionnent comme leurs équivalents non compressés.

bzip2 · xz

Compresseurs alternatifs : bzip2 (plus compact), xz (le plus efficace)

bzip2 et xz sont des alternatives à gzip. Les rapports de compression, vitesses et besoins mémoire dépendent des données et des réglages : xz produit souvent des archives plus petites mais coûte davantage à compresser ; les vitesses de décompression diffèrent aussi. Les variantes sont bunzip2/bzcat/bzgrep et unxz/xzcat/xzgrep.

Options communes (mêmes que gzip)

-kConserve le fichier source (par défaut, il est supprimé après compression).
-dDécompresse (équivalent à bunzip2 / unxz).
-1 … -9Niveau de compression. -9 = maximum mais beaucoup plus lent. xz -9e ajoute le mode extreme.
-tTest : vérifie l'intégrité sans extraire.
-l (xz)Affiche le ratio et la taille décompressée d'un .xz sans le décompresser.
$ bzip2 -k gros-log.txt        # produit gros-log.txt.bz2, garde l'original
xz -k -9 source.tar          # produit source.tar.xz, niveau maxi
Compresse les fichiers en conservant les originaux. Le gain dépend du contenu et des réglages ; mesurer avec les fichiers réels plutôt que supposer un rapport fixe. Les formats déjà compressés comme JPEG ou vidéo gagnent souvent peu, voire grossissent légèrement.
$ tar cjf archive.tar.bz2 dossier/   # j = bzip2
tar cJf archive.tar.xz dossier/    # J = xz
Intégration native à tar : j pour bzip2 (minuscule), J pour xz (majuscule). À la décompression, tar xf détecte le format automatiquement quel que soit le compresseur — pas besoin de spécifier.
$ xzcat backup.sql.xz | psql mabase
bzgrep ERROR vieux-log.txt.bz2
Streaming d'un fichier compressé. xzcat et bzcat sont les équivalents directs de zcat et permettent d'éviter une décompression sur disque — gain de temps et d'espace temporaire sur les gros fichiers.
Lequel choisir : gzip pour la rapidité et la compatibilité (lu partout), bzip2 pour un peu plus compact sans changer d'écosystème, xz pour les archives distribuées (paquets, releases) où la taille compte plus que le temps de compression. Sur des fichiers fréquemment relus (logs en rotation), gzip reste souvent le meilleur compromis.

Voir aussi : gzip gunzip · zcat tar

zip et unzip

Format .zip universel, utile pour échanger avec Windows ou macOS.

zip

Créer une archive zip (regroupe ET compresse)

Options

-rRécursif (indispensable pour un dossier).
-eChiffre l'archive avec mot de passe.
-9Compression maximale.
-qSilencieux.
$ zip -r mon-projet.zip mon-projet/
Création récursive, équivalent du tar -cz mais en format zip.
$ zip -er secrets.zip donnees/
Demande un mot de passe. Le chiffrement ZIP traditionnel est faible et ne convient pas à la protection de données sensibles ; préférer une archive chiffrée avec gpg ou un outil moderne.

unzip

Extraire un fichier zip

$ unzip archive.zip
Extrait dans le dossier courant.
$ unzip archive.zip -d /tmp/extraction/
Extrait dans un dossier précis avec -d.
$ unzip -l archive.zip
Liste le contenu sans extraire.