Vous avez été plusieurs à nous demander un article sur les différents formats d'archives et la manière de les utiliser. Il est vrai qu'il est facile de se perdre dans les suffixes tar, gz, tgz, bz2, Z, sans parler des termes généralement utilisés comme tarball ou gziped tarball ...
A l'époque où la Slackware était LA distribution à la mode, les formats d'archives étaient encore peu nombreux et un grand nombre de fichiers étaient des archives tar gzippées. Et voilà, ça recommence ... mais qu'est-ce que cela peut bien vouloir dire ? Faisons le tour de ces formats. Tout d'abord, il faut distinguer les utilitaires d'archivage des utilitaires de compression.
Les compresseurs
Sous ce terme vaguement français se cache un principe fort simple. Le contenu d'un fichier classique, disons du texte, possède certaines propriétés particulières. En effet, les caractères ou octets dont il se compose possèdent une diversité limitée. Ceci implique un certain nombre de répétitions des mêmes caractères avec une certaine fréquence plus ou moins aléatoire, l'entropie. Prenons un exemple simpliste et imaginons le texte suivant :
AAAABBBBBB
Ce texte occupe 10 caractères. Il est possible d'exprimer le même contenu de manière plus courte :
4A6B
Soit 4 fois "A" suivi de 6 fois "B". Notre texte compressé ne fait plus que quatre caractères. Voilà exactement le principe utilisé par les utilitaires de compression de fichiers, avec, bien sûr, des méthodes logiques et mathématiques bien plus complexes et puissantes. Pour être tout à fait précis, il est plus exact de parler d'encodage que de compression puisque le second terme n'est qu'une conséquence du premier. Voilà pourquoi les documentations (man pages) des utilitaires qui vont vous être présentés maintenant parlent de codage. Avec un système GNU, les utilitaires de compression les plus courants sont :
$ compress README
Le fichier README.Z obtenu fait 7409 octets, soit à peu près la moitié de la taille d'origine. Pour décompresser, rien de plus simple :
$ uncompress README.Z
linux-2.4.3.tar.gz 25755214 octets linux-2.4.3.tar.bz2 20878683 octets
Quasiment 5 Mo, le gain n'est plus du tout négligeable ! Les archives utilisant ce format de compression possèdent normalement une extension .bz2.
gzip et bzip2 respectent les options classiques imposées par le plus ancien des utilitaires : compress. Voici quelques-unes de ces options :
-d permet de décompresser une archive. Habituellement, les actions de compression et de décompression détruisent le fichier source. Ainsi, en décompressant le fichier README.gz, par exemple, vous obtenez un fichier README et perdez le fichier compressé.
-c permet de rediriger le résultat de la compression ou de la décompression vers la sortie standard. Ceci peut être très intéressant dans le cas où vous désirez envoyer directement la sortie vers un autre utilitaire. Voici un exemple :
$ gzip -d -c README.gz | less
Ici, nous décompression (-d) le fichier README.gz sur la sortie standard (-c) et l'envoyons directement (|) à la commande less permettant de l'afficher. Résultat : nous pouvons parcourir le contenu du fichier en une seule commande.
Les archiveurs
Nous savons à présent compresser et décompresser des fichiers uniques. En effet, les utilitaires dont nous venons de parler ne permettent pas de réunir plusieurs fichiers dans une archive; ceci est la tâche d'un autre utilitaire très courant : GNU Tar ou tar pour les intimes.
Tar est le Tape ARchiver, mais ne vous y trompez pas, tar n'est absolument pas limité aux cassettes et cartouches de sauvegarde. Gardez cependant à l'esprit cette image de cassette de sauvegarde car elle résume parfaitement le travail de l'utilitaire. En effet, tar se borne à ne faire qu'une seule chose : placer à la queue leu leu les données dans un gros fichier. Bien sûr, les noms de fichiers et leurs attributs sont également archivés. Attention : tar ne compresse pas les fichiers. Nous verrrons un peu plus loin comment utiliser tar et des utilitaires de compression de concert.
Créer une archive tar est relativement simple. Placez-vous à l'endroit où sont vos fichiers à archiver et utilisez :
$ tar c * > /endroit/archive.tar
Voici sans doute la syntaxe la plus simple à utiliser avec tar. Tous les fichiers du répertoire ainsi que les sous répertoires s'y trouvant (*) sont archivés (c) et envoyés sur la sortie standard. Nous redirigeons (>) ensuite cette sortie vers un fichier. Si cela vous paraît un peu trop obscur, vous pouvez toujours préférer la syntaxe suivante !
$ tar cf /endroit/archive.tar *
Ici, nous précisons le fichier archive grâce à l'option f. Notez que les options peuvent également être spécifiées comme ceci :
$ tar -c -f /endroit/archive.tar *
Si vous désirez voir apparaître les noms des fichiers au fil de leur archivage, ajoutez simplement l'option v comme verbose (bavard). Pour désarchiver un fichier .tar, c'est l'option x qu'il vous faudra utiliser en lieu et place de c. A titre d'exemple, nous pouvons désarchiver notre archive .tar comme suit :
$ tar xvf /endroit/archive.tar
ou
$ tar -x -v -f /endroit/archive.tar
ou encore
$ tar -f /endroit/archive.tar -v -x
Si vous recevez une grosse archive contenant plusieurs dizaines ou centaines de fichiers, il serait très pénible de devoir désarchiver l'ensemble des fichiers si vous n'en avez besoin que d'un seul. Heureusement, tar a été correctement conçu et vous permet de lister les fichiers d'une archive :
$ tar tf /endroit/archive.tar
Ou, avec davantage d'informations (propriétaire/groupe, date, taille et attributs) :
$ tar vtf /endroit/archive.tar
Il ne vous restera ensuite plus qu'à extraire le fichier qui vous intéresse en précisant son nom :
$ tar xvf /endroit/archive.tar lefichier
En ce qui concerne les termes d'usage, les archives tar sont souvent appelées tarball.
Combinaisons
Nous voici arrivés au point le plus intéressant de l'article. Nous avons archivé des fichiers et compressé un. Nous pouvons donc combiner ces deux techniques pour créer et utiliser des archives compressées. La technique la plus simple pour lire une archive compressée est de procéder en deux étapes :
$ gzip -d archive.tar.gz $ bzip2 -d archive.tar.bz2 $ uncompress -d archive.tar.Z
$ tar tf archive.tar
Il est cependant possible de faire plus court en utilisant l'option -c des utilitaires de compression. En effet, nous pouvons rediriger la sortie de l'utilitaire de décompression vers l'entrée de tar. Cela nécessite l'utilisation d'une option particulière de tar le "-". Ce tiret symbolise l'entrée standard en tant que fichier. Voici quelques exemples :
$ gzip -d -c archive.tar.gz | tar tf -
Nous permet de décompresser archive.tar.gz et d'envoyer le résultat vers tar. Le - symbolise le flux de données en provenance de gzip. Nous listons les fichiers contenus dans archive.tar.gz
$ bzip2 -d -c archive.tar.gz | tar xvf -
Ici, nous procédons de même avec bzip2, mais cette fois nous désarchivons les fichiers.
$ gzip -d -c archive.tar.gz | tar xf - README -O | lessPlus complexe cette fois puisque nous utilisons une seconde redirection. Notre fichier archive.tar.gz est décompressé et envoyé sur la sortie standard; de là, tar prend le relais et extrait du flux de données le fichier README présent dans l'archive. Mais au lieu de l'inscrire dans le répertoire courant, nous l'envoyons sur la sortie standard avec l'option -O. Enfin, nous "branchons" less sur la sortie standard pour parcourir le fichier README à l'écran.
Est-il possible de faire plus court ? Oui. L'utilisation de tar avec un compresseur est tellement courante que tar donne la possibilité de faire usage d'un compresseur par l'intermédiaire d'une simple option. Ainsi :
$ tar xvzf archive.tar.gz
est équivalent à
$ gzip -d -c archive.tar.gz | tar xf -
C'est l'option z qui précise alors que tar doit faire traiter l'archive par gzip avant extraction. Pour bzip2, ca donne :
$ tar xvjf archive.tar.bz2
Enfin, pour compress, nous utilisons l'option courte Z de cette manière :
$ tar xvZf archive.tar.Z
Note : Les extensions .tgz correspondent à des archives .tar.gz. L'extension a simplement été réduite afin de permettre un support pour des systèmes de fichiers peu performants, comme FAT, n'utilisant que trois caractères maximum pour les extensions.
L'utilisation la plus courante est sans conteste la décompression / extraction, mais il peut arriver également que vous ayez à créer de telles archives compressées :
$ tar c * | gzip -c archive.tar.gzou
$ tar cvzf archive.tar.gz dossier/ $ tar cvjf archive.tar.bz2 dossier/
Nous voilà arrivés au terme de cet article. J'espère que les explications qui ont été données vous permettront de vous faciliter la vie avec vos archives et vos fichiers compressés.
Liens
Gnu Tar
http://www.gnu.org/software/tar/
http://www.gnu.org/manual/tar/
Gzip
http://www.gnu.org/software/gzip/
Bzip2
http://sources.redhat.com/bzip2/