15 exemples de commandes tar pour les administrateurs système et les développeurs

tar est l’un des formats d’archivage de fichiers populaires disponibles dans les systèmes basés sur Unix et Linux.

Le nom lui-même est dérivé de Tape ARchive car il a été développé pour écrire des données séquentielles sur des périphériques de bande. Il est aussi parfois appelé tarball.

Par défaut, tar archive uniquement les fichiers sans compression mais en utilisant certaines parties. Nous pouvons utiliser différentes techniques de compression pour obtenir une sortie compressée. tar est généralement inclus par défaut dans la plupart des distributions Linux, et le format lui-même est pris en charge sur d’autres systèmes d’exploitation, y compris Windows et macOS, via différents outils et utilitaires.

Nous couvrirons certains des exemples courants et l’utilisation de la commande tar et de ses indicateurs pris en charge dans cet article.

Alors, commençons…

Créer une archive tar

Pour créer une simple archive non compressée, la syntaxe de la commande tar est :

$ tar cvf <tar-file-name> <files-to-archive>

Ici, les drapeaux c correspondent à la création, v à la sortie détaillée et f à la spécification du nom du fichier d’archive tar. Par convention, spécifiez le nom du fichier tar avec l’extension .tar. Les fichiers à archiver peuvent être spécifiés avec des caractères génériques ou sous forme de noms/chemins de fichier uniques ou multiples.

Par exemple, j’ai trois fichiers dans mon répertoire :

$ ls -l
total 12
-rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt
$

Et je veux créer une archive tar contenant les trois fichiers, cela peut être fait comme suit :

$ tar cvf archive.tar *
file1.txt
file2.txt
file3.txt
$ ls -l archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
$

Je ne peux également spécifier que des fichiers spécifiques à archiver, comme :

$ tar cvf archive1.tar file1.txt file2.txt
file1.txt
file2.txt
$ ls -l archive1.tar
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive1.tar
$

Créer une archive compressée (GZ)

tar permet non seulement d’archiver des fichiers, mais aussi de les compresser pour économiser de l’espace. L’un des formats de compression populaires est gunzip, généralement représenté par l’extension .gz après .tar ou par tgz. Nous pouvons utiliser le drapeau z pour spécifier que nous avons besoin que les fichiers soient compressés à l’aide de gunzip. Voici un exemple :

$ tar cvzf archive.tar.gz file*
file1.txt
file2.txt
file3.txt
$ ls -l archive.tar archive.tar.gz
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair   188 Sep 12 20:21 archive.tar.gz
$

Vous pouvez observer que la taille des deux fichiers d’archive est sensiblement différente même si les deux contiennent les trois mêmes fichiers. Cela est dû à l’utilisation de la compression à l’aide de l’indicateur z.

Créer une archive compressée (BZ2)

tar prend en charge plusieurs autres formats de compression. L’un d’eux est bz2 ou bzip2 qui est représenté par l’extension tar.bz2 ou parfois par tbz2. Cela peut vous donner une taille d’archive plus petite mais à son tour consomme plus de CPU, de sorte que le processus de compression/décompression peut être plus lent que l’archive gz.

Exemple:

$ tar cvjf archive.tar.bz2 file*
file1.txt
file2.txt
file3.txt
$ ls -l archive.tar archive.tar.gz archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair   212 Sep 12 20:25 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair   188 Sep 12 20:21 archive.tar.gz
$ file archive.tar*
archive.tar:     POSIX tar archive (GNU)
archive.tar.bz2: bzip2 compressed data, block size = 900k
archive.tar.gz:  gzip compressed data, from Unix, original size modulo 2^32 10240
$

Décompresser tous les fichiers

Une archive tar (qu’elle soit compressée ou non) peut être extraite simplement en utilisant l’option x. Les exemples ci-dessous clarifieront son utilisation :

$ tar xvf archive.tar
file1.txt
file2.txt
file3.txt
$ ls -l
total 24
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 19 18:25 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair    13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair    19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair    24 Sep 12 20:08 file3.txt
$

Cela fonctionne pour une archive compressée gz comme :

$ tar xvf archive.tar.gz
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 19 18:27 archive.tar.gz
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Ou même pour une archive compressée bz2 comme :

$ tar xvf archive.tar.bz2
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Lister le contenu tar

Pour répertorier le contenu d’une archive tar, vous pouvez utiliser l’indicateur t comme indiqué ci-dessous :

$ tar tvf archive.tar.bz2
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
$

Décompresser des fichiers spécifiques

Un seul fichier peut être extrait d’une archive tar ou tar.gz ou tar.bz2 en spécifiant le nom du fichier comme suit :

$ tar xvf archive.tar.bz2 file1.txt
file1.txt
$ ls -l
total 8
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
$

De même, vous pouvez spécifier plusieurs noms de fichiers séparés par un espace pour les extraire ensemble en une seule fois.

$ tar xvf archive.tar.bz2 file1.txt file3.txt
file1.txt
file3.txt
$ ls -l
total 12
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Décompresser à l’aide de caractères génériques

Pour extraire un ou plusieurs fichiers à l’aide d’un motif générique, utilisez l’indicateur –wildcards :

$ tar xvf archive.tar.bz2 --wildcards "file*"
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Ajouter des fichiers à archiver

De nouveaux fichiers peuvent être ajoutés/ajoutés aux archives tar non compressées existantes en utilisant l’indicateur r ou –append avec de nouveaux noms de fichiers ou un modèle générique (rappelez-vous que cela ne fonctionne qu’avec les fichiers .tar non compressés et non avec les formats compressés tar.gz ou tar.bz2) :

$ tar rvf archive.tar file-new*
file-new.txt
file-new2.txt
$ tar tvf archive.tar
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt
-rw-r--r-- abhisheknair/abhisheknair  9 2021-09-19 19:10 file-new.txt
-rw-r--r-- abhisheknair/abhisheknair  9 2021-09-19 19:10 file-new2.txt
$

Vous pouvez observer que la liste du contenu de archive.tar affiche à nouveau les deux fichiers nouvellement ajoutés.

Supprimer les fichiers de l’archive

La suppression de fichiers spécifiques d’une archive tar est possible en utilisant l’indicateur –delete comme indiqué ci-dessous (comparez la liste tar avant et après la suppression des fichiers) :

$ tar tvf archive.tar
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt
-rw-r--r-- abhisheknair/abhisheknair  9 2021-09-19 19:10 file-new.txt
-rw-r--r-- abhisheknair/abhisheknair  9 2021-09-19 19:10 file-new2.txt
$ tar --delete -f archive.tar file-new.txt file-new2.txt
$ tar tvf archive.tar
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt
$

Encore une fois, cela ne fonctionne que pour les archives non compressées et échouera pour les formats d’archives compressés.

Créer avec Vérifier

Lors de la création de fichiers tar non compressés, vous pouvez vérifier le contenu de l’archive en utilisant l’indicateur W comme :

$ tar cvfW archive.tar file*.txt
file1.txt
file2.txt
file3.txt
Verify file1.txt
Verify file2.txt
Verify file3.txt
$

Cela ne peut pas être utilisé avec les indicateurs de compression, bien que vous puissiez compresser le fichier tar créé ultérieurement à l’aide de gzip ou d’autres outils.

Extraire le tar dans le dossier

Si vous souhaitez extraire le contenu de votre archive tar dans un dossier spécifique au lieu du répertoire actuel, utilisez l’indicateur -C avec le chemin du répertoire comme indiqué ci-dessous :

$ tar xvf archive.tar -C new-directory/
file1.txt
file2.txt
file3.txt
file2.txt
file4.txt
$ ls -l new-directory/
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair 15 Sep 19 18:59 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt
-rw-r--r-- 1 abhisheknair abhisheknair 10 Sep 19 18:58 file4.txt
$

Utiliser l’indicateur de différence

Vous pouvez utiliser l’indicateur –diff ou d pour rechercher tout changement entre les fichiers de l’archive tar et ceux du système de fichiers. Voici un exemple qui exécute le diff une fois lorsque le fichier à l’intérieur du tar et à l’extérieur était le même. Après la mise à jour du fichier, il a été exécuté à nouveau pour montrer la différence de sortie.

$ tar dvf archive.tar file4.txt
file4.txt
$
$ echo newline > file4.txt
$
$ tar dvf archive.tar file4.txt
file4.txt
file4.txt: Mod time differs
file4.txt: Size differs
$

Exclure les fichiers

L’exclusion de fichiers spécifiques peut être une exigence lors de la création d’archives tar. Ceci peut être réalisé avec le drapeau –exclude.

$ tar --exclude="dir/file2.txt" --exclude="dir/file-new*.txt" -cvzf archive.tar.gz dir/
dir/
dir/file1.txt
dir/file3.txt
$ ls -l dir
total 24
-rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new.txt
-rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:20 file-new3.txt
-rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:27 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair 6 Sep 19 19:27 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 8 Sep 19 19:27 file3.txt
$ tar tvf archive.tar.gz
drwxr-xr-x abhisheknair/abhisheknair 0 2021-09-19 19:30 dir/
-rw-r--r-- abhisheknair/abhisheknair 5 2021-09-19 19:27 dir/file1.txt
-rw-r--r-- abhisheknair/abhisheknair 8 2021-09-19 19:27 dir/file3.txt
$

Comme vous pouvez le constater à partir de la sortie ci-dessus, nous pouvons spécifier l’indicateur –exclude plusieurs fois pour spécifier plusieurs noms de fichiers ou modèles dans la condition AND. Notez que sur les six fichiers du répertoire dans l’exemple ci-dessus, seuls deux fichiers remplissaient la condition pour être inclus dans archive.at.gz.

Afficher la taille du contenu tar

Nous pouvons obtenir la taille du contenu d’une archive tar compressée à l’aide de la commande ci-dessous :

$ tar tvf archive.tar.gz
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
$ tar -xzf archive.tar.gz --to-stdout|wc -c
56
$

De même pour l’archive bz2 :

$ tar tvf archive.tar.bz2
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
$ tar -xjf archive.tar.bz2 --to-stdout|wc -c
56
$

Conserver les autorisations

Par défaut, la commande tar préserve l’autorisation des fichiers et des répertoires qu’elle archive bien que vous puissiez spécifier explicitement la même chose en utilisant l’indicateur -p ou –preserve-permissions comme indiqué ci-dessous :

$ tar cvpzf archive.tar.gz *.txt
file1.txt
file2.txt
file3.txt
$

Résumé 👨‍💻

tar est un utilitaire utile sur les systèmes Unix/Linux depuis longtemps et a été principalement utilisé dans les tâches d’archivage et de sauvegarde. L’utilitaire a évolué avec de nombreuses options au fil du temps. Il peut être utilisé pour des tâches simples à complexes, étant donné que vous connaissez les fonctionnalités qu’il offre. Cet article couvre certaines des opérations de base que vous pouvez effectuer avec la commande tar et montre comment elle peut vous aider dans vos tâches quotidiennes d’administration système.

Reportez-vous à sa page de manuel man tar ou utilisez la commande tar –help ou tar –usage pour obtenir plus de détails.

x