Tar (informatique)

{{#ifeq:||Un article de Ziki, l'encyclopédie libre.|Une page de Ziki, l'encyclopédie libre.}}

Modèle:Minuscule Modèle:Autre4 Modèle:Infobox Format de données

Fichier:Tar screenshot.png
Utilisation de tar.

Le programme tar (de l'anglais Modèle:Langue, littéralement « archiveur pour bande ») est un logiciel d'archivage de fichiers standard des systèmes de type UNIX. Il a été créé dans les premières versions d'UNIX et standardisé par les normes POSIX.1-1988 puis POSIX.1-2001. Il existe plusieurs implémentations<ref>{{#invoke:Langue|indicationDeLangue}} Banc d'essai réalisée sur trois d'entre elles, bsdtar, GNU tar et star - Jan Psota, octobre 2007.</ref> tar, la plus couramment utilisée étant GNU tar.

Caractéristiques techniques

Un fichier d'archive créé par tar n'est pas compressé. On appelle parfois le fichier d'archivage créé un tarball.

L'archivage se fait presque toujours sur un disque. L'usage le plus courant actuellement consiste cependant à créer ou lire un fichier archive.

Tar préserve les droits, le propriétaire et le groupe des fichiers et des répertoires. Il permet également de sauvegarder les liens symboliques et les fichiers spéciaux orientés bloc ou caractère.

Extensions et compression

Fichier:Targzip.svg
Schéma de principe : combinaison de tar et de gzip.

Souvent, un fichier créé par tar est ensuite compressé par un outil de compression de données. Les formats les plus courants sont :

Utilitaire de compression extension Unix extension MS-DOS
compress .tar.Z .taz
gzip .tar.gz .tgz
bzip2 .tar.bz2 .tbz
lzma et xz .tar.lz .tlz
xz .tar.xz .txz
7zip .tar.7z

Les logiciels UNIX, et particulièrement les fichiers des sources, sont fréquemment distribués sous forme de fichier d'archivage compressé.

Format du fichier

Pour l'essentiel, le format employé consiste en une concaténation du contenu des fichiers. Chaque fichier est précédé d'un en-tête de 512 octets, cette taille correspondant à la taille d'un bloc dans la version 7 du système de fichiers Unix.

Pour améliorer l'efficacité de l'écriture sur bande magnétique, les blocs de Modèle:Unité sont groupés par 20 par défaut, produisant des blocs de 10 Ko. Le bloc final est complété par des zéros binaires.

Format de l'en-tête

Le format original de l'en-tête des fichiers dans tar est le suivant :

Nom Position Taille Description
name 0 100 Nom du fichier
mode 100 8 Permissions
uid 108 8 Propriétaire (inutilisé si format étendu)
gid 116 8 Groupe (inutilisé si format étendu)
size 124 12 Taille du fichier en octets. La taille doit être nulle si le fichier est un fichier spécial (lien symbolique, tuyau nommé, "device" par blocs ou par caractères, etc)
mtime 136 12 Dernière modification en temps Unix.
chksum 148 8 Somme de contrôle de l'en-tête où ce champ est considéré comme rempli d'espaces (valeur ascii 32)
type flag 156 1 Type de fichier
linkname 157 100 Nom du fichier pointé par ce lien symbolique (Si le type indique un lien symbolique)

Les champs "mode", "uid", "gid", "size", "mtime" et "chksum" sont stockés en ASCII en système octal (base 8).

Champ Position Taille Description
Les champs suivants ont été ajoutés par la norme POSIX 1003.1-1990.
magic 257 6 ce champ indique s'il s'agit d'un en-tête étendu. Il vaut alors "ustar".
version 263 2 les caractères « 00 » indiquent un format POSIX 1003.1-1990. Deux espaces indique le format vieux GNU (à ne plus utiliser).
uname 265 32 nom de l'utilisateur propriétaire sous forme d'une chaîne de caractères d'au plus 32 caractères. S'il est présent, ce champ doit être utilisé à la place de uid.
gname 297 32 nom du groupe propriétaire sous forme d'une chaîne de caractères d'au plus 32 caractères. S'il est présent, ce champ doit être utilisé à la place de gid.
devmajor 329 8 ce champ représente le numéro majeur si ce fichier est de type "device" par blocs ou par caractères
devminor 337 8 ce champ représente le numéro mineur, si ce fichier est de type "device" par blocs ou par caractères
prefix 345 155
fin 500 0


Type de fichier
Valeur Signification
'0' Fichier normal
(ASCII NUL) Fichier normal (usage obsolète)
'1' Lien matériel
'2' Lien symbolique
'3' Fichier spécial caractère
'4' Fichier spécial bloc
'5' Répertoire
'6' Tube nommé
'7' Fichier contigu.
'g' En-tête étendu POSIX.1-2001
'x' En-tête étendu avec méta-données POSIX.1-2001
'A-Z' Extensions format POSIX.1-1988

Les noms sont encodés en ASCII et les valeurs sont en octal avec des chiffres encodés en ASCII pour assurer la portabilité. Les valeurs sont ponctuées par un NUL ou un espace. Comme 11 caractères sont utilisables pour spécifier la taille du fichier, ceci créée une limitation à 811 octets, soit Modèle:Unité par fichier. Certaines versions, comme GNU tar, permettent un encodage de la taille sous format binaire pour surmonter cette limitation.

Format UStar

Les versions actuelles de tar emploient un format connu sous le nom de UStar défini par la norme POSIX (IEEE P1003.1).

UStar permet d'utiliser des noms de fichiers plus longs et enregistre des attributs supplémentaires.

Position Taille Champ
0 257 identiques au format original
257 5 ustar indique le type UStar
262 3 Version (00)
265 32 Propriétaire (nom)
297 32 Groupe (nom)
329 8 Fichier spécial (nombre majeur)
337 8 Fichier spécial (nombre mineur)
345 155 Préfixe du fichier

Commandes courantes

Voici les commandes courantes de compression et décompression des archives en fonction de leur extension.

  • Afficher liste des fichiers :

<syntaxhighlight lang="bash">

tar -tf archive.tar 

</syntaxhighlight>

  • Extraction (éventuellement pour un fichier ou un répertoire spécifique) :

<syntaxhighlight lang="bash">

tar -xvf archive.tar [fichier1... ]

</syntaxhighlight>

  • Décompression + extraction (spécifique à certaines implémentations, comme GNU tar ou bsdtar) :

<syntaxhighlight lang="bash">

tar -xzvf archive.tar.gz
tar -xjvf archive.tar.bz2
tar -xYvf archive.tar.lzma

</syntaxhighlight> Plus généralement, on peut arriver au même résultat avec : <syntaxhighlight lang="bash">

zcat archive.tar.gz  | tar -xv
bzcat archive.tar.bz2 | tar -xv

</syntaxhighlight> Remarque : on utilise parfois gzcat ou gzip -cd.

  • Archivage :

<syntaxhighlight lang="bash">

tar -cvf fichier.tar MonRepertoire1 [MonRepertoire2... ]

</syntaxhighlight>

  • Compression et archivage :

<syntaxhighlight lang="bash">

tar -czvf archive.tar.gz MonRepertoire
tar -cjvf archive.tar.bz2 MonRepertoire

</syntaxhighlight> ou encore : <syntaxhighlight lang="bash">

tar -cv MonRepertoire | gzip > archive.tar.gz
tar -cv MonRepertoire | bzip2 > archive.tar.bz2

</syntaxhighlight> Ceci créera une archive compressée dans le répertoire courant (donc un seul fichier) contenant l'ensemble des fichiers du répertoire MonRepertoire et de ses sous-répertoires.

  • copie d'une partie de l'arborescence vers un autre endroit :

<syntaxhighlight lang="bash">

tar -c . | ( cd /Repertoire/Destination; tar -xv )

</syntaxhighlight>

Limitations de tar

Tar est un format conçu pour le stockage incrémental de données sur des bandes magnétiques. Il est devenu populaire auprès des développeurs des systèmes de type Unix, car il est le seul standard à prendre en compte les méta-données des systèmes de fichiers.

Les noms de fichiers et les fichiers pointés par les liens symboliques sont limités à 100 caractères (nom complet dans l'archive, y compris le séparateur de nom de répertoire). Le système de fichiers ext2 accepte des noms de fichiers de 255 octets. Un système Linux accepte des noms absolus de Modèle:Unité.

La taille de chaque fichier est limitée à 812-1, soit environ Modèle:Unité. Un fichier tar n'a pas de limite de taille.

Tar ne dispose pas d'un index centralisé. Pour extraire un seul fichier de l'archive, il faut donc commencer par le premier en-tête et lire les en-têtes les uns après les autres, dans l'ordre du fichier tar. Sur des médias physiquement lents (CD-ROM, DVD, voire disque dur et même les cassettes), le fait de lire des blocs non contigus pour n'en utiliser que très peu peut rendre extrêmement lente l'extraction d'un ou plusieurs fichiers ciblés ou l'affichage de la liste complète des fichiers.

Le stockage des xattrs ou des ACL nécessitent des extensions non standards.

Le format tar est souvent utilisé conjointement avec des utilitaires de compression. Modèle:Refnec

La somme de contrôle ne porte que sur l'en-tête. De plus l'algorithme a une faible résistance aux erreurs. Il suffit que deux bits bien placés soient modifiés pour que cette erreur ne soit pas détectée. Pour le stockage et le transfert par réseau, il est donc recommandé que le programme de compression utilisé conjointement avec tar, utilise un algorithme de vérification d'intégrité (par exemple CRC32B, MD5, SHA1, etc).

Les formats vieux gnu et POSIX peuvent théoriquement entrer en conflit et tromper certains programmes.

Précaution d'emploi

Un tarbomb est un fichier tar contenant une grande quantité de fichiers à la racine de l'archive. Lorsqu'elle est désarchivée, les fichiers d'un tarbomb noient le contenu du répertoire de travail, voire écrasent les fichiers de l'utilisateur qui portent le même nom que ceux de l'archive. Dans le meilleur des cas, l'utilisateur doit ensuite sélectionner un par un les fichiers apparus pour les recopier dans un nouveau répertoire, ce tri pouvant se révéler un travail fastidieux si les fichiers initiaux et les nouveaux sont très mélangés.

L'usage veut donc que les fichiers soient contenus dans un répertoire qui sera archivé, plutôt que de les archiver directement. On peut également extraire les fichiers dans un sous-répertoire dédié ou examiner au préalable le contenu de l'archive avec l'option t.

Contrairement à GNU tar, le tar original permettait de créer et d'extraire des fichiers avec un chemin absolu, ce qui peut s'avérer dangereux. Il est cependant encore possible de faire référence à des répertoires parents de façon relative (../).

Interopérabilité

Les nombres sont stockés sous forme ASCII pour éviter des problèmes de boutisme.

Le format tar est conçu pour les systèmes de type Unix et n'a jamais cherché à être interopérable avec d'autres systèmes.

Le codage des noms utilise la forme binaire du nom de fichier, sans spécifier quel encodage a été utilisé, ce qui peut poser des problèmes pour Windows, notamment.

Sous les systèmes de type Unix, tous les caractères sauf '/' et le caractère NUL ('\0'), sont autorisés pour les noms de fichiers. Sous Windows, un certain nombre de caractères ('\\', ':', ';', '+', etc) sont interdits. Windows est alors incapable d'extraire correctement ce type de fichiers<ref>« Modèle:Langue ».</ref>,<ref>« Modèle:Langue ».</ref>.

Implémentations

  • GNU tar
  • bsdtar<ref>{{#invoke:Langue|indicationDeLangue}} Page man de bsdtar - implémentation distribuée avec la bibliothèque libarchive.</ref>, une implémentation distribuée selon les termes de la nouvelle licence BSD, utilisée en particulier sous Mac OS X<ref>{{#invoke:Langue|indicationDeLangue}} [1].</ref>.
  • star, une implémentation développée par Jörg Schilling<ref>{{#invoke:Langue|indicationDeLangue}} Star - Solid, POSIX compliant tar implementation.</ref>.
  • Oracle tar<ref>{{#invoke:Langue|indicationDeLangue}} Oracle tar.</ref>, anciennement Solaris tar<ref>{{#invoke:Langue|indicationDeLangue}} Exemple publié en mars 2008.</ref>,<ref>{{#invoke:Langue|indicationDeLangue}} Solaris tar, exemple publiée en mars 2005.</ref>.
  • pdtar, une implémentation réalisée en 1985 par John Gilmore<ref>{{#invoke:Langue|indicationDeLangue}} pdtar, une implémentation du programme tar réalisée en 1985 par John Gilmore.</ref>, puis devenue par la suite GNU tar.
  • SharpZipLib<ref>{{#invoke:Langue|indicationDeLangue}} SharpZipLib.</ref>, une implémentation Microsoft .NET.

GNU tar

GNU tar est l'implémentation du programme tar par le projet GNU. C'est un logiciel libre distribué selon les termes de la licence publique générale GNU. Il s'agit de l'implémentation POSIX aujourd'hui la plus couramment utilisée.

Modèle:Boîte déroulante/début

Version Date de sortie Principaux changements
1.26 Modèle:Date
  • Option --verify corrigée (bogue de la version 1.24).
  • Correction sur les noms de fichiers longs des archives PAX.
  • Contournement des incompatibilités POSIX sur FreeBSD, NetBSD, et Tru64.
  • Correction d'un bogue sur --one-file-system --listed-incremental.
1.25 Modèle:Date
1.24 Modèle:Date
  • Option --full-time
1.23 Modèle:Date
  • Nouvelle option en ligne de commande --warning
  • Nouvelle option en ligne de commande --level
1.22 Modèle:Date
  • Support de la compression xz (option --xz)
  • Option courte -J comme raccourci pour --xz
  • Raccourci -I pour l'option --use-compress-program
  • L'option --no-recursive fonctionne avec l'option --incremental
1.21 Modèle:Date
1.20 Modèle:Date
  • Nouvelle option --lzma pour sélectionner l'algorithme de compression LZMA.
  • Nouvelle option --hard-dereference
  • Nouvelle option --checkpoint-action
  • Nouvelles options '--no-check-device et --check-device
1.19 Modèle:Date
1.18 Modèle:Date
1.17 Modèle:Date
1.16.1 Modèle:Date
1.16 Modèle:Date
1.15.91 Modèle:Date
1.15.90 Modèle:Date
1.15.1 Modèle:Date
1.15 Modèle:Date
  • Les archives compressées sont reconnues automatiquement, il n'est plus utile de spécifier les options -Z, -z, ou -j pour les lire.
1.14.90 Modèle:Date
1.14 Modèle:Date
  • Première version majeure depuis 1999.

Modèle:Boîte déroulante/fin

Notes et références

Modèle:Références

Voir aussi

Modèle:Crédit d'auteurs

Articles connexes

Liens externes

Modèle:Colonnes

Modèle:Portail