bzip2(1) General Commands Manual bzip2(1)

bzip2, bunzip2 - compresseur de fichiers par tri de blocs, v1.0.8
bzcat - décompresse les fichiers sur la sortie standard
bzip2recover - récupère des données de fichiers bzip2 endommagés

bzip2 [ -cdfkqstvzVL123456789 ] [ noms_fichiers ... ]
bunzip2 [ -fkvsVL ] [ noms_fichiers ... ]
bzcat [ -s ] [ noms_fichiers ... ]
bzip2recover nom_fichier

bzip2 compresse des fichiers en utilisant l'algorithme de compression de texte par tri de blocs de Burrows-Wheeler et le codage d'Huffman. La compression est généralement nettement meilleure que celle atteinte par des compresseurs plus conventionnels basés sur LZ77/LZ78 et approche les performances de la famille des compresseurs statistiques PPM.

Les options de ligne de commandes sont délibérément très similaires à celles de GNU gzip, mais elles ne sont pas identiques.

bzip2 attend une liste de noms de fichiers pour accompagner les options de ligne de commandes. Chaque fichier est remplacé par une version compressée de lui-même, avec le nom « nom_original.bz2 ». Chaque fichier compressé a la même date de modification, les mêmes permissions et, quand c'est possible, les mêmes propriétés que celles du fichier original, de sorte que ces caractéristiques peuvent être correctement restaurées au moment de la décompression. Le traitement du nom du fichier est naïf dans le sens qu'il n'y a pas de mécanisme pour préserver les noms, permissions, propriétés et dates des fichiers situés dans des systèmes de fichiers où ces concepts font défaut, ou qui souffrent de restrictions strictes sur la longueur des noms de fichiers, comme MS-DOS.

bzip2 et bunzip2, par défaut, n'écraseront pas les fichiers existants. Si vous voulez que cela se produise, utilisez l'option -f.

Si aucun nom de fichier n'est indiqué, bzip2 compresse de l'entrée standard vers la sortie standard. Dans ce cas, bzip2 n'écrira pas la sortie compressée sur un terminal, puisque cela serait incompréhensible et donc inutile.

bunzip2 (ou bzip2 -d) décompresse tous les fichiers spécifiés. Les fichiers qui n'ont pas été créés par bzip2 seront détectés et ignorés et un avertissement sera émis. bzip2 tente de deviner le nom du fichier pour le fichier décompressé à partir de celui du fichier compressé de la manière suivante :


nom_fichier.bz2 devient nom_fichier
nom_fichier.bz devient nom_fichier
nom_fichier.tbz2 devient nom_fichier.tar
nom_fichier.tbz devient nom_fichier.tar
autre_nom devient autre_nom.out

Si le nom du fichier ne se termine pas par une des terminaisons reconnues, .bz2, .bz, .tbz2 ou .tbz, bzip2 signale qu'il ne peut pas deviner le nom du fichier original et utilise le nom d'origine en lui ajoutant .out.

Comme pour la compression, si aucun nom de fichier n'est fourni, la commande décompresse de l'entrée standard vers la sortie standard.

bunzip2 décompressera correctement un fichier qui est la concaténation de deux fichiers compressés ou plus. Le résultat est la concaténation des fichiers non compressés correspondants. Le test d'intégrité (-t) des fichiers compressés concaténés est aussi prise en charge.

Il est également possible de compresser ou décompresser vers la sortie standard en fournissant l'option -c. Plusieurs fichiers peuvent être compressés ou décompressés ainsi. Les sorties résultantes sont envoyées de façon séquentielle à la sortie standard. La compression de plusieurs fichiers de cette manière génère un flux contenant la représentation des divers fichiers compressés. Un flux de ce type ne peut être décompressé correctement que par bzip2 version 0.9.0 ou ultérieure. Les versions antérieures de bzip2 s'arrêtent après la décompression du premier fichier du flux.

bzcat (ou bzip2 -dc) décompresse tous les fichiers spécifiés vers la sortie standard.

bzip2 lira les arguments à partir des variables d'environnement BZIP2 et BZIP, dans cet ordre, et les traitera avant tout argument lu à partir de la ligne de commande. Cela offre une façon pratique de fournir des arguments par défaut.

La compression est toujours effectuée, même si le fichier compressé est légèrement plus grand que le fichier original. Les fichiers de moins d'une centaine d'octets ont tendance à s'agrandir dans la mesure où le mécanisme de compression comporte une surcharge constante de l'ordre de 50 octets. Des données aléatoires (y compris la sortie de la plupart des compresseurs de fichiers) sont codées à environ 8,05 bits par octet, aboutissant à une expansion autour de 0,5 %.

En tant que vérification interne, bzip2 utilise des CRC 32 bits pour s'assurer que la version décompressée d'un fichier est identique au fichier d'origine. Ceci permet une protection contre la corruption des données compressées et contre des bogues non détectés de bzip2 (heureusement très improbable). La probabilité qu'une corruption de données passe inaperçue est infime, environ une chance sur 4 milliards pour chaque fichier compressé. Soyez conscients, toutefois, que la vérification se produit pendant la décompression, et qu'elle ne peut donc vous informer que lorsque quelque chose s'est mal passé. Cela ne peut pas vous aider à récupérer les données non compressées d'origine. Vous pouvez utiliser bzip2recover pour essayer de récupérer des données de fichiers endommagés.

Valeurs de retour : 0 pour une sortie normale, 1 pour des problèmes d'environnement (fichier non trouvé, options invalides, erreurs d'entrée/sortie, etc.), 2 pour indiquer un fichier compressé corrompu, 3 pour une erreur de consistance interne (un bogue, par exemple) qui a fait paniquer bzip2.

Compresser ou décompresser vers la sortie standard.
Forcer la décompression. bzip2, bunzip2 et bzcat constituent en fait le même programme, et la décision quant aux actions à entreprendre est déterminée sur la base du nom utilisé. Cette option annule ce mécanisme et force bzip2 à décompresser.
Le complément de -d : force la compression, quel que soit le nom d'invocation.
Vérifier l'intégrité des fichiers spécifiés, mais ne pas les décompresser. Cela réalise réellement une décompression d'essai et jette le résultat.
Forcer l'écrasement des fichiers en sortie. Normalement, bzip2 n'écrasera pas les fichiers de sortie préexistants. L'option force également bzip2 à briser les liens physiques (hard links) de fichiers, ce qu'il ne ferait pas autrement.

Normalement, bzip2 refuse de décompresser des fichiers qui ne possèdent pas les octets magiques d'en-tête corrects. Néanmoins, s'il est forcé (-f), néanmoins, il passe ces fichiers sans les modifier. C'est ainsi que GNU gzip se comporte.

conserver (ne pas supprimer) les fichiers d'entrée durant la compression ou la décompression.
Réduire l'utilisation de la mémoire pour la compression, la décompression et la vérification. Les fichiers sont décompressés et testés en utilisant un algorithme modifié qui requiert uniquement 2,5 octets par bloc d'un octet. Cela signifie que tout fichier peut être décompressé dans 2 300 Ko de mémoire, même s'il le sera à une vitesse deux fois plus lente que la vitesse normale.

Durant la compression, -s sélectionne une taille de bloc de 200 Ko, ce qui limite l'utilisation de mémoire au même nombre environ, aux dépens du coefficient de compression. Bref, si votre machine possède peu de mémoire vive (8 Mo ou moins), utilisez -s pour tout ce que vous faites. Voir GESTION DE LA MÉMOIRE plus bas.

Supprimer les messages d'avertissement non essentiels. Les messages se rattachant aux erreurs d'E/S et à d'autres événements critiques ne sont pas supprimés.
Mode bavard – montre le coefficient de compression pour chaque fichier traité. Des -v supplémentaires augmentent le niveau de détail, en affichant des tas d'informations qui sont principalement utiles à des fins de diagnostic.
Afficher la version du logiciel, les termes de sa licence et les conditions d'utilisation.
-1 (ou --fast) à -9 (ou --best)
Fixer la taille de bloc à 100, 200, ... 900 ko pendant la compression. Cette option n'a aucun effet sur la décompression. Voir GESTION DE LA MÉMOIRE ci-dessous. Les alias --fast et --best existent principalement pour la compatibilité avec GNU gzip. En particulier, --fast ne rend pas les traitements significativement plus rapides. Et --best sélectionne simplement le comportement par défaut.
--
Traite tous les arguments suivants comme des noms de fichier, même s'ils débutent par un tiret. Il est ainsi possible de traiter des fichiers dont le nom débute par un tiret, par exemple  « bzip2 -- -mon_fichier ».
Ces options sont redondantes dans les versions 0.9.5 et ultérieures. Elles fournissent un contrôle assez grossier sur le comportement de l'algorithme de tri dans les versions antérieures, ce qui était parfois utile. Les versions 0.9.5 et ultérieures disposent d'un algorithme amélioré qui rend l'usage de ces options inutile.

bzip2 compresse des fichiers importants par blocs. La taille de bloc affecte à la fois le coefficient de compression atteint et la quantité de mémoire nécessaire pour la compression et la décompression. Les options -1 à -9 précisent la taille de bloc utilisée, de 100 000 octets à 900 000 octets (par défaut) respectivement. Au moment de la décompression, la taille de bloc utilisée pour la compression est lue à partir de l'en-tête du fichier compressé, et bunzip2 s'alloue ensuite juste assez de mémoire pour décompresser le fichier. Puisque les tailles de blocs sont conservées dans les fichiers compressés, il s'ensuit que les options -1 à -9 ne sont pas pertinentes et qu'elles sont donc ignorées durant la décompression.

Les besoins en mémoire de la compression et de la décompression, en octets, peuvent être estimés à :


Compression : 400k + ( 8 x taille de bloc )


Décompression : 100k + ( 4 x taille de bloc ), ou
100k + ( 2.5 x taille de bloc )

Des largeurs de blocs plus importantes voient les bénéfices marginaux retirés diminuer rapidement. L'essentiel de la compression provient des deux ou trois cents premiers ko de la taille de bloc, un fait à retenir quand on utilise bzip2 sur de petites machines. Il est également important de savoir que les exigences mémoire de la décompression sont fixées au moment de la compression par le choix d'une taille de bloc.

Pour les fichiers compressés avec la taille de bloc par défaut de 900 Ko, bunzip2 aura besoin d'environ 3 700 Ko pour la décompression. Pour permettre la décompression de tout fichier sur une machine avec 4 Mo de RAM, bunzip2 possède une option pour décompresser en n'utilisant que la moitié environ de ces 3 700 Ko, à savoir à peu près 2 300 Ko. Malheureusement, la vitesse de décompression est également réduite de moitié, donc vous ne devriez utiliser cette option (-s) qu'en cas de nécessité absolue.

En général, essayez d'utiliser la taille de bloc mémoire la plus grande permise, puisque cela maximise la qualité de la compression atteinte. Les vitesses de compression et de décompression ne sont en fait pas affectées par la taille de bloc.

Un autres aspect significatif s'applique aux fichiers qui peuvent tenir dans un seul bloc – c'est-à-dire la plupart des fichiers que vous rencontrez en utilisant une grande taille de bloc. La quantité réelle de mémoire utilisée est proportionnelle à la taille du fichier, puisque le fichier est plus petit qu'un bloc. Par exemple, compresser un fichier de 20 000 octets avec l'option -9 forcera le compresseur à allouer environ 7 600 Ko de mémoire, mais n'en utilisera réellement que 400 Ko + 20 000 * 8 = 560 Ko. De même, le décompresseur allouera 3 700 Ko mais n'utilisera que 100 Ko + 20 000 * 4 = 180 Ko.

Voici une table qui résume l'utilisation maximale de la mémoire pour différentes tailles de blocs, ainsi que la taille compressée totale de 14 fichiers du Calgary Text Compression Corpus totalisant 3 141 622 octets. Cette table donne un certain aperçu sur l'évolution de la compression avec la taille de bloc. Ces chiffres tendent à minimiser l'avantage des tailles de blocs plus importantes pour les fichiers plus imposants, car le Corpus est dominé par des petits fichiers.


Usage Usage Usage Taille du
Option compr. décompr. décompr. -s Corpus


-1 1200k 500k 350k 914704
-2 2000k 900k 600k 877703
-3 2800k 1300k 850k 860338
-4 3600k 1700k 1100k 846899
-5 4400k 2100k 1350k 845160
-6 5200k 2500k 1600k 838626
-7 6100k 2900k 1850k 834096
-8 6800k 3300k 2100k 828642
-9 7600k 3700k 2350k 828642

bzip2 compresse les fichiers en blocs d'une longueur d'habituellement 900 Ko. Chaque bloc est traité indépendamment des autres. Si un défaut du support physique ou une erreur de transmission provoque l'endommagement d'un fichier multi-blocs, il peut être possible de récupérer des données à partir des blocs non endommagés du fichier.

La représentation compressée de chaque bloc est délimitée par un motif de 48 bits, ce qui permet de trouver les limites des blocs avec une probabilité raisonnable. Chaque bloc comporte également son propre CRC 32 bits, de sorte que les blocs corrompus peuvent être distingués des autres.

bzip2recover est un programme simple dont le but est de rechercher les blocs dans les fichiers .bz2, et d'écrire chaque bloc détecté dans son propre fichier .bz2. Vous pouvez alors utiliser bzip2 -t pour tester l'intégrité des fichiers résultants et décompresser ceux qui ne sont pas endommagés.

bzip2recover prend un seul argument, le nom du fichier endommagé, et écrit un certain nombre de fichiers « rec0001file.bz2 », « rec0002file.bz2 », etc, contenant les blocs extraits. Les noms de fichiers en sortie sont conçus de sorte que l'utilisation de jokers (wildcards) dans des traitements ultérieurs – par exemple, « bzip2 -dc rec*file.bz2 > données_récupérées » – liste les fichiers dans le bon ordre.

bzip2recover devrait être utilisé principalement pour traiter les grands fichiers .bz2, puisque ceux-ci contiennent de nombreux blocs. Il est clairement inutile d'essayer de l'utiliser sur des fichiers endommagés d'un seul bloc, car un seul bloc endommagé ne peut pas être récupéré. Si vous voulez minimiser toute perte potentielle de données à cause d'erreurs de transmission, vous devriez envisager d'utiliser une taille de bloc plus restreinte.

La phase de tri de la compression réunit les chaînes de caractères similaires présentes dans le fichier. À cause de cela, les fichiers contenant de très longues suites de symboles répétés, comme « aabaabaabaab ... » (répétés plusieurs centaines de fois) peuvent être compressés plus lentement que d'habitude. Les versions 0.9.5 et ultérieures se conduisent nettement mieux que les versions précédentes de ce point de vue. Le rapport entre le temps de compression dans le pire des cas et dans le cas moyen est de l'ordre de 10 pour 1. Pour les versions antérieures, ce rapport était de 100 pour 1. Vous pouvez utiliser l'option -vvvv pour voir la progression dans les détails, si vous le souhaitez.

La vitesse de décompression n'est pas affectée par ces phénomènes.

bzip2 alloue d'habitude plusieurs Mo de mémoire pour ses besoins, et ensuite charge le tout d'une manière assez aléatoire. Cela signifie que les performances, à la fois pour la compression et la décompression, sont largement déterminées par la vitesse à laquelle votre machine peut traiter les défauts de cache. À cause de cela, de petites modifications du code pour réduire le taux d'échec en cache ont donné des améliorations de performances disproportionnées. bzip2 aura sans doute de meilleur performances sur des machines avec de très grands caches.

Les messages d'erreurs d'E/S ne sont pas d'une grande utilité. bzip2 essaie vraiment de détecter les erreurs d'E/S et de s'arrêter proprement, mais les détails du problème rencontré peuvent parfois induire en erreur.

Cette page de manuel concerne la version 1.0.8 de bzip2. Les données compressées créées par cette version sont entièrement compatibles de façon descendante et ascendante avec les versions antérieures 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 et ultérieures, à l'exception que les versions 0.9.0 et ultérieures peuvent correctement décompresser de multiples fichiers compressés et concaténés. La version 0.1pl2 ne sait pas le faire; elle s'arrêtera après la décompression du premier fichier du flux.

Les versions bzip2recover antérieures à 1.0.2 utilisait des entiers de 32 bits pour représenter les positions des bits dans les fichiers compressés ; de ce fait, elles ne pouvaient traiter de fichiers compressés de plus de 512 Mo de long. Les versions 1.0.2 et ultérieures utilisent des entiers de 64 bits sur certaines plateformes qui les prennent en charge (cibles gérées par GNU et Windows). Pour savoir si bzip2recover a été construit avec ou sans cette limitation, exécutez-le sans argument. Dans tous les cas, vous pouvez reconstruire une version non limitée si vous pouvez le recompiler avec MaybeUInt64 défini comme un entier 64 bits non signé.

Julian Seward, jseward@acm.org.

https://sourceware.org/bzip2/

Les idées intégrées à bzip2 sont dues (entre autres) aux personnes suivantes : Michael Burrows et David Wheeler (pour la transformation de tri de blocs), David Wheeler (à nouveau, pour le codeur Huffman), Peter Fenwick (pour le modèle de codage structuré du bzip original et pour de nombreux raffinements), et Alistair Moffat, Radford Neal et Ian Witten (pour le codeur arithmétique du bzip original). Je suis très reconnaissant à ces personnes pour leur aide, leur soutien et leurs conseils. Voyez le manuel dans la distribution source pour obtenir des liens vers les sources de documentation. Christian von Roques m'encouragea à chercher des algorithmes de tri plus rapides, pour accélérer la compression. Bela Lubkin m'encouragea à améliorer la performance de la compression dans le pire des cas. Beaucoup de personnes m'ont envoyé des correctifs, aidé pour des problèmes de portabilité, prêté des machines, donné des conseils et ont été généralement utiles.

La traduction française de cette page de manuel a été créée par Frédéric Delanoy <delanoy_f@yahoo.com> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.