Partie 1 : Performance
Voici une comparaison de deux flux de travail distincts et de ce qu'ils font.
Vous avez un fichier sur le disque blah.tar.gz
ce qui représente, par exemple, 1 Go de données compressées par gzip qui, une fois décompressées, occupent 2 Go (soit un taux de compression de 50 %).
La façon de créer ceci, si vous deviez faire l'archivage et la compression séparément, serait :
tar cf blah.tar files ...
Il en résulterait blah.tar
qui est une simple agrégation des files ...
sous forme non compressée.
Alors vous feriez
gzip blah.tar
Cela permet de lire le contenu de blah.tar
à partir du disque, les comprimer à l'aide de l'algorithme de compression gzip, puis écrire le contenu sur le disque dur. blah.tar.gz
puis délier (supprimer) le fichier blah.tar
.
Maintenant, décompressons !
Voie 1
Vous avez blah.tar.gz
d'une manière ou d'une autre.
Vous décidez de vous enfuir :
gunzip blah.tar.gz
Cela permettra
- LIRE le contenu des données compressées de 1 Go de
blah.tar.gz
.
- Traiter les données compressées par le biais du
gzip
décompresseur en mémoire.
- Au fur et à mesure que la mémoire tampon se remplit d'un bloc de données, écrivez les données non compressées dans le fichier.
blah.tar
sur le disque et répéter jusqu'à ce que toutes les données compressées soient lues.
- Délier (supprimer) le fichier
blah.tar.gz
.
Maintenant, vous avez blah.tar
sur le disque, qui n'est pas compressé mais qui contient un ou plusieurs fichiers, avec une très faible surcharge de structure de données. La taille du fichier est probablement quelques octets plus grande que la somme de toutes les données du fichier.
Tu cours :
tar xvf blah.tar
Cela permettra
- LIRE les 2 Go de contenu de données non compressées de
blah.tar
et le tar
les structures de données du format de fichier, y compris les informations sur les autorisations de fichiers, les noms de fichiers, les répertoires, etc.
- ÉCRIT les 2 Go de données plus les métadonnées sur le disque. Cela implique : la traduction de la structure des données / des informations sur les métadonnées en créant de nouveaux fichiers et répertoires sur le disque, le cas échéant, ou en réécrivant les fichiers et répertoires existants avec le nouveau contenu des données.
L'ensemble des données que nous LIRE du disque dans ce processus était de 1 GB (pour gunzip) + 2 GB (pour tar) = 3 GB.
L'ensemble des données que nous WROTE sur le disque dans ce processus était de 2 Go (pour gunzip) + 2 Go (pour tar) + quelques octets pour les métadonnées = environ 4 Go.
Voie 2
Vous avez blah.tar.gz
d'une manière ou d'une autre.
Vous décidez de vous enfuir :
tar xvzf blah.tar.gz
Cela permettra
- LIRE le contenu des données compressées de 1 Go de
blah.tar.gz
un bloc à la fois, dans la mémoire.
- Traiter les données compressées par le biais du
gzip
décompresseur en mémoire.
- Au fur et à mesure que la mémoire tampon se remplit, elle va tuyau ces données, en mémoire, jusqu'au
tar
un analyseur de format de fichier, qui lira les informations sur les métadonnées, etc. et les données du fichier non compressé.
- Au fur et à mesure que la mémoire tampon se remplit dans l'application
tar
il écrira les données non compressées sur le disque, en créant des fichiers et des répertoires et en les remplissant avec le contenu non compressé.
L'ensemble des données que nous LIRE du disque dans ce processus était de 1 Go de données compressées, point.
L'ensemble des données que nous WROTE sur le disque dans ce processus était de 2 Go de données non compressées + quelques octets pour les métadonnées = environ 2 Go.
Si vous remarquez, la quantité d'entrées/sorties du disque dans Voie 2 es identique à l'entrée/sortie de disque effectuée par, disons, les Zip
o 7-Zip en tenant compte des différences de taux de compression.
Et si le taux de compression vous préoccupe, utilisez l'option Xz
compresseur pour encapsuler tar
et vous avez LZMA2'ed TAR, qui est tout aussi efficace que l'algorithme le plus avancé dont dispose 7-Zip :-)
Partie 2 : Caractéristiques
tar
stocke les permissions Unix dans ses métadonnées de fichiers, et est très bien connu et testé pour emballer avec succès un répertoire avec toutes sortes de permissions différentes, de liens symboliques, etc. Il existe plus d'un cas où l'on peut avoir besoin de regrouper un ensemble de fichiers en un seul fichier ou flux, mais pas nécessairement de le compresser (bien que la compression soit utile et souvent utilisée).
Partie 3 : Compatibilité
De nombreux outils sont distribués sous forme de sources ou de binaires au format .tar.gz ou .tar.bz2, car il s'agit d'un format de fichier du "plus petit dénominateur commun" : tout comme la plupart des utilisateurs de Windows ont accès aux décompresseurs .zip ou .rar, la plupart des installations Linux, même les plus basiques, auront accès au moins à tar et gunzip, même s'ils sont vieux ou réduits. Même les firmwares Android ont accès à ces outils.
Les nouveaux projets ciblant des publics utilisant des distributions modernes peuvent très bien être distribués dans un format plus moderne, tel que .tar.xz (utilisant le format de compression Xz (LZMA), qui compresse mieux que gzip ou bzip2), ou .7z, qui est similaire aux formats ZIP ou RAR en ce qu'il permet à la fois de compresser et de spécifier une disposition pour encapsuler plusieurs fichiers dans un seul fichier.
Vous ne voyez pas le format .7z utilisé plus souvent pour la même raison que la musique n'est pas vendue dans les magasins de téléchargement en ligne dans de nouveaux formats tels que Opus ou vidéo en WebM . Compatibilité avec les personnes utilisant des systèmes anciens ou très basiques.
2 votes
C'est une très bonne question. Moi aussi, je n'aime pas du tout leur façon d'installer des logiciels qui ont des noms bizarres ou que je ne peux pas simplement installer avec apt-get. La seule raison pour laquelle je pense que la question sera rejetée est qu'il s'agit plutôt d'une question pour Unix/Linux. Mais SU devrait l'accepter.
3 votes
@Griffin : La question ne porte pas sur l'installation de logiciels à partir de tarballs. Elle concerne l'utilisation du format Tar (par exemple, par rapport à Zip ou RAR).
34 votes
Je ne suis pas d'accord pour dire que cela "fait perdre du temps". Si vous parlez de performances, il n'y a pas de pénalité de performance réelle pour le tar car le format est très efficace. Si vous voulez dire qu'il y a une perte de temps votre temps, je ne vois pas comment
tar xvzf
est plus difficile que7z -x
...0 votes
Allquixotic, je veux dire que vous devez extraire l'archive deux fois, la première fois pour extraire le tar, et la seconde pour extraire du tar.
45 votes
Il semble déplorer le fait que tar ne stocke pas un catalogue au départ, ce qui fait que les outils de compression gui qui veulent lister le contenu avant l'extraction doivent décompresser tout le tar juste pour lister le contenu, puis le décompresser à nouveau lors de l'extraction.
1 votes
@MarcusJ En général, les formats tar.xx ont une solution en une ligne. Si vous avez tar.gz, par exemple, vous pouvez utiliser
tar -xzf <file>.tar.gz
et il décompressera et extraira tout en même temps.4 votes
Psusi, non non non, je parle du fait que tar a besoin d'un compresseur et d'un décompresseur séparés, donc en fait quand vous ouvrez un tar.gz, vous devez extraire LES DEUX fichiers gz pour obtenir le tar, puis vous devez extraire le fichier tar, au lieu de simplement décompresser quelque chose comme un 7z - en une seule étape. Il faut plus de puissance de calcul pour faire cela, et cela semble redondant.
4 votes
@MarcusJ, les deux étapes doivent être effectuées dans les deux sens, donc cela ne demande pas plus de puissance de calcul.
2 votes
Je ne veux pas dire que vous avez tort ou quoi que ce soit, mais comment un 7z pourrait-il nécessiter les deux étapes ? Il chargerait simplement le fichier, puis décompresserait ce qui a été sélectionné pour être décompressé. :/
10 votes
@MarcusJ : vous pensez que 7z sait par magie où commence chaque fichier dans une archive ? De plus, les algorithmes de compression habituels (gzip, bzip2) fonctionnent avec le streaming du contenu : pas besoin de compléter à 100% la première étape avant la suivante.
3 votes
Quelle étape pensez-vous qu'il n'a pas à faire ? Il doit analyser le format du fichier, et il doit décompresser le contenu. La différence réside dans l'ordre dans lequel les deux étapes sont effectuées.
tar
décompresse d'abord le contenu, puis analyse l'archive.7zip
analyse l'archive, puis décompresse le contenu du fichier (les métadonnées ne sont pas compressées).11 votes
De plus, @MarcusJ, vous semblez confondre deux choses différentes : quand vous faites
tar xvzf
les données non comprimées n'est pas écrit sur le disque dur en.tar
format ! Vous avez raison de dire que si vous exécutezgunzip blah.tar.gz
et ensuitetar xf blah.tar
En effet, les données seraient écrites deux fois sur le disque (une fois sous forme de .tar et une autre fois sous forme de fichiers dans le système de fichiers), mais personne ne procède de cette manière. Le sitetar xzf
utilise un Pipe UNIX (essentiellement une copie de mémoire) pour transférer les données non compressées degzip
(ou tout autre compresseur) àtar
donc les données sont no écrit sur le disque dans.tar
format.1 votes
@grawity Je comprends cela. J'essayais simplement de lui assurer qu'il ne serait pas rétrogradé. A en juger par la réponse, je ne pense pas qu'il en ait encore trop peur.
15 votes
Une chose que je sais, c'est que
tar
(surtout compressé) se comporte terriblement bien lorsqu'il s'agit de corruption de données. Les petites données de redondance / récupération ajoutées par les formats modernes valent de l'or.1 votes
tar
est supérieur pour le streaming. Contrairement àzip
vous ne devez pas attendre l'annuaire central. Pour l'archivage, cela peut aussi être un inconvénient (plus lent à lister le contenu).tar xvzf
utilisera aussi automatiquement deux processus/cores, il n'est donc pas inefficace de séparer les deux processus.5 votes
@PPC : c'est à cela que servent les fichiers PAR. Tar est un utilitaire unix ; en tant que tel, la correction des erreurs est mieux laissée aux outils dédiés.
1 votes
Hmm, tar garde les liens mous. Je me souviens qu'à l'époque : "tar cf - | ( cd /quelque part/else ; tar xf -)" assez souvent parce que "cp" n'avait pas de drapeau pour respecter les soft links. Je ne sais pas si c'est le cas aujourd'hui - si je rencontrais ce problème, j'utiliserais probablement à nouveau 'tar' de cette façon.
1 votes
Pourquoi utiliser une seule commande quand deux suffisent ?
1 votes
@Kruug : GNU tar applique automatiquement le
z
(ouj
ouJ
) :tar xf foo.tar.gz
. Il le fait en se basant sur le contenu réel du fichier, et non sur son nom, de sorte que cela fonctionne même si un fichier tar gzippé est nomméfoo.tar
.0 votes
Cependant, si vous voulez extraire un seul fichier, AFAIK tar doit d'abord décompresser l'archive entière, alors qu'un autre format pourrait seulement décompresser le fichier cible.