tar (informatique)
| Tar | |
| Extension | .tar |
|---|---|
| Type MIME | |
| Type de format | Archive |
| Spécification | Format ouvert |
| modifier |
|
Le programme tar (de l'anglais tape archiver, 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 version d'UNIX et standardisé par les normes POSIX.1-1988 puis POSIX.1-2001. Il existe plusieurs implémentations[1] tar, la plus couramment utilisée étant GNU tar.
Sommaire |
Caractéristiques techniques[modifier]
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[modifier]
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 | .tar.lz | .tlz |
| lzma2 | .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[modifier]
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 des 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 512 octets 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[modifier]
Le format original de l'en-tête des fichiers dans tar est le suivant :
| Position | Taille | Champ |
|---|---|---|
| 0 | 100 | Nom du fichier |
| 100 | 8 | Permissions |
| 108 | 8 | Propriétaire (id) |
| 116 | 8 | Groupe (id) |
| 124 | 12 | Taille en octets |
| 136 | 12 | Dernière modification en temps Unix |
| 148 | 8 | Somme de contrôle de l'en-tête |
| 156 | 1 | Type de fichier |
| 157 | 100 | Nom du fichier lié |
| Valeur | Signification |
|---|---|
| '0' | Fichier normal |
| (ASCII NUL) | Fichier normal (usage obsolète) |
| '1' | Lien matériel |
| '2' | Lien symbolique |
| '3' | Fichier spécial caracatère |
| '4' | Fichier spécial bloc |
| '5' | Répertoire |
| '6' | Tube nommé |
| '7' | Fichier contigu. |
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 8 Go par fichier. Certaines versions, comme GNU tar, permettent un encodage de la taille sous format binaire pour surmonter cette limitation.
Format UStar[modifier]
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 long et enregistre des attributs supplémentaires.
| Position | Taille | Champ |
|---|---|---|
| 0 | 257 | identiques au format original |
| 257 | 6 | ustar indique le type UStar |
| 263 | 2 | 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[modifier]
Voici les commandes courantes de compression et décompression des archives en fonction de leur extension.
- Afficher liste des fichiers :
tar -tf archive.tar
- Extraction (éventuellement pour un fichier ou un répertoire spécifique) :
tar -xvf archive.tar [fichier1... ]
- Décompression + extraction (spécifique à certaines implémentations, comme GNU tar ou bsdtar) :
tar -xzvf archive.tar.gz tar -xjvf archive.tar.bz2 tar -xYvf archive.tar.lzma
Plus généralement, on peut arriver au même résultat avec :
zcat archive.tar.gz | tar -xv bzcat archive.tar.bz2 | tar -xv
Remarque : on utilise parfois gzcat ou gzip -cd.
- Archivage :
tar -cvf fichier.tar MonRepertoire1 [MonRepertoire2... ]
- Compression et archivage :
tar -czvf archive.tar.gz MonRepertoire tar -cjvf archive.tar.bz2 MonRepertoire
ou encore :
tar -cv MonRepertoire | gzip > archive.tar.gz tar -cv MonRepertoire | bzip2 > archive.tar.bz2
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 :
tar -c . | ( cd /Repertoire/Destination; tar -xv )
Limitations de tar[modifier]
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 (../).
Tar ne dispose pas d'un index centralisé. Pour extraire un seul fichier de l'archive, il faut donc la parcourir entièrement.
Contrairement à d'autres logiciels comme rsync ou DAR, certaines versions de tar ne copient pas les xattrs ou les ACL.
Interopérabilité[modifier]
Le format de fichier tar utilise la forme binaire du nom de fichier, sans tenir compte de l'encodage qui permet de connaître le nom textuel du fichier. De ce fait, le format de fichier tar n'est pas prévu pour échanger des fichiers entre plates-formes différentes. Des problèmes d'interopérabilité au niveau des noms de fichiers contenant des caractères autres que des caractère latins non accentués adviennent donc, notamment lorsque des plates-formes différentes Windows-Linux sont utilisées et/ou dans des régions utilisant des paramètres de localisation différents[2],[3].
Implémentations[modifier]
- GNU tar
- bsdtar[4], une implémentation distribuée selon les termes de la nouvelle licence BSD, utilisée en particulier sous Mac OS X[5].
- star, une implémentation développée par Jörg Schilling[6].
- Oracle tar[7], anciennement Solaris tar[8],[9].
- pdtar, une implémentation réalisée en 1985 par John Gilmore[10], puis devenue par la suite GNU tar.
- SharpZipLib[11], une implémentation Microsoft .NET.
GNU tar[modifier]
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.
| Version | Date de sortie | Principaux changements |
|---|---|---|
| 1.26 | 12 mars 2011 |
|
| 1.25 | 7 novembre 2010 | |
| 1.24 | 24 octobre 2010 |
|
| 1.23 | 3 mars 2010 |
|
| 1.22 | 5 mars 2009 |
|
| 1.21 | 27 décembre 2008 |
|
| 1.20 | 14 avril 2008 |
|
| 1.19 | 10 octobre 2007 | |
| 1.18 | 29 juin 2007 |
|
| 1.17 | 8 juin 2007 | |
| 1.16.1 | 9 décembre 2006 | |
| 1.16 | 21 octobre 2006 | |
| 1.15.91 | 16 juin 2006 | |
| 1.15.90 | 19 février 2006 | |
| 1.15.1 | 21 décembre 2004 | |
| 1.15 | 20 décembre 2004 |
|
| 1.14.90 | 2 septembre 2004 | |
| 1.14 | 10 mai 2004 |
|
Notes et références[modifier]
- (en) Banc d'essai réalisée sur trois d'entre elles, bsdtar, GNU tar et star - Jan Psota, octobre 2007.
- http://www.linuxfromscratch.org/blfs/view/cvs/introduction/locale-issues.html#locale-wrong-filename-encoding
- http://superuser.com/questions/60379/create-a-zip-tgz-in-linux-such-that-windows-han-proper-filenames
- (en) Page man de bsdtar - implémentation distribuée avec la bibliothèque libarchive.
- (en) [1].
- (en) Star - Solid, POSIX compliant tar implementation.
- (en) Oracle tar.
- (en) Exemple publié en mars 2008.
- (en) Solaris tar, exemple publiée en mars 2005.
- (en) pdtar, une implémentation du programme tar réalisée en 1985 par John Gilmore.
- (en) SharpZipLib
Voir aussi[modifier]
- Cet article est partiellement ou en totalité issu de l'article intitulé « GNU tar » (voir la liste des auteurs).
Articles connexes[modifier]
Liens externes[modifier]
- (fr) Introduction à la commande tar
- (fr) Page de manuel de la commande tar
- (en) GNU tar sur le répertoire de la FSF
- (en) Le projet GNU tar sur Savannah
- (en) Manuel d'utilisation de GNU tar