Archivage et compression de données

tar : Tape ARchiver (archiveur sur bandes)

Bien que nous ayons déjà vu une utilisation de tar dans le chapitre Chapitre 12. Installation d'un logiciel libre, nous n'avons pas expliqué son fonctionnement. C'est maintenant ce que nous nous proposons de faire. De même que find, tar est un utilitaire UNIX de longue date, et sa syntaxe est un peu spéciale :

tar [options] [fichiers...]

Voici maintenant une liste d'options. Notez que toutes celles-ci ont une option longue équivalente, mais vous devrez vous référer à la page de manuel pour cela car elles ne sont pas listées ici. Et bien sûr, il y a encore bien d'autres options non listées ici.

Note

le tiret initial (-) des options courtes est maintenant désuet pour la commande tar, sauf après une option longue.

  • c : à utiliser pour créer de nouvelles archives.

  • x : à utiliser pour extraire des fichiers depuis une archive existante.

  • t : affiche la liste des fichiers d'une archive existante.

  • v : affichera simplement la liste des fichiers au fur et à mesure qu'ils sont ajoutés à une archive ou extraits d'une archive ; ou, en conjonction avec l'option t ci-dessus, produira un affichage long des fichiers au lieu d'un affichage court.

  • f <fichier> : pour créer une archive de nom <fichier>, extraire depuis l'archive <fichier> ou faire une liste des fichiers de l'archive <fichier>; si cette option n'est pas disponible, le fichier par défaut sera /dev/rmt0, qui est généralement le fichier spécial associé à un streamer . Si le paramètre fichier est un tiret (-), l'entrée ou la sortie (selon que vous extrayez depuis une archive ou en créez une), sera associée à l'entrée standard ou la sortie standard.

  • z : énonce à tar que l'archive à créer devra être compressée avec gzip, ou que l'archive depuis laquelle on fait l'extraction est compressée avec gzip.

  • j : même chose que pour z, mais le programme utilisé pour la compression est bzip2;

  • p : lors de l'extraction des fichiers d'une archive, préserve tous les attributs de fichiers, y compris la propriété, la dernière date d'accès et ainsi de suite ; très utile pour les sauvegardes de systèmes de fichiers.

  • r : ajoute la liste des fichiers donnée sur la liste de commande à une archive existante ; notez que l'archive à laquelle vous voulez ajouter des fichiers ne doit pas être compressée !

  • A : fusionne les archives données sur la ligne de commande à celle mentionnée avec l'option f. De même que pour l'option r, les archives ne doivent pas être compressées pour que cela fonctionne.

Il y a en fait beaucoup, beaucoup d'autres options. Référez-vous à la page de manuel detar(1) pour en obtenir une liste complète (entre autres l'option d, par exemple). Maintenant, passons à la pratique ! Supposons que vous vouliez créer une archive de toutes les images dans le répertoire /shared/images, compressée avec bzip2, de nom images.tar.bz2 et située dans votre répertoire personnel. Vous taperez alors :

 #
 # Note: vous devez être dans le répertoire 
 #   contenant les fichiers de l'archive!
 #
$ cd /shared
$ tar cjf ~/images.tar.bz2 images/

Comme vous le constatez, nous avons utilisé trois options ici : c a indiqué à tar de créer une archive ; j lui énonce que nous voulons qu'elle soit compressée avec bzip2, et f ~/images.tar.bz2 lui signale que l'archive devait être créée dans notre répertoire personnel, avec le nom images.tar.bz2. Maintenant, il faut peut-être vérifier si l'archive est valide. Ceci se fera simplement en affichant la liste de ses fichiers :

 #
 # Retour à notre répertoire personnel
 #
$ cd
$ tar tjvf images.tar.bz2

Ici, nous avons demandé à tar d'afficher la liste (t) des fichiers de l'archive images.tar.bz2 (f images.tar.bz2), en ayant averti que cette archive était compressée avec bzip2 (j), et que nous voulions un format d'affichage long (v). Maintenant, supposons que vous ayez effacé le répertoire des images. Heureusement, votre archive est intacte ! Vous voulez l'extraire de sa place originelle dans /shared. Mais comme vous ne voulez pas casser votre commande find pour trouver les nouvelles images, vous devez préserver les attributs de tous les fichiers :

 #
 # Rendez-vous dans le répertoire où vous voulez 
 #   extraire
 #
$ cd /shared
$ tar jxpf ~/images.tar.bz2

Et voilà le travail !

Maintenant, supposons que vous vouliez seulement extraire le répertoire images/cars de l'archive. Vous pouvez alors taper ceci :

$ tar jxf ~/images.tar.bz2 images/cars

Au cas où cela vous inquiéterait, il n'y a pas de quoi ! Si vous essayez d'archiver des fichiers spéciaux, tar les prendra tels qu'ils sont, des fichiers spéciaux, et n'ira pas chercher leur contenu. Donc oui, vous pouvez mettre sans risque /dev/mem dans une archive :-) La gestion des liens, d'autre part, s'accomplit aussi correctement ; donc là non plus, pas d'inquiétude à avoir. Pour les liens symboliques, regardez également l'option h dans la page de manuel.

bzip2 et gzip : compression de données

Vous vous souvenez que nous avons déjà parlé de ces deux programmes quand nous avons évoqué tar. Contrairement à winzip sous windows, l'archivage et la compression sont faits en utilisant deux programmes séparés (tar pour l'archivage, et les deux programmes que nous allons maintenant présenter, bzip2 et gzip, pour compresser). D'autres outils de compression existent sous GNU/Linux, comme zip, arj ou rar mais sont rarement utilisés.

À l'origine, bzip2 a été écrit en tant que remplacement pour gzip. Ses possibilités de compression sont en général meilleures. Mais, d'un autre côté, il consomme plus de mémoire. La raison pour laquelle gzip est encore là est qu'il est encore beaucoup plus répandu que bzip2. Peut-être qu'un jour bzip2 remplacera complètement gzip ou peut-être pas ?

Les deux commandes ont une syntaxe similaire :

gzip [options] [fichier(s)]

Si aucun nom de fichier n'est donné, gzip comme bzip2 attendra des données sur l'entrée standard et enverra le résultat sur la sortie standard. Les deux programmes sont donc en fait utilisables avec des tubes. Les deux commandes ont aussi un ensemble d'options similaires :

  • -1, ..., -9 : règle le degré de compression ; plus le nombre est haut, plus la compression sera élevée, mais mieux signifie aussi plus lent : on n'a rien sans rien.

  • -d : décompresse un ou des fichier(s) ; c'est l'équivalent de la commande gunzip ou de bunzip2.

  • -c : envoie le résultat de la compression/décompression des fichiers donnés en paramètre sur la sortie standard.

Attention ! Par défaut, si vous n'utilisez pas l'option -c, gzip et bzip2 effaceront le ou les fichier(s) qu'ils ont compressés (ou décompressés). Vous pouvez éviter cela avec bzip2 en utilisant l'option -k. gzip, cependant, ne possède pas une telle option !

Quelques exemples seront utiles. Supposons que vous vouliez compresser tous les fichiers se terminant par .txt dans le répertoire courant avec bzip2, utilisez alors :

$ bzip2 -9 *.txt

Supposons que vous vouliez partager votre archive d'images avec quelqu'un, mais qu'il ne dispose pas de bzip2, mais uniquement de gzip. Nul besoin de décompresser l'archive et de la recompresser : décompressez-la sur la sortie standard, utilisez un tube, compressez depuis l'entrée standard et redirigez le résultat vers la nouvelle archive :

bzip2 -dc images.tar.bz2 | gzip -9 >images.tar.gz

Et voilà le travail ! Vous pourriez d'ailleurs avoir tapé bzcat au lieu de bzip2 -dc. Il existe un équivalent pour gzip mais son nom est zcat, et non pas gzcat. Vous disposez aussi de bzless (resp. zless) si vous voulez directement visualiser des fichiers compressés sans avoir à les décompresser avant. Comme exercice, essayez de trouver la commande que vous auriez à taper pour voir des fichiers sans les décompresser, et sans utiliser bzless or zless ... :-)