gzip : compresser des fichiers sous Linux, décompresser gzip, utiliser gunzip et zcat

Environnement de testFamille RHELAlmaLinux 9.8Compte rootVérifié le 2026-11-05
Commandes de compression et d'archivagegzipgunzipzcatEmplacement/usr/bin/gzip
Compresser des fichiers sous Linux et décompresser gzip

gzip est la commande Linux qui compresse un seul fichier en fichier .gz ; pour décompresser, ajoutez -d à la même commande ou utilisez gunzip. Sur un serveur AlmaLinux 9, un journal d'accès de 31 878 octets est passé à 4 424 octets, et la décompression a rendu la taille et l'heure de modification d'origine.

Les sorties ci-dessous ont été obtenues dans un dossier de test d'un serveur AlmaLinux 9.8 avec le compte root, et les heures sont en UTC. Les journaux d'accès, les notes et les fichiers de configuration sont des fichiers d'exemple créés pour le test, et les adresses IP des journaux sont aussi des valeurs d'exemple pour la documentation.

1️⃣ Utiliser la commande gzip

  • ↪️ Compresser un fichier et garder l'original (-k)

Le dossier de test contient deux journaux d'accès, deux fichiers de notes, un dossier config avec des fichiers de configuration et un dossier restore vide.

ls -l
total 88
-rw-r--r-- 1 root root 31878 Oct 28 23:50 access.log
-rw-r--r-- 1 root root 47748 Oct 27 23:59 access.log-20261027
drwxr-xr-x 2 root root    39 Oct 29 00:19 config
-rw-r--r-- 1 root root    45 Oct 28 14:30 memo.txt
-rw-r--r-- 1 root root   426 Oct 27 09:10 readme.txt
drwxr-xr-x 2 root root     6 Oct 29 00:19 restore

Si vous écrivez un nom de fichier après gzip, ce fichier devient un fichier compressé avec .gz ajouté à la fin de son nom. La commande ci-dessous compresse access.log et n'affiche rien une fois terminée.

gzip access.log

Après la compression, ls -l ne montre plus access.log mais seulement access.log.gz. Le journal de 31 878 octets est passé à 4 424 octets, et l'heure de modification reste celle du fichier d'origine.

ls -l access.log access.log.gz
ls: cannot access 'access.log': No such file or directory
-rw-r--r-- 1 root root 4424 Oct 28 23:50 access.log.gz

Avec -v, gzip affiche pour chaque fichier le taux de réduction et le nouveau nom de fichier. Le [81.5%] de la ligne readme.txt indique de combien la taille d'origine a diminué, et [replaced with] signifie que le fichier d'origine a été remplacé par le fichier .gz.

gzip -v readme.txt
readme.txt:	 81.5% -- replaced with readme.txt.gz

Pour garder le fichier d'origine, ajoutez -k. Si vous compressez memo.txt avec -k, memo.txt et memo.txt.gz restent côte à côte.

gzip -k memo.txt
ls -l memo.txt memo.txt.gz
-rw-r--r-- 1 root root 45 Oct 28 14:30 memo.txt
-rw-r--r-- 1 root root 71 Oct 28 14:30 memo.txt.gz

Le memo.txt de 45 octets a même grossi à 71 octets après la compression. Selon le manuel officiel, gzip compresse même si le résultat est plus gros que l'original, et il enregistre dans le fichier compressé le nom et l'heure du fichier d'origine.

Si vous indiquez plusieurs fichiers à la fois, chaque fichier donne son propre fichier .gz. En compressant les deux fichiers de configuration du dossier config, on obtient deux fichiers, app.conf.gz et site.conf.gz.

gzip -v config/app.conf config/site.conf
config/app.conf:	 78.7% -- replaced with config/app.conf.gz
config/site.conf:	 87.7% -- replaced with config/site.conf.gz
ls -l config/
total 8
-rw-r--r-- 1 root root 206 Oct 20 11:00 app.conf.gz
-rw-r--r-- 1 root root  93 Oct 20 11:05 site.conf.gz

2️⃣ Décompresser gzip

  • ↪️ gzip -d et gunzip, décompresser dans un autre dossier (-c)

En décompressant access.log.gz avec -d, rien ne s'affiche, access.log revient et access.log.gz disparaît.

gzip -d access.log.gz
ls -l access.log access.log.gz
ls: cannot access 'access.log.gz': No such file or directory
-rw-r--r-- 1 root root 31878 Oct 28 23:50 access.log

L'access.log restauré fait 31 878 octets, et son heure de modification est la même qu'avant la compression, Oct 28 23:50.

gunzip fait la même chose que gzip -d. Avec -k, il décompresse en gardant le fichier compressé, et [created] sur la ligne de -v signifie qu'un nouveau fichier a été créé sans supprimer le fichier .gz.

gunzip -kv readme.txt.gz
readme.txt.gz:	 81.5% -- created readme.txt
ls -l readme.txt readme.txt.gz
-rw-r--r-- 1 root root 426 Oct 27 09:10 readme.txt
-rw-r--r-- 1 root root 108 Oct 27 09:10 readme.txt.gz

gzip n'a pas d'option pour choisir le dossier de destination ; pour décompresser dans un autre dossier, envoyez avec -c le contenu décompressé sur la sortie standard et écrivez le chemin du nouveau fichier après [>]. La commande ci-dessous décompresse memo.txt.gz en memo.txt dans le dossier restore.

gzip -dc memo.txt.gz > restore/memo.txt
ls -l restore/
total 4
-rw-r--r-- 1 root root 45 Oct 29 00:19 memo.txt

En décompressant avec -c, memo.txt.gz reste en place. Le nouveau restore/memo.txt a pour heure de modification Oct 29 00:19, moment de sa création.

3️⃣ Options de la commande gzip

  • ↪️ -l, -t, niveau de compression, -r

-l affiche sur une ligne, sans décompresser, la taille compressée, la taille d'origine, le taux de réduction et le nom obtenu à la décompression. Après avoir recompressé access.log avec -k, la vérification avec -l donne ceci.

gzip -k access.log
gzip -l access.log.gz
         compressed        uncompressed  ratio uncompressed_name
               4424               31878  86.2% access.log

Avec -v en plus, la méthode de compression (defla, abréviation de deflate), le CRC des données d'origine ainsi que la date et l'heure du fichier d'origine s'ajoutent devant.

gzip -lv access.log.gz
method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla b49b41c4 Oct 28 23:50                4424               31878  86.2% access.log

-t vérifie seulement que le fichier compressé n'est pas endommagé, puis s'arrête. Utilisé avec -v, il affiche [OK] après chaque fichier sans problème.

gzip -tv access.log.gz
access.log.gz:	 OK

Les chiffres de -1 à -9 fixent le niveau de compression, et selon le manuel officiel la valeur par défaut est -6. Le même access.log a été compressé trois fois avec -c et les tailles ont été comparées avec wc -c.

gzip -c -1 access.log | wc -c
5564
gzip -c -6 access.log | wc -c
4424
gzip -c -9 access.log | wc -c
4164
Niveau de compressionTaille .gzPar rapport à l'original
Fichier d'origine (access.log)31 878 octets100%
-1 (le plus rapide)5 564 octets17.5%
-6 (par défaut)4 424 octets13.9%
-9 (le plus petit)4 164 octets13.1%

-9 était 260 octets plus petit que la valeur par défaut, et -1 était 1 140 octets plus gros que la valeur par défaut.

Si vous n'indiquez qu'un nom de dossier, [is a directory -- ignored] s'affiche et le dossier est ignoré.

gunzip config
gzip: config is a directory -- ignored

Pour traiter tous les fichiers d'un dossier, ajoutez -r. En décompressant avec gunzip -r le dossier config, où les deux fichiers de configuration avaient été compressés, les deux fichiers sont décompressés l'un après l'autre.

gunzip -rv config
config/app.conf.gz:	 78.7% -- replaced with config/app.conf
config/site.conf.gz:	 87.7% -- replaced with config/site.conf
ls -l config/
total 8
-rw-r--r-- 1 root root 840 Oct 20 11:00 app.conf
-rw-r--r-- 1 root root 528 Oct 20 11:05 site.conf

-r compresse ou décompresse un par un les fichiers d'un dossier et ne regroupe pas plusieurs fichiers en un seul. Pour faire d'un dossier un seul fichier compressé, utilisez la commande tar, qui regroupe et compresse en une seule étape. En compressant le dossier config avec tar -czf, le dossier et les deux fichiers se retrouvent dans un seul config.tar.gz.

tar -czf config.tar.gz config
tar -tzvf config.tar.gz
drwxr-xr-x root/root         0 2026-10-29 00:19 config/
-rw-r--r-- root/root       840 2026-10-20 11:00 config/app.conf
-rw-r--r-- root/root       528 2026-10-20 11:05 config/site.conf

📌 Options principales : résultats de cet article

OptionRôleRésultat dans cet article
-cEnvoie le résultat sur la sortie standard et laisse le fichier d'origine tel quelLa sortie de -dc redirigée vers restore/memo.txt a créé un memo.txt de 45 octets
-dDécompresser (comme gunzip)access.log.gz disparaît et access.log de 31878 octets revient
-kGarde le fichier d'origine après compression ou décompressionmemo.txt (45 octets) et memo.txt.gz (71 octets) restent côte à côte
-vAffiche pour chaque fichier le taux de réduction et le nouveau nomreadme.txt: 81.5% -- replaced with readme.txt.gz
-lListe la taille, le taux et le nom après décompression des fichiers compressésTaille compressée 4424, taille d'origine 31878, taux 86.2%, nom access.log
-tVérifie que le fichier compressé n'est pas endommagéAvec -tv, access.log.gz: OK, et unexpected end of file pour broken.gz, dont la fin est coupée
-rCompresse ou décompresse tous les fichiers d'un dossierUn seul gunzip -rv config décompresse config/app.conf.gz et config/site.conf.gz
-fÉcrase sans demander même si un fichier du même nom existeÉcrasé sans question : plus de memo.txt, seulement memo.txt.gz (71 octets)
-1 ~ -9Niveau de compression (-1 le plus rapide, -9 le plus petit, par défaut -6)Les sorties compressées avec -1, -6 et -9 comptées avec wc -c : 5564, 4424, 4164

📎 Autres options : selon le manuel officiel

OptionRôle
-NEnregistre le nom et l'heure du fichier d'origine à la compression (par défaut à la compression) et les restaure à la décompression
-nN'enregistre pas le nom et l'heure du fichier d'origine à la compression, et utilise le nom sans .gz à la décompression (par défaut à la décompression)
-qN'affiche aucun avertissement
-S suffixeCompresse avec le suffixe indiqué au lieu de .gz, et cherche d'abord ce suffixe à la décompression
--rsyncableCompresse de façon que seules les parties modifiées soient envoyées quand on synchronise des fichiers compressés avec un autre serveur via rsync

🔲 Simulateur de la commande gzip

Dans le simulateur ci-dessous, vous pouvez saisir vous-même les commandes pour compresser avec gzip, décompresser et voir le contenu avec zcat et zgrep.

Simulateur de la commande gzipgzip 1.12
[root@server work]#
Il fonctionne uniquement dans le navigateur et ne compresse aucun vrai fichier. Les tailles compressées sont des valeurs mesurées, et le contenu créé dans le simulateur utilise des valeurs estimées. ↑↓ rappelle les commandes précédentes.

4️⃣ Voir le contenu d'un fichier gzip

  • ↪️ zcat · zgrep

Les anciens journaux conservés avec une date dans leur nom prennent moins de place une fois compressés avec gzip. La commande ci-dessous compresse access.log-20261027, le journal de la veille.

gzip access.log-20261027

Un journal compressé s'affiche à l'écran avec zcat sans être décompressé. zcat est la même commande que gunzip -c (selon le manuel officiel), donc le fichier .gz reste en place.

zcat access.log-20261027.gz | head -3
192.0.2.50 - - [27/Oct/2026:00:00:00 +0000] GET / HTTP/1.1 200 15929
192.0.2.54 - - [27/Oct/2026:00:00:07 +0000] GET / HTTP/1.1 200 17699
192.0.2.4 - - [27/Oct/2026:00:00:14 +0000] GET / HTTP/1.1 200 13813

La sortie de zcat peut être passée à d'autres commandes par un tube, et compté avec wc -l, ce journal fait 600 lignes.

zcat access.log-20261027.gz | wc -l
600

Pour chercher un texte précis dans un journal compressé, utilisez zgrep. Avec -c, seul le nombre de lignes contenant [ 404 ] s'affiche ; pour voir les lignes elles-mêmes, lancez-le sans -c.

zgrep -c ' 404 ' access.log-20261027.gz
37
zgrep ' 404 ' access.log-20261027.gz | head -3
192.0.2.23 - - [27/Oct/2026:00:02:06 +0000] GET /old-page-6/ HTTP/1.1 404 229
192.0.2.38 - - [27/Oct/2026:00:04:40 +0000] GET /old-page-2/ HTTP/1.1 404 217
192.0.2.22 - - [27/Oct/2026:00:07:42 +0000] GET /old-page-6/ HTTP/1.1 404 414

Quand zcat reçoit un fichier non compressé, il affiche [not in gzip format] et s'arrête.

zcat access.log | head -1

gzip: access.log: not in gzip format

zgrep lit aussi tels quels les fichiers non compressés, ce qui permet de chercher en une fois dans le journal actuel et dans les anciens journaux compressés. Avec deux fichiers ou plus, le nom du fichier précède le nombre de lignes.

zgrep -c wp-login.php access.log access.log-20261027.gz
access.log:36
access.log-20261027.gz:52

5️⃣ Erreurs gzip

  • ↪️ not in gzip format et unexpected end of file

Si vous recompressez un fichier qui se termine déjà par .gz, [already has .gz suffix -- unchanged] s'affiche et le fichier reste tel quel.

gzip access.log.gz
gzip: access.log.gz already has .gz suffix -- unchanged

À l'inverse, si vous décompressez avec -d un fichier qui ne se termine pas par .gz, [unknown suffix -- ignored] s'affiche.

gzip -d memo.txt
gzip: memo.txt: unknown suffix -- ignored

Un fichier qui porte seulement le nom .gz sans avoir été compressé avec gzip se termine par [not in gzip format]. Ce message est apparu en copiant le fichier texte memo.txt sous le nom notgzip.gz puis en le décompressant.

cp memo.txt notgzip.gz
gzip -d notgzip.gz

gzip: notgzip.gz: not in gzip format

Un fichier .gz dont la fin est coupée, par exemple après un téléchargement interrompu, se termine par [unexpected end of file]. Voici le résultat de la vérification avec -t de broken.gz, qui ne garde que les 2 000 premiers octets d'un ancien journal compressé.

head -c 2000 access.log-20261027.gz > broken.gz
gzip -t broken.gz

gzip: broken.gz: unexpected end of file

Même d'un fichier coupé, zcat peut extraire le contenu jusqu'à l'endroit de la coupure. Sur les 600 lignes du journal, 162 sont restées dans restore/broken.log, et le manuel officiel conseille lui aussi de récupérer le début d'un fichier compressé endommagé avec zcat.

zcat broken.gz > restore/broken.log
wc -l restore/broken.log

gzip: broken.gz: unexpected end of file
162 restore/broken.log

Si un fichier du même nom que le .gz à créer existe déjà, gzip demande s'il faut l'écraser. En tapant n, la commande se termine par [not overwritten] sans rien changer.

gzip memo.txt
gzip: memo.txt.gz already exists; do you wish to overwrite (y or n)? n
	not overwritten

Avec -f, gzip écrase directement sans demander. Comme -k n'a pas été ajouté, memo.txt disparaît et seul memo.txt.gz reste.

gzip -f memo.txt
ls -l memo.txt memo.txt.gz
ls: cannot access 'memo.txt': No such file or directory
-rw-r--r-- 1 root root 71 Oct 28 14:30 memo.txt.gz

Voici les messages d'erreur rencontrés en manipulant la compression et ce qu'il faut vérifier ensuite.

SortieSignificationÀ vérifier ensuite
already has .gz suffix -- unchangedLe fichier se termine déjà par .gz et n'est pas recompresséAvez-vous écrit le nom du fichier d'origine à compresser
unknown suffix -- ignoredTentative de décompresser un fichier qui ne se termine pas par .gzLe nom du fichier .gz avec ls
not in gzip formatNommé .gz mais non compressé avec gzipLe format réel (zip, tar) et la commande correspondante
unexpected end of fileLa fin du fichier compressé est coupéeComparer la taille avec l'original et retélécharger · récupérer le début avec zcat
already exists; do you wish to overwriteUn fichier du même nom que celui à créer existe déjày ou -f si l'écrasement convient · -c avec un autre nom pour le garder
is a directory -- ignoredNom de dossier au lieu d'un fichier-r pour les fichiers d'un dossier · tar pour les regrouper en un seul

🔢 FAQ & contenus recommandés

Après avoir regroupé le dossier config dans x.tar avec tar, l'avoir compressé avec gzip -v puis décompressé avec gunzip -v, seule la couche .gz a été retirée et il restait un x.tar de 10 240 octets. Pour sortir les fichiers regroupés, il faut l'extraire encore une fois avec tar. En recompressant x.tar.gz puis en l'extrayant avec tar -xzf dans le dossier restore/t, le dossier config et les deux fichiers de configuration sont sortis en une seule fois.

Un fichier de 28 648 800 octets formé du même journal d'accès répété 600 fois a été compressé deux fois à chaque niveau. -1 a pris environ 0,3 seconde pour 4 821 317 octets, -6 par défaut environ 0,65 seconde pour 3 625 500 octets, et -9 environ 2,5 secondes pour 3 376 224 octets. -9 était environ 7 % plus petit que -6, mais a pris près de quatre fois plus de temps.

gzip enregistre le nom du fichier d'origine dans le .gz lors de la compression. Après avoir copié readme.txt.gz dans le dossier restore sous le nom backup-1.gz, gzip -lN a affiché le nom enregistré readme.txt, et gunzip -N a créé restore/readme.txt. Sans -N, le nom est celui du fichier sans .gz (selon le manuel officiel).

ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Prouvez que vous êtes humain : 1   +   4   =