Tar est bien plus qu’un simple outil d’archivage. C’est un utilitaire puissant doté de fonctionnalités intégrées remarquables qui permettent la compression et la décompression de fichiers pendant le processus d’archivage. Découvrez-en plus sur cet outil polyvalent dans cet article.
Qu’est-ce que tar et comment l’installer ?
D’après le manuel de tar (accessible via la commande man tar
après installation), tar est un outil dédié à l’archivage. Il propose une multitude de fonctionnalités, notamment la capacité de compresser et de décompresser des fichiers en temps réel lors de leur archivage. Commençons par l’installation de tar :
Pour les distributions Linux basées sur Debian/Apt (telles qu’Ubuntu et Mint), utilisez la commande suivante dans votre terminal :
sudo apt install tar
Pour les distributions Linux basées sur RedHat/Yum (comme RHEL, Centos et Fedora), saisissez cette commande dans votre terminal :
sudo yum install tar
Ensuite, nous allons créer des données de test :
mkdir test; cd test
touch a b c d e f
echo 1 > a; echo 5 > e; echo '22222222222222222222' > b
Nous avons créé un répertoire nommé « test » et six fichiers vides à l’aide de la commande touch
. Des données ont été ajoutées aux fichiers « a », « e » et « b ». Le fichier « b » contient des données répétitives qui se compresseront efficacement.
Si vous souhaitez approfondir le fonctionnement de la compression, vous pouvez consulter notre article : Comment fonctionne la compression de fichiers ?
Création d’une archive sans compression
tar -hcf all_files.tar *
ls -l | grep -v total | awk '{print $5"tbytes for: "$9}' | sort -n
Une archive non compressée a été créée avec la commande tar -hcf all_files.tar *
. Examinons les options utilisées :
L’option -h
, bien que non essentielle dans ce cas précis, est fortement recommandée. Elle indique le déréférencement, ce qui signifie que les liens symboliques seront suivis pour archiver les fichiers vers lesquels ils pointent.
Les options -c
et -f
sont ensuite utilisées. Elles sont combinées avec -h
. L’option -c
permet de créer une nouvelle archive. Les répertoires sont archivés de manière récursive par défaut, à moins que l’option --no-recursion
soit utilisée. -f
permet de spécifier le nom de l’archive. Elle doit être placée en dernier dans la chaîne d’options (car elle nécessite un argument), ce qui permet d’ajouter le nom du fichier d’archive directement après. Par exemple, tar -fch test.tar *
ne fonctionnera pas :
Après la création de l’archive, nous utilisons une sortie ls
modifiée qui affiche la taille en octets de chaque fichier. On constate que le fichier tar est plus volumineux que la somme de nos fichiers originaux. Ceci s’explique par le fait que les fichiers sont simplement archivés, et que des informations supplémentaires pour tar sont ajoutées.
Il est intéressant de noter qu’on peut identifier les types de fichiers à l’aide de la commande file
:
file c
file b
file all_files.tar
Création d’une archive compressée
Un algorithme de compression couramment utilisé est GZIP. Ajoutons l’option correspondante (-z
) à notre chaîne d’options et observons l’impact sur la taille du fichier :
tar -zhcf all_files.tar.gz [a-f]
ls -l | grep -v total | awk '{print $5"tbytes for: "$9}' | sort -n
Cette fois, une expression régulière a été utilisée pour ne sélectionner que les fichiers de « a » à « f », afin d’éviter que la commande tar n’inclue le fichier « all_files.tar » dans le nouveau fichier « all_files.tar.gz » !
Consultez « Comment utilisez-vous réellement Regex ? » et « Modifier le texte à l’aide d’expressions régulières à l’aide de sed » si vous souhaitez approfondir les expressions régulières.
L’option -z
a été ajoutée pour utiliser la compression GZIP après l’archivage. Le fichier obtenu est de 186 octets, ce qui montre que l’en-tête et la surcharge de tar d’environ 10 Ko peuvent être très bien compressés dans ce cas.
La taille totale de l’archive est 7,44 fois plus grande que la taille totale des fichiers. Cet exemple n’est pas représentatif de la compression de gros fichiers, où des gains sont presque toujours observables, sauf si les données ont été pré-compressées ou sont d’un format qui ne se condense pas facilement. De plus, un algorithme (comme GZIP) peut être plus performant qu’un autre (comme BZIP2) pour des données spécifiques.
Compression de niveau supérieur pour gagner encore plus d’octets
Peut-on encore réduire la taille du fichier ? Oui. On peut utiliser l’option -I
pour définir l’option de compression maximale de GZIP (grâce à stackoverflow user ideasman42) :
tar -I 'gzip -9' -hcf all_files.tar.gz [a-f]
ls -l | grep -v total | awk '{print $5"tbytes for: "$9}' | sort -n
-I 'gzip -9'
a été utilisé pour spécifier le programme de compression, et l’option -z
a été supprimée. Le fichier résultant est 12 octets plus petit grâce à une tentative de compression plus poussée (mais plus lente) avec GZIP (au niveau -9
).
Généralement, plus la compression est rapide (faible niveau, exemple -1
), plus la taille du fichier est grande. À l’inverse, plus la compression est lente (niveau élevé, exemple -9
), plus le fichier est petit. Vous pouvez ajuster le niveau de compression de -1
(rapide) à -9
(lent).
Autres programmes de compression
Deux autres algorithmes de compression courants peuvent être utilisés : bzip2 avec l’option -j
, et XZ avec l’option -J
. Les différentes options d’algorithmes génèrent des tailles de fichiers différentes.
Vous pouvez aussi utiliser la commande -I
pour définir les options de compression maximales pour bzip2 (-9
) :
Et -9e
pour xz :
Les résultats sont moins bons dans ce cas que ceux obtenus avec GZIP. Cependant, bzip2 et xz peuvent montrer de meilleures performances avec d’autres jeux de données.
Décompresser un fichier
Décompresser un fichier est simple, quelle que soit la méthode de compression utilisée à l’origine, à condition que l’algorithme de décompression soit présent sur votre ordinateur. Si l’algorithme de compression d’origine était bzip2 (fichier avec l’extension .bz2), alors il faudra avoir installé bzip2 (sudo apt install bzip2
ou sudo yum install bzip2
).
rm a b c d e f
tar -xf all_files.tar.gz
ls
L’option -x
permet d’extraire les fichiers de l’archive « all_files.tar.gz », et le nom du fichier est spécifié avec l’option -f
.
La compression permet d’économiser de l’espace de stockage, et la maîtrise de tar et des options de compression est très utile. Une fois l’archive créée, l’extraction est facile, à condition que le logiciel de décompression approprié soit disponible sur l’ordinateur. À vous de jouer !