3.1 Leçon 1
Certification : |
Linux Essentials |
---|---|
Version : |
1.6 |
Thème : |
3 La Puissance de la Ligne de Commande |
Objectif : |
3.1 Archivage des Fichiers depuis la Ligne de Commande |
Leçon : |
1 sur 1 |
Introduction
La compression est utilisée pour réduire la quantité d’espace qu’un ensemble spécifique de données consomme. La compression est couramment utilisée pour réduire l’espace nécessaire au stockage d’un fichier. Une autre utilisation courante consiste à réduire la quantité de données envoyées via une connexion réseau.
La compression fonctionne en remplaçant les modèles répétitifs dans les données. Supposons que vous ayez un roman. Certains mots sont extrêmement courants et comportent plusieurs caractères, comme le mot “le”. Vous pourriez réduire considérablement la taille du roman si vous remplaciez ces mots et motifs communs à plusieurs caractères par des remplacements à un seul caractère. Par exemple, remplacez “le” par une lettre grecque qui n’est pas utilisée ailleurs dans le texte. Les algorithmes de compression de données sont similaires à celui-ci mais plus complexes.
Il existe deux types de compression : sans perte et avec perte. Les objets compressés avec un algorithme sans perte peuvent être décompressés pour retrouver leur forme originale. Les données compressées avec un algorithme avec perte ne peuvent pas être récupérées. Les algorithmes avec perte sont souvent utilisés pour les images, la vidéo et le son lorsque la perte de qualité est imperceptible pour l’homme, sans rapport avec le contexte, ou lorsque la perte vaut l’espace de stockage ou le débit du réseau économisé.
Les outils d’archivage sont utilisés pour regrouper les fichiers et les répertoires en un seul fichier. Les sauvegardes, le regroupement du code source des logiciels et la conservation des données en sont des utilisations courantes.
L’archivage et la compression sont couramment utilisés ensemble. Certains outils d’archivage compressent même leur contenu par défaut. D’autres peuvent compresser leur contenu de manière optionnelle. Certains outils d’archivage doivent être utilisés conjointement avec des outils de compression autonomes si vous souhaitez compresser le contenu.
L’outil le plus courant pour l’archivage de fichiers sur les systèmes Linux est tar
. La plupart des distributions Linux sont livrées avec la version GNU de tar
, c’est donc celui qui sera abordé dans cette leçon. tar
gère seulement l’archivage des fichiers mais ne les compresse pas.
Il existe de nombreux outils de compression sur Linux. Parmi les outils de compression sans perte les plus courants, on trouve bzip2
, gzip
et xz
. Vous les trouverez tous les trois sur la plupart des systèmes. Vous pouvez rencontrer un système ancien ou très minimal où xz
ou bzip
ne sont pas installés. Si vous devenez un utilisateur régulier de Linux, vous rencontrerez probablement des fichiers compressés avec ces trois outils. Tous trois utilisent des algorithmes différents, de sorte qu’un fichier compressé avec un outil ne peut pas être décompressé par un autre. Les outils de compression ont un compromis à faire. Si vous souhaitez un taux de compression élevé, il vous faudra plus de temps pour compresser et décompresser le fichier. En effet, une compression plus élevée nécessite plus de travail pour trouver des modèles plus complexes. Tous ces outils compressent les données mais ne peuvent pas créer d’archives contenant plusieurs fichiers.
Les outils de compression autonomes ne sont généralement pas disponibles sur les systèmes Windows. Les outils d’archivage et de compression de Windows sont généralement regroupés. Gardez cela à l’esprit si vous avez des systèmes Linux et Windows qui ont besoin de partager des fichiers.
Les systèmes Linux disposent également d’outils pour traiter les fichiers .zip
couramment utilisés sur le système Windows. Ces outils sont appelés zip
et unzip
. Ces outils ne sont pas installés par défaut sur tous les systèmes, donc si vous avez besoin de les utiliser, vous devrez peut-être les installer. Heureusement, on les trouve généralement dans les dépôts de paquets des distributions.
Les Outils de Compression
L’espace disque économisé par la compression des fichiers dépend de plusieurs facteurs. La nature des données que vous compressez, l’algorithme utilisé pour compresser les données et le niveau de compression. Tous les algorithmes ne prennent pas en charge différents niveaux de compression.
Commençons par mettre en place quelques fichiers de test à compresser :
$ mkdir ~/linux_essentials-3.1 $ cd ~/linux_essentials-3.1 $ mkdir compression archiving $ cd compression $ cat /etc/* > bigfile 2> /dev/null
Nous créons maintenant trois copies de ce fichier :
$ cp bigfile bigfile2 $ cp bigfile bigfile3 $ cp bigfile bigfile4 $ ls -lh total 2.8M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile2 -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile3 -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile4
Nous allons maintenant compresser les fichiers avec les différents outils de compression susmentionnés :
$ bzip2 bigfile2 $ gzip bigfile3 $ xz bigfile4 $ ls -lh total 1.2M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 170K Jun 23 08:08 bigfile2.bz2 -rw-r--r-- 1 emma emma 179K Jun 23 08:08 bigfile3.gz -rw-r--r-- 1 emma emma 144K Jun 23 08:08 bigfile4.xz
Comparez la taille des fichiers compressés à celle du fichier non compressé appelé bigfile
. Remarquez également comment les outils de compression ont ajouté des extensions aux noms de fichiers et supprimé les fichiers non compressés.
Utilisez bunzip2
, gunzip
, ou unxz
pour décompresser les fichiers :
$ bunzip2 bigfile2.bz2 $ gunzip bigfile3.gz $ unxz bigfile4.xz $ ls -lh total 2.8M -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile2 -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile3 -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile4
Remarquez à nouveau que le fichier compressé est maintenant supprimé une fois qu’il est décompressé.
Certains outils de compression prennent en charge différents niveaux de compression. Un niveau de compression plus élevé nécessite généralement plus de mémoire et de cycles CPU, mais se traduit par un fichier compressé plus petit. L’inverse est vrai pour un niveau inférieur. Vous trouverez ci-dessous une démonstration avec xz
et gzip
:
$ cp bigfile bigfile-gz1 $ cp bigfile bigfile-gz9 $ gzip -1 bigfile-gz1 $ gzip -9 bigfile-gz9 $ cp bigfile bigfile-xz1 $ cp bigfile bigfile-xz9 $ xz -1 bigfile bigfile-xz1 $ xz -9 bigfile bigfile-xz9 $ ls -lh bigfile bigfile-* * total 3.5M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 205K Jun 23 13:14 bigfile-gz1.gz -rw-r--r-- 1 emma emma 178K Jun 23 13:14 bigfile-gz9.gz -rw-r--r-- 1 emma emma 156K Jun 23 08:08 bigfile-xz1.xz -rw-r--r-- 1 emma emma 143K Jun 23 08:08 bigfile-xz9.xz
Il n’est pas nécessaire de décompresser un fichier chaque fois que vous l’utilisez. Les outils de compression sont généralement fournis avec des versions spéciales d’outils courants utilisés pour lire les fichiers texte. Par exemple, gzip
possède une version de cat
, grep
, diff
, less
, more
et quelques autres. Pour gzip
, les outils sont préfixés par un z
, alors que bzip2
les préfixe avec bz
et xz
les préfixe avec xz
. Voici un exemple d’utilisation de zcat
pour lire et afficher un fichier compressé avec gzip
:
$ cp /etc/hosts ./ $ gzip hosts $ zcat hosts.gz 127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Les Outils d’Archivage
Le programme tar
est probablement l’outil d’archivage le plus utilisé sur les systèmes Linux. Au cas où vous vous demanderiez pourquoi il est nommé ainsi, il s’agit d’une abréviation de "tape archive" ("archive sur bande"). Les fichiers créés avec tar
sont souvent appelés tar balls. Il est très courant que les applications distribuées sous forme de code source soient dans des tar balls.
La version GNU de tar
que les distributions Linux livrent a beaucoup d’options. Cette leçon va couvrir le sous-ensemble le plus couramment utilisé.
Commençons par créer une archive des fichiers utilisés pour la compression :
$ cd ~/linux_essentials-3.1 $ tar cf archiving/3.1.tar compression
L’option c
indique à tar
de créer un nouveau fichier d’archive et l’option f
est le nom du fichier à créer. L’argument qui suit immédiatement les options sera toujours le nom du fichier sur lequel travailler. Les autres arguments sont les chemins d’accès aux fichiers ou répertoires que vous souhaitez ajouter, lister ou extraire du fichier. Dans l’exemple, nous ajoutons le répertoire compression
et tout son contenu à l’archive.
Pour visualiser le contenu d’une tar ball, utilisez l’option t
de tar
:
$ tar -tf 3.1.tar compression/ compression/bigfile-xz1.xz compression/bigfile-gz9.gz compression/hosts.gz compression/bigfile2 compression/bigfile compression/bigfile-gz1.gz compression/bigfile-xz9.xz compression/bigfile3 compression/bigfile4
Remarquez comment les options sont précédées de -
. Contrairement à la plupart des programmes, avec tar
, le -
est facultatif lors de la spécification des options, bien qu’il ne cause aucun dommage s’il est utilisé.
Note
|
Vous pouvez utiliser l’option |
Maintenant, extrayons le fichier :
$ cd ~/linux_essentials-3.1/archiving $ ls 3.1.tar $ tar xf 3.1.tar $ ls 3.1.tar compression
Supposons que vous n’ayez besoin que d’un seul fichier de l’archive. Si c’est le cas, vous pouvez le spécifier après le nom du fichier de l’archive. Vous pouvez spécifier plusieurs fichiers si nécessaire :
$ cd ~/linux_essentials-3.1/archiving $ rm -rf compression $ ls 3.1.tar $ tar xvf 3.1.tar compression/hosts.gz compression/ compression/bigfile-xz1.xz compression/bigfile-gz9.gz compression/hosts.gz compression/bigfile2 compression/bigfile compression/bigfile-gz1.gz compression/bigfile-xz9.xz compression/bigfile3 compression/bigfile4 $ ls 3.1.tar compression $ ls compression hosts.gz
À l’exception des chemins absolus (chemins commençant par /
), les fichiers tar
conservent l’intégralité du chemin d’accès aux fichiers lors de leur création. Comme le fichier 3.1.tar
a été créé avec un seul répertoire, ce répertoire sera créé par rapport à votre répertoire de travail actuel lors de l’extraction. Un autre exemple devrait permettre de clarifier ce point :
$ cd ~/linux_essentials-3.1/archiving $ rm -rf compression $ cd ../compression $ tar cf ../tar/3.1-nodir.tar * $ cd ../archiving $ mkdir untar $ cd untar $ tar -xf ../3.1-nodir.tar $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz
Si vous souhaitez utiliser le chemin absolu dans un fichier tar
, vous devez utiliser l’option P
. Sachez que cela peut écraser des fichiers importants et provoquer des erreurs sur votre système.
Le programme tar
peut également gérer la compression et la décompression des archives à la volée. tar
le fait en appelant l’un des outils de compression mentionnés plus haut dans cette section. Il suffit d’ajouter l’option appropriée à l’algorithme de compression. Les plus couramment utilisés sont j
, J
et z
pour bzip2
, xz
et gzip
, respectivement. Vous trouverez ci-dessous des exemples utilisant les algorithmes susmentionnés :
$ cd ~/linux_essentials-3.1/compression $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz $ tar -czf gzip.tar.gz bigfile bigfile2 bigfile3 $ tar -cjf bzip2.tar.bz2 bigfile bigfile2 bigfile3 $ tar -cJf xz.tar.xz bigfile bigfile2 bigfile3 $ ls -l | grep tar -rw-r--r-- 1 emma emma 450202 Jun 27 05:56 bzip2.tar.bz2 -rw-r--r-- 1 emma emma 548656 Jun 27 05:55 gzip.tar.gz -rw-r--r-- 1 emma emma 147068 Jun 27 05:56 xz.tar.xz
Remarquez que dans l’exemple, les fichiers .tar
ont des tailles différentes. Cela montre qu’ils ont été compressés avec succès. Si vous créez des archives .tar
compressées, vous devez toujours ajouter une deuxième extension de fichier indiquant l’algorithme que vous avez utilisé. Il s’agit de .xz
, .bz
et .gz
pour xz
, bzip2
et gzip
, respectivement. Parfois, des extensions raccourcies telles que .tgz
sont utilisées.
Il est possible d’ajouter des fichiers aux archives de tar non compressées déjà existantes. Pour ce faire, utilisez l’option u
. Si vous essayez d’ajouter un fichier à une archive compressée, vous obtiendrez une erreur.
$ cd ~/linux_essentials-3.1/compression $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz bzip2.tar.bz2 hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz gzip.tar.gz xz.tar.xz $ tar cf plain.tar bigfile bigfile2 bigfile3 $ tar tf plain.tar bigfile bigfile2 bigfile3 $ tar uf plain.tar bigfile4 $ tar tf plain.tar bigfile bigfile2 bigfile3 bigfile4 $ tar uzf gzip.tar.gz bigfile4 tar: Cannot update compressed archives Try 'tar --help' or 'tar --usage' for more information.
La Gestion des fichiers ZIP
Les machines Windows n’ont souvent pas d’applications pour gérer les tar balls ou de nombreux outils de compression que l’on trouve couramment sur les systèmes Linux. Si vous avez besoin d’interagir avec les systèmes Windows, vous pouvez utiliser des fichiers ZIP. Un fichier ZIP est un fichier d’archive similaire à un fichier tar
compressé.
Les programmes zip
et unzip
peuvent être utilisés pour travailler avec des fichiers ZIP sur les systèmes Linux. L’exemple ci-dessous devrait vous suffire pour commencer à les utiliser. Nous commençons par créer un ensemble de fichiers :
$ cd ~/linux_essentials-3.1 $ mkdir zip $ cd zip/ $ mkdir dir $ touch dir/file1 dir/file2
Nous utilisons maintenant le format zip
pour regrouper ces fichiers dans un fichier ZIP :
$ zip -r zipfile.zip dir adding: dir/ (stored 0%) adding: dir/file1 (stored 0%) adding: dir/file2 (stored 0%) $ rm -rf dir
Enfin, nous décompressons à nouveau le fichier ZIP :
$ ls zipfile.zip $ unzip zipfile.zip Archive: zipfile.zip creating: dir/ extracting: dir/file1 extracting: dir/file2 $ find . ./zipfile.zip ./dir ./dir/file1 ./dir/file2
Pour l’ajout de répertoires à des fichiers ZIP, l’option -r
fait en sorte que le zip
inclue le contenu d’un répertoire. Sans cette option, vous auriez un répertoire vide dans le fichier ZIP.
Exercices Guidés
-
D’après les extensions, lesquels des outils suivants ont été utilisés pour créer ces fichiers ?
Nom du fichier tar
gzip
bzip2
xz
archive.tar
archive.tgz
archive.tar.xz
-
D’après les extensions, lesquels de ces fichiers sont des archives et lesquels sont compressés ?
Nom du fichier Archive Compressé file.tar
file.tar.bz2
file.zip
file.xz
-
Comment ajouter un fichier à une archive
tar
compressés au formatgzip
? -
Quelle option de
tar
demande à une archivetar
d’inclure les chemins absolus commençant par/
? -
L’outil
zip
supporte-t-il différents niveaux de compression ?
Exercices d’Exploration
-
Lors de l’extraction de fichiers, est-ce que
tar
supporte les globs dans la liste des fichiers ? -
Comment s’assurer qu’un fichier décompressé est identique au fichier avant qu’il ne soit compressé ?
-
Que se passe-t-il si vous essayez d’extraire un fichier d’une archive
tar
qui existe déjà sur votre système de fichiers ? -
Comment extraire le fichier
archive.tgz
sans utiliser l’optiontar
z
?
Résumé
Les systèmes Linux disposent de plusieurs outils de compression et d’archivage. Cette leçon a porté sur les plus courants. L’outil d’archivage le plus courant est tar
. Si une interaction avec les systèmes Windows est nécessaire, zip
et unzip
peuvent créer et extraire des fichiers ZIP.
La commande tar
a quelques options qui valent la peine d’être mémorisées. Il s’agit de x
pour extraire, c
pour créer, t
pour afficher le contenu et u
pour ajouter ou remplacer des fichiers. L’option v
affiche les fichiers qui sont traités par tar
lors de la création ou de l’extraction d’une archive.
Le dépôt d’une distribution Linux typique comporte de nombreux outils de compression. Les plus courants sont gzip
, bzip2
et xz
. Les algorithmes de compression prennent souvent en charge différents niveaux qui vous permettent d’optimiser la vitesse ou la taille des fichiers. Les fichiers peuvent être décompressés avec gunzip
, bunzip2
et unxz
.
Les outils de compression ont généralement des programmes qui se comportent comme les outils de fichiers texte courants, à la différence qu’ils fonctionnent sur des fichiers compressés. Quelques-uns d’entre eux sont zcat
, bzcat
et xzcat
. Les outils de compression sont généralement livrés avec des programmes dotés des fonctionnalités grep
, more
, less
, diff
et cmp
.
Commandes utilisées dans les exercices :
bunzip2
-
Décompresse un fichier compressé en
bzip2
. bzcat
-
Affiche le contenu d’un fichier compressé au format
bzip
. bzip2
-
Compresse les fichiers en utilisant l’algorithme et le format
bzip2
. gunzip
-
Décompresse un fichier compressé au format
gzip
. gzip
-
Compresse les fichiers en utilisant l’algorithme et le format
gzip
. tar
-
Crée, met à jour, répertorie et extrait des archives
tar
. unxz
-
Décompresse un fichier compressé en
xz
. unzip
-
Décompresse et extrait le contenu d’un fichier ZIP.
xz
-
Compresse les fichiers en utilisant l’algorithme et le format
xz
. zcat
-
Affiche le contenu d’un fichier compressé au format
gzip
. zip
-
Crée et compresse des archives ZIP.
Réponses aux Exercices Guidés
-
D’après les extensions, lesquels des outils suivants ont été utilisés pour créer ces fichiers ?
Nom du fichier tar
gzip
bzip2
xz
archive.tar
X
archive.tgz
X
X
archive.tar.xz
X
X
-
D’après les extensions, lesquels de ces fichiers sont des archives et lesquels sont compressés ?
Nom du fichier Archive Compressé file.tar
X
file.tar.bz2
X
X
file.zip
X
X
file.xz
X
-
Comment ajouter un fichier à une archive
tar
compressée au formatgzip
?Vous décompressez le fichier avec
gunzip
, vous ajoutez le fichier avectar uf
, puis vous le compressez avecgzip
-
Quelle option de
tar
demande à une archivetar
d’inclure les chemins absolus commençant par/
?L’option -P. De la page de manuel :
-P, --absolute-names Don't strip leading slashes from file names when creating archives
-
L’outil
zip
supporte-t-il différents niveaux de compression ?Oui. Vous utiliseriez
-#
, en remplaçant#
par un chiffre de 0 à 9. De la page de manuel :-# (-0, -1, -2, -3, -4, -5, -6, -7, -8, -9) Regulate the speed of compression using the specified digit #, where -0 indicates no compression (store all files), -1 indi‐ cates the fastest compression speed (less compression) and -9 indicates the slowest compression speed (optimal compression, ignores the suffix list). The default compression level is -6. Though still being worked, the intention is this setting will control compression speed for all compression methods. Cur‐ rently only deflation is controlled.
Réponses aux Exercices d’Exploration
-
Lors de l’extraction de fichiers, est-ce que
tar
supporte les globs dans la liste des fichiers ?Oui, vous utiliseriez l’option
--wildcards
. L’option--wildcards
doit être placé juste après le nom du fichiertar
lorsque vous utilisez les options sans tiret. Par exemple :$ tar xf tarfile.tar --wildcards dir/file* $ tar --wildcards -xf tarfile.tar dir/file*
-
Comment s’assurer qu’un fichier décompressé est identique au fichier avant qu’il ne soit compressé ?
Vous n’avez pas besoin de faire quoi que ce soit avec les outils couverts dans cette leçon. Tous trois incluent des sommes de contrôle dans leur format de fichier qui est vérifiée lors de leur décompression.
-
Que se passe-t-il si vous essayez d’extraire un fichier d’une archive
tar
qui existe déjà sur votre système de fichiers ?Le fichier sur votre système de fichiers est écrasé par la version qui se trouve dans le fichier
tar
. -
Comment extraire le fichier
archive.tgz
sans utiliser l’optiontar
z
?Vous le décompresserez d’abord avec
gunzip
.$ gunzip archive.tgz $ tar xf archive.tar