Cédric Temple

Administrateur système en logiciels libres

BZIP2, compression de fichiers

2019-04-05 » notes pour plus tard

Ce contenu est fourni sous licence CC BY-NC-SA 4.0

Notes sur Bzip2/bunzip

Compresser un fichier

# compresser le fichier et effacer l'ancien fichier non compressé
bzip2 monfichier.txt
# compresser le fichier et garder l'ancien fichier non compressé
bzip2 -k monfichier.txt
bzip2 --keep monfichier.txt
# compresser et envoyer le résultat vers stdout, l'ancien fichier restant présent
# on redirige vers le fichier compressé
bzip2 --stdout monfichier.txt > monfichier.txt.bz2

Choix du taux de compression

# le plus compressé
bzip2 -9 monfichier.txt
bzip2 --best monfichier.txt
# le moins compressé
bzip2 -1 monfichier.txt
bzip2 --fast monfichier.txt
# à noter : --best et --fast sont des faux amis
# et sont là pour la compatibilité avec gzip
# --fast n'est pas forcément plus le rapide
# par défaut, le taux de compression est -9

Décompression

# commandes équivalentes
bzip2 -d monfichier.txt.bz2
bzip2 --decompress monfichier.txt.bz2
bunzip2 monfichier.txt.bz2
# décompression vers sortie standard pour passage à un autre programme
bunzip --stdout monfichier.txt.bz2 | monprogramme ...
# Très utile pour importer un dump SQL par exemple :
bunzip2 --stdout mondump.sql.bz2 | mysql -p -u <user> <database> 

Travail avec d’autres programmes

Lorsqu’on enchaîne les commandes avec pipe, il faut connaître le comportement de bzip2/bunzip2. Si on passe des données sur l’entrée standard, alors bzip2/bunzip2 va sortir les données vers sa sortie standard et non vers un fichier. Exemple :

monprogramme | bunzip2 > monfichier_decompresse.txt
monprogramme | bunzip2 | grep ... | ... > monfichier_decompresse.txt
# autre moyen avec bunzip2
bunzip2 < monfichiercompresse.sql.bz2 | mysql -p -u <user> <database> 

Comparatif (rapide) de rapidité et de compression entre gzip et bzip2

Ici, le but n’est pas de donner un résultat exact et objectif des deux outils mais une tendance de leur performance respective tant en compression qu’en rapidité de compression. L’idée est de pouvoir choisir entre l’un ou l’autre en fonction du contexte. En effet, on peut avoir besoin d’une forte compression en se moquant de la durée de compression ou au contraire, vouloir une compression qui n’est pas la meilleure mais dans un temps raisonable. Il peut y avoir un autre paramètre permettant de faire un choix : le temps de décompression (qui parfois est plus important que le temps de compression). Il n’est pas mesuré ici car je n’ai pas de contexte le justifiant.

cedric@portable:~$ ls -lh *
-rw-r--r-- 1 cedric cedric 2,8G avril  5 21:53 database-backup.sql
cedric@portable:~$ time gzip --keep --fast database-backup.sql 

real    0m26.487s
user    0m18.839s
sys     0m1.123s
cedric@portable:~$ ls -lh *
-rw-r--r-- 1 cedric cedric 2,8G avril  5 21:53 database-backup.sql
-rw-r--r-- 1 cedric cedric 297M avril  5 21:53 database-backup.sql.gz
cedric@portable:~$ time gzip --keep --best database-backup.sql

real    1m35.320s
user    1m27.281s
sys     0m1.120s
cedric@portable:~$ ls -lh
total 2,9G
-rw-r--r-- 1 cedric cedric 2,8G avril  5 21:53 database-backup.sql
-rw-r--r-- 1 cedric cedric 177M avril  5 21:53 database-backup.sql.gz
cedric@portable:~$ time bzip2 --keep --best database-backup.sql 

real    5m19.511s
user    5m6.917s
sys     0m1.440s
cedric@portable:~$ ls -lh
total 2,8G
-rw-r--r-- 1 cedric cedric 2,8G avril  5 21:53 database-backup.sql
-rw-r--r-- 1 cedric cedric  84M avril  5 21:53 database-backup.sql.bz2
cedric@portable:~$ time bzip2 --keep --fast database-backup.sql 

real    3m40.317s
user    3m31.527s
sys     0m1.652s
cedric@portable:~$ ls -lh
total 2,9G
-rw-r--r-- 1 cedric cedric 2,8G avril  5 21:53 database-backup.sql
-rw-r--r-- 1 cedric cedric 164M avril  5 21:53 database-backup.sql.bz2

Remarque : gzip comme bzip2 ne modifie pas la date de création de fichier. C’est pour cela qu’on voit que l’heure de création de fichier est toujours la même (21h53).

Ce contenu est fourni sous licence CC BY-NC-SA 4.0