La commande tar

Un article de Wiki de la communauté Mandriva.

Jump to: navigation, search

Sommaire

[modifier] Introduction

tar est une commande qui est avant tout destinée à l'archivage, mais elle peut aussi être employée pour copier des fichiers, des répertoires, voire tout un système de fichiers.


Avant d'aller plus avant, notez ces aspects des options de tar  :

- alors qu'en général, la plupart des options des commandes du shell commencent par un (parfois deux) tiret(s), tar fait partie de ce petit nombre de commandes dont les options peuvent être tapées sans aucun tiret qui les précède

- lorsqu'on se renseigne sur tar on est souvent surpris de voir que les exemples proposés semblent contenir toujours l'option f, qui paraît être, de façon paradoxale, une sorte d'option obligatoire... En fait, cette option peut être omise, mais elle ne peut l'être que si vous utilisez tar pour lire ou écrire vers/depuis un lecteur de bande... Dans les autres cas, plus fréquents pour un utilisateur ordinaire, l'option f (pour file/fichier) est indispensable

- l'option v, que vous pouvez toujours omettre, demande à la commande d'afficher la liste des fichiers traités (c'est le mode verbeux ou disert de la commande). Nous donnerons des exemples allégés dépourvus de cette option mais vous pourrez la rajouter dans tous les cas de figure.

[modifier] Gestion d'archive

[modifier] Création d'archive

La commande tar peut servir à placer dans un seul fichier d'archive (qu'on appellera archive tar ou en anglais tarball) un ensemble de fichiers et de répertoires. Le « paquet » ainsi créé pourra ensuite être stocké quelque part, ou transmis à un correspondant.


De tels fichiers d'archive prennent classiquement une extension .tar.


Pour créer une archive tar, vous devez utiliser l'option c (pour créer) et lui passer en arguments d'abord le nom du fichier d'archive à créer puis un ou plusieurs fichier(s) ou répertoire(s) à archiver.

Par exemple la commande :

tar cf  monarchive.tar   fichier1  fichier2  répertoire1  fichier3

créera dans le répertoire courant, un fichier d'archive monarchive.tar, qui contiendra fichier1, fichier2 et fichier3, ainsi que le répertoire répertoire1 avec tout son contenu. Pour le rôle de l'option f, voir #Introduction.


Si vous voulez qu'en plus, les fichiers à archiver soient compactés (voient leur taille réduite) à la mode de l'utilitaire de compression gzip, votre archive devra avoir une extension tgz (ou tar.gz) et vous devrez utiliser l'option z :

tar czf  monarchive.tar.gz   fichier1 fichier2 répertoire1 fichier3

Si la compression doit être faite à la mode de l'utilitaire de compression bzip2 (qui réduit davantage que gzip la taille des données compressées, mais au prix d'une durée de compression plus longue... à vous de voir...), vous utiliserez l'option j et l'extension du fichier d'archive sera tar.bz2 :

tar cjf  monarchive.tar.bz2  fichier1 fichier2 répertoire1 fichier3

Enfin, pour compresser au format LZMA Image:Wikipedia-icon.png :

tar cYf monarchive.tar.lzma fichier1 fichier2 répertoire1 fichier3

Ce sont là les cas essentiels de compactage, pour plus de détails et d'options, consultez la page de man sur tar en français.

[modifier] Décompactage d'archive

Utiliser l'option x (depuis la version 1.15 de tar de décembre 2004, il n'est plus nécessaire de préciser, pour une archive à décompacter, s'il elle l'a été avec gzip (option z) ou avec bzip2 (option j)).

Voici des commandes possibles pour désarchiver (et éventuellement décompacter) des archives tar situées dans votre répertoire de travail courant :

tar xf monarchive.tar
tar xf monarchive.tar.gz
tar xf monarchive.tar.bz2

Les fichiers et répertoires contenus dans l'archive seront décompactés à la racine du répertoire courant.

[modifier] Inspection du contenu d'une archive

Pour inspecter le contenu d'une archive sans l'extraire ni la modifier, utilisez l'option t.

Ainsi, pour inspecter le contenu d'un fichier d'archive monarchive.tar.gz, situé dans votre répertoire de travail, vous pourrez faire :

tar tf monarchive.tar.gz

[modifier] Copie avec tar

Si les emplois de tar pour créer ou décompacter une archive sont extrêmement connus sous Linux, les utilisateurs connaissent moins souvent l'emploi de tar pour copier.

Pour copier avec tar, l'idée générale est de créer une archive de ce que l'on veut copier, en utilisant pour cela une première instance de tar employée avec l'option c, et d'envoyer directement cette archive, via un tube, à une seconde instance de tar employée avec l'option x qui décompactera aussitôt l'archive dans un autre répertoire du système de fichier. L'archive n'aura donc finalement pas à être écrite sur le disque.

Pour cela, dans la position habituellement occupée par le nom du fichier d'archive (comme c'est le cas, par exemple, dans des emplois de tar du genre de ceux que nous avons illustrés dans la section précédente), on utilise à la place le symbole -. Ce symbole peut représenter, dans certaines commandes du shell, selon le contexte, la sortie standard ou l'entrée standard. D'ordinaire, l'entrée standard est le clavier et la sortie standard est l'écran. Toutefois, dans une ligne comportant un tube comme  : commande1 | commande2, la sortie standard de commande1 est redirigée vers commande2 et devient l'entrée standard de commande2. C'est ce qui se passera dans l'exemple que nous allons proposer.

Pour copier tout le contenu de votre répertoire de travail courant (répertoire dans lequel la commande cd vous aura permis de vous placer au préalable), vous pourrez lancer cette ligne de commande :

tar cf - ./ | (cd /chemin/du/repertoire_destination; tar xf -)

La sortie standard du premier tar (représentée par -) est transmise par le tube | à l'entrée standard du second tar (représentée elle aussi aussi par -), par l'entremise d'un « bloc de commandes » entre parenthèses dont il fait partie. La commande cd, au début de ce bloc, nous ayant placé dans le répertoire destination, c'est dans ce répertoire que l'archive errante se trouve finalement décompactée. (Pour le sens du point-vigule, voir Le shell sans peine#Enchaînement de commandes).

La totalité du contenu du répertoire de travail sera alors copiée dans le répertoire de destination, y compris tous les sous-répertoires et les fichiers cachés, avec maintien des horodatages et conservation des liens symboliques, et, si vous avez pris soin de lancer la commande sous root, avec conservation des permissions et des propriétaires, sans que vous ayez à faire attention à une quelconque option.

Notez que tout fichier du répertoire de destination ayant le même nom qu'un fichier du répertoire source sera écrasé.

Attention !
Si vous lancez une telle ligne de commande sous une identité de simple utilisateur, les propriétaires pourront changer (vous et votre groupe serez désormais propriétaires des fichiers copiés, s'ils appartenaient à un autre utilisateur (même root !) ou à son groupe). En outre, à moins que vous n'ayez utilisé l'option p avec la seconde instance de tar (tar xpf -), les permissions pourront parfois changer.
À noter !
La commande cp -a ./ /chemin/du/repertoire/de/destination/ reste une concurrente beaucoup plus simple à taper et semble-t-il équivalente. Quelques tests suggèrent que la durée d'exécution n'est pas significativement différente. A noter que la version tar suppose que le répertoire de destination existe, alors que la version cp le crée s'il n'existe pas.