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 ... ]
bzip2 [
-h|--help ]
bunzip2 [
-fkvsVL ] [
noms_fichiers ... ]
bunzip2 [
-h|--help ]
bzcat [
-s ] [
noms_fichiers ... ]
bzcat [
-h|--help ]
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.
- -c --stdout
- Compresser ou décompresser vers 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 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
- 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.
- -f --force
- 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.
- -k --keep
- conserver (ne pas supprimer) 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 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 à
environ 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 MÉMOIRE plus bas.
- -q --quiet
- 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.
- -v --verbose
- 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.
- -h --help
- Afficher un message d'aide puis quitter.
- -L --license -V --version
- 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 ».
- --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.
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 : 400 k + ( 8 x taille de bloc )
Décompression : 100 k + ( 4 x taille de bloc ), ou
100 k + ( 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é, 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 – 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
.bz1 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,
[email protected].
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
<
[email protected]> et Jean-Pierre Giraud
<
[email protected]>
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 à
[email protected]