English Version
Site principal

La page d'accueil degzip

Patch de sécurité important

gzip 1.2.4 ne traite pas correctement les noms de fichiers trop longs (plus de 1020 caractères). Un débordement de tampon peut être exploité si gzip est exécuté par un serveur tel qu'un serveur ftp. Certains serveurs ftp permettent une compression à la volée et sont donc vulnérables. Des détails techniques sont disponibles ici. Ce patch pour gzip 1.2.4 corrige le problème. La version beta 1.3.3 a déjà un patch suffisant; utilisez cette version si vous devez compresser ou décompresser des fichiers de plus de 2 GO. Une nouvelle version officielle de gzip sera bientôt disponible.

Introduction

gzip (GNU zip) est un programme de compression destiné à remplacer compress. Ses principaux avantages sur compress sont une compression nettement meilleure et le fait d'être non breveté. Il a été adopté par le projet GNU et est maintenant relativement populaire sur Internet. gzip a été écrit par Jean-loup Gailly (jloup@gzip.org), et Mark Adler pour le code de décompression.

gzip produit des fichiers avec une extension .gz. gunzip peut décompresser des fichiers créés par gzip, compress ou pack. La détection du format d'entrée est automatique.

Le format des fichiers .gz générés par gzip est décrit dans les RFCs (Request For Comments) 1951 et 1952. Des informations supplémentaires sur le format gzip sont disponibles ici. Une brève description des algorithmes de compression et de décompression utilisés par gzip est donnée ici. Une introduction plus informelle écrite par Antaeus Feldspar est ici (en anglais).

Si vous avez une question à propos de gzip, cherchez d'abord la réponse dans cette page. Si vous ne la trouvez pas, écrivez à support@gzip.org . Donnez des informations aussi détaillées que possible, au minimum le nom de votre système d'exploitation (Windows XP, Linux...), la commande exacte que vous avez tapé et les messages d'erreurs exacts que vous avez obtenus. Si vous dites seulement "gzip ne marche pas" je ne peux pas vous aider.

Sources

Les sources C de gzip sont disponibles ici en plusieurs formats: Appuyez sur la touche MAJ puis cliquez sur un lien pour télécharger un des fichiers. Vous pouvez aussi obtenir ces fichiers de nombreux sites miroirs.

Pour extraire des fichiers .tar ou .tar.gz avec Windows 9x/NT/2000/ME/XP, utilisez 7-zip (gratuit) ou PowerArchiver (commercial) ou Winzip (commercial). Pour tar avec MSDOS ou d'autres systèmes, consultez la liste FAQ du groupe comp.compression

Pour extraire gzip-1.2.4.tar et compiler les sources sur un système Unix, tapez:

    tar xvf gzip-1.2.4.tar
    cd gzip-1.2.4
    ./configure
    make

Sur plusieurs systèmes, des erreurs du compilateur causent des erreurs dans gzip, en particulier avec les options d'optimisation. Voir la section "Special targets" à la fin du fichier INSTALL pour la liste des problèmes connus. Pour toutes les machines, utilisez make check pour vérifier que gzip a été compilé correctement. Essayez sans aucune optimisation si vous avez un problème.

Le manuel utilisateur de gzip est disponible (en anglais) ici.

Exécutables

Des exécutables pour different systèmes sont disponibles ici:

Pour Linux ou BeOS, gzip est déjà sur votre système.

Pour extraire des fichiers tar.Z sur Unix:

    zcat fichier.tar.Z | tar xvf -

Foire Aux Questions

gunzip se plaint d'une erreur de CRC

99.9% des problèmes avec gzip sont dus à un transfert de fichier effectué en mode ASCII au lieu du mode BINARY. En particulier, gopher est connu pour corrompre des fichiers binaires en les considérants comme ASCII. Verifiez que votre copie locale du fichier a exactement la même taille que l'original.

Si vous avez transféré un fichier en mode ASCII et vous n'avez plus accès à l'original, vous pouvez essayer le programme fixgz pour enlever le surplus de caractères CR (carriage return) insérés par le transfert. Un exécutable pour Windows 9x/NT/2000/ME/XP est ici. Mais il n'y a absoluement aucune garantie que ceci va corriger le fichier endommagé. Conclusion: ne transférez jamais un fichier binaire en mode ASCII. Pour compiler fixgz et l'éxécuter, faites:

   cc -o fixgz fixgz.c
   fixgz  mauvais.gz  corrige.gz
   gzip -tv corrige.gz

gunzip se plaint de fichier multi-part

C'est le même problème que ci-dessus: un transfert fait en mode non binaire a corrompu l'entête du fichier, et induit gunzip à émettre un message d'erreur incorrect. Transférez le fichier de nouveau, mais en mode binaire.

Ou est gunzip pour MSDOS ou Windows?

La distribution de gzip pour MSDOS contient un fichier README.DOS, lisez-le. En bref:

     copy gzip.exe gunzip.exe

Y a t il une interface Windows pour gzip?

7-zip, PowerArchiver et Winzip peuvent décompresser des fichiers .gz et tar.gz. Win-GZ peut compresser et décompresser les fichiers au format gzip. Notez que gzip, 7-zip et Win-GZ sont gratuits, mais qu'il faut enregistrer Winzip ou PowerArchiver pour une utilisation régulière.

Puis-je adapter les sources de gzip pour effectuer la compression en mémoire?

Utilisez plutôt la librairie de compression zlib.

Comment extraire un fichier tar.gz ou .tgz?

Les fichiers avec extension tar.gz ou .tgz sont des fichiers tar compressés avec gzip. Sur un système Unix on peut les extraire avec:
    gunzip < fichier.tar.gz | tar xvf -
    gunzip < fichier.tgz    | tar xvf -
Si vous avez GNU tar vous pouvez utiliser l'option z directement:
    gtar xvzf fichier.tar.gz
    gtar xvzf fichier.tgz

Pour Windows 9x/NT/2000/ME/XP, utilisez 7-zip (gratuit) ou PowerArchiver (commercial) ou Winzip (commercial).

gzip se plaint de Broken pipe

Si vous utilisez les commandes ci-dessus pour extraire un fichier tar.gz, gzip émet quelquefois un message d'erreur Broken pipe. Ceci peut être ignoré sans problème si tar a extrait tous les fichiers sans autre message d'erreur.

L'origine de ce message est que tar s'arrête de lire à la fin logique du fichier tar qui ne coïncide pas toujours avec la fin physique du fichier. gzip ne peut donc plus écrire le reste du fichier tar dans le pipe qui a été fermé.

Ce problème n'arrive qu'avec certains shells, principalement bash. Ces shells transmettent le signal SIGPIPE à l'utilisateur, mais la plupart des autres (tels que tcsh) ignorent le signal silencieusement.

Vous pouvez facilement reproduire le même message d'erreur avec des programmes autres que gzip et tar, par exemple:

  cat /dev/zero | dd bs=1 count=1

gzip se plaint de trailing garbage ignored

Certains fichiers tar.gz sont complétés avec des zéros à la fin pour qu'ils aient une taille multiple d'une certaine taille de block. Ceci arrive en particulier quand le fichier tar est sur une bande magnétique. Quand de tels fichiers sont extraits avec une commande telle que
    gunzip < fichier.tar.gz | tar xvf -
    gtar xvzf /dev/rmt/0
gunzip décompresse correctement le fichier tar.gz, puis essaie de décompresser le reste des données qui n'est constitué que de zéros. Puisque ces zéros ne sont pas au format gzip, gzip les ignore. La commande d'extraction tar fonctionne correctement néanmoins, puisque gzip a envoyé dans le pipe toutes les données dont tar a besoin.

Vous pouvez éviter ce message innofensif en utilisant l'option -q de gzip, comme ceci:

    gunzip -q < fichier.tar.gz | tar xvf -
    GZIP=-q           gtar xvzf /dev/rmt/0         # pour bash, ksh, sh ...
    (setenv GZIP -q;  gtar xvzf /dev/rmt/0)        # pour csh, tcsh, ...

Mon disque dur a des mauvais secteurs. Puis-je récupérer mes fichiers .gz?

Vous le savez déjà, mais laissez moi le répéter: rien ne remplace une sauvegarde. Si vous utilisez gzip pour des sauvegardes importantes, vous devez tester les fichiers de sauvegarde avant de détruire les fichiers originaux. Pour tester un fichier tar.gz, faire:
       pour GNU  tar:  tar tvfz fichier.tar.gz
       pour tout tar:  gunzip < fichier.tar.gz | tar tvf -
Si vous transférez le fichier tar.gz sur une autre machine, testez le fichier de destination après le transfert, pas le fichier d'origine. Ceci mettra en évidence les mauvais transferts. Si vous n'utilisez pas tar, faites au moins gzip -tv fichier.gz pour tester les fichiers importants. Une fois le fichier endommagé, il est très difficile sinon impossible de le récupérer. Si vos données sont si importantes que vous soyez prêt à passer beaucoup de temps pour en récupérer une partie, lisez ceci (en anglais, désolé).

gzip peut il traiter des fichiers de plus de 4 gigabytes?

Oui, mais il faut d'abord appliquer ce patch aux sources de gzip 1.2.4, ou utiliser la version beta 1.3.x. Voir la section exécutables pour télécharger des binaires avec le patch déjà inclus.

Les fichiers déjà compressés sans le patch sont corrects; le patch n'est utile que pour la décompression. La décompression avec zcat produit les données correctes, plus un message d'erreur length error que vous pouvez ignorer pour un seul fichier. Par exemple vous pouvez décompresser sans le patch avec:

     gunzip < fichier.gz > fichier
zcat sur plusieurs fichiers s'arrêtera à la première erreur, donc utilisez le patch pour éviter tout problème.

Pour obtenir un binaire corrigé, copiez le fichier 4g-patch.tar dans le répertoire contenant les sources de gzip, puis faites:

     tar xvf 4g-patch.tar
     make

Pour certains systèmes (Solaris 2.6, AIX), vous pouvez avoir le message d'erreur "Value too large for defined data type". Une version complète corrigeant ce problème est disponible ici, grâce à Paul Eggert. Pour AIX, ajoutez "-D_POSIX_SOURCE -D_LARGE_FILES -D_LARGE_FILE_API" aux options de compilation.

Et les brevets?

gzip a été conçu comme un remplacement pour compress à cause des brevets d'UNISYS et d'IBM couvrant l'algorithme LZW utilisé par compress.

J'ai probablement passé plus de temps à étudier les brevets qu'à réellement coder des algorithmes de compression. Je maintiens une liste de plusieurs centaines de brevets sur des algorithmes de compression sans perte, et j'ai fait en sorte que gzip ne soit couvert par aucun de ceux ci. En particulier, l'option --fast de gzip n'est pas aussi rapide qu'il serait possible, précisement pour éviter une technique déjà brevetée.

La première version de l'algorithme de compression utilisé par gzip est apparue dans zip 0.9, rendu public le 11 Juillet 1991. Donc tout brevet obtenu après le 11 Juillet 1992 ne peut pas menacer gzip pour cause de publication antérieure, et j'ai vérifié tous les brevets obtenus avant cette date.

Pendant ma recherche, j'ai trouvé deux brevets intéressants sur une opération mathématiquement impossible: la compression de données aléatoires. Ceci est à peu près équivalent aux brevets sur les machines à mouvement perpétuel. Jetez un oeil ici (en anglais) pour voir une courte analyse de ces deux brevets.

L'an 2000?

gzip gère correctement les dates de l'an 2000 et au delà. Des informations supplémentaires sur les logiciels GNU et l'an 2000 se trouvent ici.

Erreur de compilation pour utimbuf

Sur les systèmes comme AIX qui déclarent utimbuf dans unistd.h au lieu de utime.h, utilisez:
 
    make CFLAGS="-UHAVE_UNISTD_H"

Je ne peux pas compiler gzip sur Solaris

Il faut un compilateur pour compiler gzip and gzip pour obtenir gcc. Pour sortir de ce problème de poule et d'oeuf, installez d'abord l'exécutable de gzip pour Solaris (Sparc ou i386). Voir également ici pour des versions beta.

gzip a t il une option de cryptage?

Non. Les algorithmes de cryptage simples tels que celui de PKZIP peuvent être cassés. Et ajouter à gzip du cryptage serieux tel que celui de PGP n'aurait pas grand sens car cela dupliquerait la fonctionalité de ces programmes. PGP utilise déjà le code de compression de gzip, donc prenez PGP si vous avez besoin de compression et de cryptage sérieux. (Mais l'utilisation de PGP est interdite en France. Voir aussi la chronique netizen à ce propos.)

Si du cryptage faible vous suffit, vous pouvez utiliser zip.

gzip peut-il compresser plusieurs fichiers en une seule archive?

Pas directement. Vous pouvez créer d'abord un fichir tar puis le compresser:
    pour  GNU tar:   gtar cvzf fichier.tar.gz  fichiers
    pour tout tar:   tar cvf -  fichiers | gzip > fichier.tar.gz
Vous pouvez aussi utiliser zip (gratuit), 7-zip (gratuit), PowerArchiver (commercial) ou Winzip (commercial). Le format zip permet un accès direct à chaque fichier dans l'archive, mais le format tar.gz donne généralement un meilleur taux de compression.

gunzip peut-il extraire une archive .zip?

Non. Utilisez unzip à la place. Pour Windows, utilisez WiZ ou 7-zip (tous deux gratuits) ou Winzip ou PowerArchiver (commerciaux).

Liens

Jean-loup GaillyLa page de l'auteur de gzip, Jean-loup Gailly
La page du co-auteur Mark Adler Mark Adler
La librairie zlibégalement écrite par Jean-loup et Mark.

Tout ceci a commencé avec le projet zip

question
FAQ (Foire Aux Questions) du groupe de news comp.compression.

Merci beaucoup à teaser pour le support du domaine gzip.org et pour son excellent service.
Merci à Greg Roelofs pour le logo gzip.

La page d'accueil de gzip en français est http://www.gzip.org/index-f.html

write
Dernière modification: 27 juillet 2003. Envoyez vos commentaires à jloup@gzip.org . La clé PGP de Jean-loup Gailly est ici.

Retour à l'index
Retour à la page de Jean-loup Gailly