> Linux Reviews > man >

bzip2

, bunzip2 Compression de fichiers par tri de blocs, v0.9.5.


  1. bzip2.1.man


1. bzip2.1.man

Manpage of BZIP2

BZIP2

Section: Manuel de l'utilisateur Linux (1)
Updated: 9 Août 2000
Index Return to Main Contents
 

NOM

bzip2, bunzip2 - Compression de fichiers par tri de blocs, v0.9.5.
bzcat - Décompresser les fichiers sur stdout.
bzip2recover - Récupérer des données de fichiers bzip2 endommagés.

 

SYNOPSIS

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

 

DESCRIPTION

bzip2 compresse les 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 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 à celle 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". Un fichier compressé a les mêmes 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 correctement être 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 les dates des fichiers situés dans des systèmes de fichiers où ces concepts manquent, ou qui ont des restrictions strictes en ce qui concerne la longueur des noms de fichiers, comme MS-DOS.

bzip2 et bunzip2, par défaut, n'écraseront pas les fichiers existants. Si vous voulez le contraire, 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 sur un terminal, puisque cela serait incompréhensible et donc inutile.

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


       nom_fichier.bz2    devient   nom_du_fichier
       nom_fichier.bz     devient   nom_du_fichier
       nom_fichier.tbz2   devient   nom_du_fichier.tar
       nom_fichier.tbz    devient   nom_du_fichier.tar
       unautrenom         devient   unautrenom.out
        Si le fichier ne se termine pas par l'un des suffixes reconnus, à savoir .bz2, .bz, .tbz2 et .tbz, bzip2 se plaindra de ne pas pouvoir deviner le nom du fichier original, et utilisera le nom du fichier auquel il ajoutera .out à la fin.

Comme pour la compression, ne pas fournir de nom de fichier provoque la décompression 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 de fichiers non compressés correspondants. Le test d'intégrité (-t) des fichiers compressés concaténés est également supporté.

Vous pouvez aussi compresser ou décompresser des fichiers sur la sortie standard en fournissant l'option -c. De multiples fichiers peuvent être compressés et décompressés de cette façon. Les sorties résultantes sont envoyées séquentiellement sur stdout. La compression de multiples fichiers d'une telle façon génère un flux contenant de multiples représentations de fichiers compressés. Un tel flux ne peut être décompressé correctement que par bzip2 version 0.9.0 ou ultérieure. Les versions antérieures de bzip2 s'arrêteront après la décompression du premier fichier du flux.

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

bzip2 lira les arguments dans les variables d'environnement BZIP2 et de BZIP, dans cet ordre, et les traitera avant tout argument lu à partir de la ligne de commandes. Ceci donne 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 volumineux que le fichier original. Les fichiers de moins de 100 octets ont tendance à s'agrandir, car le mécanisme de compression comporte toujours un surplus constant d'à peu près 50 octets. Les données aléatoires (incluant la sortie de la plupart des compresseurs de fichiers) sont codées avec à peu près 8.05 bits par octets, ce qui donne une expansion d'environ 0.5%.

En tant que vérification interne, bzip2 utilise des CRC 32bits pour s'assurer que la version décompressée d'un fichier est identique au fichier original. 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 improbables). 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 permettre de récupérer les données non compressées originales. 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, p.ex.) qui a fait paniquer bzip2.

 

OPTIONS

-c --stdout
Compresser ou décompresser sur la sortie standard.
-d --decompress
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 du fichier utilisé. Cette option annule ce mécanisme, et force bzip2 à décompresser.
-z --compress
Le complément de -d : force la compression, quel que soit le nom d'invocation.
-t --test
Tester l'intégrité des fichiers spécifiés, mais ne pas les décompresser. Ceci effectue en fait une décompression de test, et ne s'occupe pas du résultat décompressé.
-f --force
Force l'écrasement des fichiers en sortie. Normalement, bzip2 n'écrasera pas les fichiers de sortie préexistants. Force également bzip2 à briser les liens durs (hard links) de fichiers, ce qu'il ne ferait pas autrement.
-k --keep
Garder (ne pas effacer) les fichiers d'entrée durant la compression ou la décompression.
-s --small
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 2300Ko de mémoire, même s'il le sera à une vitesse deux fois lente que la vitesse normale.

Durant la compression, -s sélectionne une taille de bloc de 200Ko, ce qui limite l'utilisation de mémoire d'a peu près le même nombre, 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 MEMOIRE plus bas.

-q --quiet
Supprime 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.
-v --verbose
Mode volubile -- montre le coefficient de compression pour chaque fichier traité. Des -v supplémentaires augmentent le niveau de volubilité, en affichant des tas d'informations qui sont principalement utiles à des fins de diagnostic.
-L --license -V --version
Afficher la version du logiciel, les termes et conditions d'utilisation.
-1 to -9
Fixe la taille de bloc à 100, 200, ... 900 k pendant la compression. Cette option n'a aucun effet sur la décompression. Voir GESTION DE LA MEMOIRE ci-dessous.
--
Traiter tous les arguments ultérieurs en tant que noms de fichiers, même s'ils débutent par un tiret. Ainsi, vous pouvez traiter des fichiers dont les noms commencent par un tiret, par exemple : bzip2 -- -monfichier.
--repetitive-fast --repetitive-best
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.

 

GESTION DE LA MEMOIRE

bzip2 compresse des fichiers importants par blocs. La taille de bloc affecte à la fois le coefficient de compression atteint, et le montant 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 100000 octets à 900000 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'entête du fichier compressé, et bunzip2 s'alloue ensuite juste assez de mémoire pour décompresser ce 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 exigences mémoire de la compression et de la décompression, en octets, peuvent être estimées à :


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


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

Des largeurs de blocs plus importantes voient les bénéfices marginaux retirés diminuer rapidement. La plupart de la compression provient des deux ou trois cents premiers ko de 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 900Ko, bunzip2 aura besoin d'environ 3700 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 3700 Ko, à savoir à peu près 2300 Ko. Malheureusement, la vitesse de décompression est également réduite de moitié, et 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 -- ç.à.d. la plupart des fichiers que vous rencontrez en utilisant une grande taille de bloc. Le montant réel de mémoire utilisée est proportionnel à la taille du fichier, puisque le fichier est plus petit qu'un bloc. Par exemple, compresser un fichier de 20000 octets avec l'option -9 forcera le compresseur à allouer environ 7600 Ko de mémoire, mais n'en utilisera réellement que 400 Ko + 20000 * 8 = 560 Ko. De même, le décompresseur allouera 3700 Ko mais n'utilisera que 100 Ko + 20000 * 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 3141622 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      1200 k       500 k         350 k      914704
     -2      2000 k       900 k         600 k      877703
     -3      2800 k      1300 k         850 k      860338
     -4      3600 k      1700 k        1100 k      846899
     -5      4400 k      2100 k        1350 k      845160
     -6      5200 k      2500 k        1600 k      838626
     -7      6100 k      2900 k        1850 k      834096
     -8      6800 k      3300 k        2100 k      828642
     -9      7600 k      3700 k        2350 k      828642

 

RECUPERATION DE DONNEES DE FICHIERS ENDOMMAGES

bzip2 compresse les fichiers en blocs d'une longueur d'habituellemnt 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 simple programme 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 ê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.

 

PERFORMANCES

La phase de tri de la compression réunit les chaînes de caractères similaires présentes dans le fichier. A 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. A 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. Je suppose que bzip2 se conduira le mieux sur des machines avec de très larges caches.

 

INCONVÉNIENTS

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 se rattache à la version 0.9.5 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 et 0.9.0, à l'exception près 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.

bzip2recover utilise des entiers 32 bits pour représenter les positions des bits dans les fichiers compressés ; de ce fait, il ne peut traiter de fichiers compressés de plus de 512 Mo de long. Ceci pourrait être résolu facilement.

 

AUTEUR

Julian Seward, jseward@acm.org.

http://www.muraroa.demon.co.uk

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 support et lerus 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 patchs, aidé pour des problèmes de portabilité, prêté des machines, donné des conseils et ont été généralement utiles.

 

TRADUCTION

Frédéric Delanoy, 2000.


 

Index

NOM
SYNOPSIS
DESCRIPTION
OPTIONS
GESTION DE LA MEMOIRE
RECUPERATION DE DONNEES DE FICHIERS ENDOMMAGES
PERFORMANCES
INCONVÉNIENTS
AUTEUR
TRADUCTION

This document was created by man2html using the manual pages.
Time: 17:36:32 GMT, October 23, 2013

SVENSKA - cs - SVENSKA - ja - pl