Archives compresséesObjectif de cet atelier pratique :

  • manipuler les principaux formats de fichiers compressés et les archives sous Linux

Les différents formats d’archivage

Les archives compressées sont omniprésentes dans le quotidien informatique et elles sont utilisées à des fins très variées. Si vous avez l’habitude de Windows, vous avez certainement déjà croisé des fichiers .zip et .rar dans votre quotidien. Ces types de fichiers ne sont pas inconnus à Linux, mais les deux formats d’archives compressées les plus largement répandus sous ce système sont les fichiers .tar.gz et .tar.bz2. Derrière ces extensions, quelque peu énigmatiques pour un néophyte se cachent en réalité trois programmes, trois petits outils :

  • tar rassemble plusieurs fichiers et répertoires en une archive
  • gzip et bzip2 se chargent de la compression.

Ces formats sont très bien gérés par les différents systèmes d’exploitation. Linux sait gérer les archives au format .zip et .rar grâce aux outils unzip et unrar. Inversement, lorsque vous travaillez sous Windows, vous trouverez des outils libres pour traiter les archives au format .tar.gz et .tar.bz2. Dans cet atelier pratique, nous nous concentrerons sur les deux principaux formats natifs de Linux.

Compresser et décompresser un fichier avec gzip

gzip (GNU Zip) constitue l’outil de compression standard sous Linux. Il fait une chose et une seule : gérer la compression de fichiers simples. Il ne sait pas constituer des archives, c’est tar qui s’en charge. Cherchons dans notre système un fichier au hasard, sur lequel nous pourrions nous entraîner :

$ cp -v /etc/services .
'/etc/services' -> './services'
$ ls -lh services 
-rw-r--r--. 1 microlinux microlinux 677K 15 sept. 08:22 services

L’affichage détaillé nous montre qu’il s’agit d’un fichier texte assez important en termes de taille : 677 kilo-octets. C’est pour cela que je l’ai choisi. Essayons de le compacter :

$ gzip services

gzip remplace le fichier d’origine par une version plus compacte, comportant l’extension de fichier supplémentaire .gz :

$ ls -lh services.gz 
-rw-r--r--. 1 microlinux microlinux 140K Sep 15 08:22 services.gz

Dans cet exemple, la compression est assez conséquente : le fichier résultant est environ cinq fois plus petit que l’original.

InfoLa compression varie selon un certain nombre de facteurs. gzip n’aura pas beaucoup d’effet sur des formats de fichiers comportant une compression initiale, comme le MP3 ou le JPEG. En revanche, il fonctionnera très bien avec les fichiers au format texte simple ou les images Bitmap non compressées.

Pour décompresser un fichier .gz, vous avez deux possibilités :

$ gzip -d services.gz

Ou alors, ce qui revient exactement au même :

$ gunzip services.gz

Compresser et décompresser un fichier avec bzip2

L’outil bzip2 est un outil de compression au même titre que gzip, au détail près qu’il utilise un algorithme un peu plus performant.

Normalement, l’outil bzip2 n’est pas fourni par une installation minimale de Rocky Linux. Nous pouvons l’installer comme ceci :

$ sudo dnf install -y bzip2

Reprenons l’exemple précédent, avec le fichier services :

$ bzip2 services

Il en résulte un fichier compressé portant l’extension de fichier supplémentaire .bz2. Regardons ce fichier de plus près :

$ ls -lh services.bz2 
-rw-r--r--. 1 microlinux microlinux 127K Sep 15 08:22 services.bz2

Effectivement, le taux de compression est légèrement supérieur à celui proposé par gzip. Le fichier compressé ne pèse plus que 127 kilo-octets, contre 140 avec gzip.

Pour décompresser un fichier compacté à l’aide de bzip2, nous avons également le choix entre deux commandes, qui ont exactement le même effet :

$ bzip2 -d services.bz2

Ou :

$ bunzip2 services.bz2

Créer une archive avec tar

gzip et bzip2 ne gèrent que la compression d’un seul fichier fourni en argument. Pour créer une archive, nous aurons recours à la commande tar. Là aussi, un exemple pratique nous aidera à comprendre le fonctionnement de l’outil en question.

Pour commencer, il nous faut un répertoire contenant quelques fichiers. Je crée donc, au hasard, un répertoire ~/config et j’y place tous les fichiers *.conf que je trouve dans l’arborescence de /etc en faisant fi des avertissements relatifs aux droits d’accès :

$ mkdir -v ~/config
mkdir: created directory '/home/microlinux/config'
$ find /etc -name '*.conf' 2> /dev/null -exec cp {} ~/config/ \;
$ ls ~/config/
00-keyboard.conf         namespace.conf
05-redhat.conf           NetworkManager.conf
99-sysctl.conf           nsswitch.conf
...

La commande tar ne fait pas partie du système minimal. Nous devons donc l’installer :

$ sudo dnf install -y tar

Nous allons rassembler tous les fichiers contenus dans ~/config pour en constituer une archive avec la commande tar :

$ tar -cvf config.tar config/
config/
config/ld.so.conf
config/locale.conf
config/sepermit.conf
config/system.conf
config/nsswitch.conf
config/semanage.conf
...

Le nom du programme (tape archiver) révèle son utilisation initiale : tar a servi en premier lieu à la gestion d’archives sur bande magnétique. Voici une petite explication de l’exemple que nous venons de voir :

  • tar reçoit l’ordre de créer (create) une archive avec l’option -c.
  • La commande nous dit ce qui se passe en coulisse avec l’option -v.
  • Le premier argument (config.tar) sera interprété comme le nom de l’archive grâce à l’option -f (file).

Voici un exemple plus général pour vous familiariser avec la syntaxe de tar pour la création d’une archive. Nous créons trois fichiers fichier1, fichier2 et fichier3 et les rassemblons dans un fichier archive.tar :

$ touch fichier{1,2,3}
$ ls fichier?
fichier1 fichier2 fichier3
$ tar -cvf archive.tar fichier1 fichier2 fichier3
fichier1
fichier2
fichier3

Extraire les fichiers d’une archive

Avant de « déballer » notre archive, nous allons la déplacer dans un répertoire nouvellement créé. En effet, étant donné que les fichiers d’origine sont toujours en place, une extraction dans le même répertoire ne changerait rien et écraserait tous les fichiers existants.

$ mkdir -v repertoire
mkdir: created directory 'repertoire'
$ mv -v config.tar repertoire/
renamed 'config.tar' -> 'repertoire/config.tar'
$ cd repertoire/
$ tar -xvf config.tar 
config/
config/ld.so.conf
config/locale.conf
config/sepermit.conf
config/system.conf
config/nsswitch.conf
config/semanage.conf
...

Dans l’autre sens, c’est donc l’option -x (extract) qui procède au dépaquetage de l’archive.

Combiner l’archivage et la compression

Essayons de créer une archive compressée en reprenant l’exemple du début. Nous pouvons très bien :

  • créer l’archive avec tar
  • compresser l’archive avec gzip ou bzip2

Voici ce que cela donnerait en pratique :

$ tar -cvf config.tar config/
$ gzip config.tar
$ ls -lh config.tar.gz 
-rw-rw-r--. 1 microlinux microlinux 29K Sep 15 08:58 config.tar.gz

Et avec bzip2 :

$ tar -cvf config.tar config/
$ bzip2 config.tar
$ ls -lh config.tar.bz2 
-rw-rw-r--. 1 microlinux microlinux 26K Sep 15 08:59 config.tar.bz2

Cependant, il est possible de faire encore plus simple. tar comporte une série d’options qui servent à créer une archive et la compresser à la volée. Effacez les archives compressées de l’exercice précédent et gardez seulement le répertoire ~/config et son contenu. Maintenant, créez une archive compressée avec les options suivantes :

$ tar -cvzf config.tar.gz config/
config/
config/ld.so.conf
config/locale.conf
config/sepermit.conf
config/system.conf
config/nsswitch.conf
config/semanage.conf
...
$ ls -lh config.tar.gz
-rw-rw-r--. 1 microlinux microlinux 29K Sep 15 09:02 config.tar.gz

Si vous souhaitez créer une archive compressée avec bzip2, il suffira de remplacer l’option -z par -j :

$ tar -cvjf config.tar.bz2 config/
config/
config/ld.so.conf
config/locale.conf
config/sepermit.conf
config/system.conf
config/nsswitch.conf
config/semanage.conf
...
$ ls -lh config.tar.bz2
-rw-rw-r--. 1 microlinux microlinux 26K Sep 15 09:04 config.tar.bz2

Notez la différence de taille entre les deux archives :

$ ls -lh config.tar.*
-rw-rw-r--. 1 microlinux microlinux 26K Sep 15 09:04 config.tar.bz2
-rw-rw-r--. 1 microlinux microlinux 29K Sep 15 09:02 config.tar.gz

Extraire une archive compressée

Inversement, l’extraction d’une archive compressée peut également s’effectuer d’une traite :

  • pour une archive .tar.gz :
$ tar -xvzf config.tar.gz
config/
config/ld.so.conf
config/locale.conf
config/sepermit.conf
config/system.conf
config/nsswitch.conf
config/semanage.conf
...
  • et pour une archive .tar.bz2 :
$ tar -xvjf config.tar.bz2
config/
config/ld.so.conf
config/locale.conf
config/sepermit.conf
config/system.conf
config/nsswitch.conf
config/semanage.conf
...

InfoLes options de tar sont souvent utilisées sans le tiret - initial. Vous pouvez donc écrire de la même façon tar -xvjf ou tar xvjf, cela n’a aucune incidence sur le fonctionnement de la commande.

 

Lire la suite : Installer des logiciels depuis le code source


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 


0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *