Pourquoi les gens utilisent-ils des archives tar?

90

En tant que développeur principalement Windows, il me manque peut-être quelque chose de culturel dans la communauté Linux, mais cela m'a toujours dérouté.

Lors du téléchargement de quelque chose, les fichiers sont d'abord placés dans une .tararchive puis compressés . Pourquoi le processus en deux étapes? La compression ne permet- elle pas de regrouper les fichiers? Y a-t-il un autre avantage dont je ne suis pas au courant?

Brian Sullivan
la source
3
Habituellement, vous combinez simplement la compression et le regroupement de fichiers en une seule commande. tar -zcf file.tar.gz quelques noms de fichiers
Juha Syrjälä
1
Personne n'a mentionné que le transfert de 1000000 fichiers avec une taille de 1 octet est plus coûteux que le transfert d'un fichier avec une taille de 1000000 octets.
Milo LaMar

Réponses:

137

bzipet gziptravaillez sur des fichiers uniques, pas sur des groupes de fichiers. Les anciens zip(et pkzip) fonctionnent sur des groupes de fichiers et ont le concept d'archive intégré.

La philosophie * nix est l'un des petits outils qui font très bien des tâches spécifiques et peuvent être enchaînés. C'est pourquoi il existe ici deux outils qui ont des tâches spécifiques et qui sont conçus pour bien s'emboîter. Cela signifie également que vous pouvez utiliser tar pour les fichiers de groupe, puis vous avez le choix d'un outil de compression ( bzip, gzip, etc.).

Stewart Johnson
la source
2
J'ai répondu plus vite et un peu mieux que moi - je suppose que je vais retourner au travail!
Harper Shelby
9
Je vous ai battu de 4 minutes, et c'est une éternité dans le temps de débordement de pile. :-)
Stewart Johnson
1
Il est à noter que tar et gzip sont utiles seuls, c'est pourquoi ils sont séparés. Avec une utilisation intelligente des tuyaux, j'ai déjà déplacé un dossier d'un ordinateur à un autre en goudronnant, en zippant et en passant sur SSH, puis en décompressant et en supprimant le gommage sur la destination. Une commande, pas de fichiers temporaires.
rmeador
1
Vous pourriez également dire qu'ils s'en tiennent à ce qui a fait ses preuves, plutôt que de changer les choses et de rompre la compatibilité. .tar.gz peut être fait en une seule étape indépendamment des outils et techniques dits modernes (veuillez enregistrer WinZip).
JeeBee
2
Je ne peux pas croire que personne n'ait ni édité la question, ni laissé un commentaire mentionnant tout l'intérêt (imo) de l'utilisation des tararchives: support des permissions du système de fichiers Linux . Que se passerait-il si vous téléchargiez un paquet Debian, votre gestionnaire de paquet l'installait, mais qu'aucun des exécutables n'était exécutable? C'est la vraie raison pour laquelle tout le monde utilise des archives tar ...;)
JamesTheAwesomeDude
28

Une distinction importante réside dans la nature des deux types d'archives.

Les fichiers TAR ne sont guère plus qu'une concaténation du contenu du fichier avec certains en-têtes, tandis que gzip et bzip2 sont des compresseurs de flux qui, dans les archives tar, sont appliqués à l'ensemble de la concaténation.

Les fichiers ZIP sont une concaténation de fichiers compressés individuellement, avec quelques en-têtes. En fait, l'algorithme DEFLATE est utilisé à la fois par zip et gzip, et avec un ajustement binaire approprié, vous pouvez prendre la charge utile d'un flux gzip et la placer dans un fichier zip avec les entrées d'en-tête et de dictionnaire appropriées.

Cela signifie que les deux types d'archives différents ont des compromis différents. Pour de grandes collections de petits fichiers, TAR suivi d'un compresseur de flux entraînera normalement un taux de compression plus élevé que ZIP car le compresseur de flux aura plus de données pour construire ses fréquences de dictionnaire, et pourra ainsi extraire plus d'informations redondantes. D'autre part, une erreur (de préservation de la longueur du fichier) dans un fichier ZIP ne corrompra que les fichiers dont les données compressées ont été affectées. Normalement, les compresseurs de flux ne peuvent pas réellement récupérer des erreurs en cours de diffusion. Ainsi, les fichiers ZIP sont plus résistants à la corruption, car une partie de l'archive sera toujours accessible.

Barry Kelly
la source
Merci pour la distinction entre zip et tar + gzip!
Luke
1
+1 pour la distinction entre «compression d'un fichier agrégé» et «agrégation de fichiers compressés».
Jesse Chisholm
La raison pour laquelle le goudron permet de meilleurs taux de compression et le zip étant plus résilient d'autre part s'explique par le fait que le goudron est une sorte de compression solide alors que le zip n'est pas solide.
gaborous
@Barry, donc en conclusion qui gagne? (en supposant que nous utilisons des systèmes d'exploitation modernes)
Pacerier
@Pacerier Je ne pense pas qu'il y ait de victoire. Les zips sont meilleurs pour un accès aléatoire et pour une utilisation par les utilisateurs de Windows. Les Tarballs ont une meilleure compatibilité immédiate sur Linux et Unix. Les Tarballs ont une compression légèrement plus élevée, mais vous devez tout décompresser pour accéder à n'importe quoi. Les deux prennent en charge des algorithmes de compression arbitraires, mais il est beaucoup plus facile de mélanger et de faire correspondre les archives tar. Selon l'objectif, l'un ou l'autre pourrait être mieux.
Barry Kelly
26

Il est étrange que personne d'autre n'ait mentionné que les versions modernes de GNU tarvous permettent de compresser lorsque vous regroupez:

tar -czf output.tar.gz directory1 ...

tar -cjf output.tar.bz2 directory2 ...

Vous pouvez également utiliser le compresseur de votre choix à condition qu'il prenne en charge les options ' -c' (vers stdout, ou depuis stdin) et ' -d' (décompresser):

tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...

Cela vous permettrait de spécifier n'importe quel compresseur alternatif.

[ Ajouté : Si vous procédez à une extraction gzipou à bzip2des fichiers compressés, GNU tarles détecte automatiquement et exécute le programme approprié. Autrement dit, vous pouvez utiliser:

tar -xf output.tar.gz
tar -xf output.tgz        # A synonym for the .tar.gz extension
tar -xf output.tar.bz2

et ceux-ci seront traités correctement. Si vous utilisez un compresseur non standard, vous devez le spécifier lorsque vous effectuez l'extraction.]

La raison de la séparation est, comme dans la réponse choisie, la séparation des fonctions. Entre autres choses, cela signifie que les gens pouvaient utiliser le cpioprogramme ` ` pour empaqueter les fichiers (au lieu de tar) puis utiliser le compresseur de leur choix (il était une fois, le compresseur préféré était pack, plus tard, il était compress(ce qui était beaucoup plus efficace que pack), puis gzipqui tournait autour de ses deux prédécesseurs, et est entièrement compétitif avec zip(qui a été porté sous Unix, mais n'y est pas natif), et maintenant bzip2qui, d'après mon expérience, a généralement un avantage de 10 à 20% par rapport à gzip.

[ Ajouté : quelqu'un noté dans sa réponse qui cpioa des conventions amusantes. C'est vrai, mais jusqu'à ce que GNU tarobtienne les options appropriées (' -T -'), cpioc'était la meilleure commande lorsque vous ne vouliez pas archiver tout ce qui se trouvait sous un répertoire donné - vous pouviez en fait choisir exactement quels fichiers étaient archivés. L'inconvénient de cpioc'est que non seulement vous pouvez choisir les fichiers - vous deviez les choisir. Il y a encore un endroit où les cpioscores; il peut faire une copie in-situ d'une hiérarchie de répertoires à une autre sans aucun stockage intermédiaire:

cd /old/location; find . -depth -print | cpio -pvdumB /new/place

Incidemment, l' -depthoption « » activée findest importante dans ce contexte - elle copie le contenu des répertoires avant de définir les autorisations sur les répertoires eux-mêmes. Lorsque j'ai vérifié la commande avant de saisir l'ajout à cette réponse, j'ai copié certains répertoires en lecture seule (autorisation 555); quand je suis allé supprimer la copie, j'ai dû relâcher les permissions sur les répertoires avant que ' rm -fr /new/place' puisse finir. Sans l' -depthoption, la cpiocommande aurait échoué. Je ne m'en suis souvenu que lorsque je suis allé faire le nettoyage - la formule citée est automatique pour moi (principalement en raison de nombreuses répétitions sur de nombreuses années). ]

Jonathan Leffler
la source
Un format ZIP étendu pourrait accueillir des compresseurs de flux plug-in tout autant que TAR, mais sans un protocole IPC approprié, il serait probablement plus lent en raison d'une exécution excessive des sous-processus.
Barry Kelly
ma commande goto: tar -xfvz tarpkg.tar.gz (remplacez le z par aj pour les archives compressées bz2)
Bryan Rehbein
1
@Redbeard: tar détecte automatiquement gzip et bzip2 lors de l'extraction - pour créer, vous devez lui dire quoi faire, mais j'utilise juste -xf (ou -xvf) et le nom du fichier tar.
Jonathan Leffler
15

Le plus drôle, c'est que vous pouvez obtenir un comportement non anticipé par les créateurs de taret gzip. Par exemple, vous pouvez non seulement gzip un fichier tar, vous pouvez également tarer des fichiers gzippés, pour produire un files.gz.tar(ce serait techniquement plus proche de la façon dont pkzipfonctionne). Ou vous pouvez mettre un autre programme dans le pipeline, par exemple de la cryptographie, et vous pouvez choisir un ordre arbitraire de tarage, de gzipping et de chiffrement. Celui qui a écrit le programme de cryptographie n'a pas à avoir la moindre idée de la façon dont son programme serait utilisé, il lui suffit de lire à partir de l'entrée standard et d'écrire sur la sortie standard.

Svante
la source
Lors de la génération du fichier, n'oubliez pas de crypter après la compression, pas avant, car la sortie du cryptage semble aléatoire et est difficile à compresser.
Jonathan Leffler
8

Dans le monde Unix, la plupart des applications sont conçues pour faire une chose et bien la faire. Les utilitaires zip les plus populaires sous Unix, gzip et bzip2, ne font que la compression de fichiers. tar fait la concaténation des fichiers. Le transfert de la sortie de tar dans un utilitaire de compression fait ce qui est nécessaire, sans ajouter de complexité excessive à l'un ou l'autre des logiciels.

Harper Shelby
la source
7

Une autre raison pour laquelle il est si répandu est que tar et gzip sont sur presque toute la base d'installation * NIX là-bas. Je pense que c'est probablement la principale raison. C'est également pourquoi les fichiers zip sont extrêmement répandus sur Windows, car la prise en charge est intégrée, quelles que soient les routines supérieures de RAR ou 7z.

GNU tar vous permet également de créer / extraire ces fichiers à partir d'une seule commande (une étape):

  • Créez une archive:
  • tar -cfvj destination.tar.bz2 *.files
  • tar -cfvz destination.tar.gz *.files

  • Extraire une archive: (la partie -C est facultative, elle est par défaut dans le répertoire courant)

  • tar -xfvj archive.tar.bz2 -C destination_path
  • tar -xfvz archive.tar.gz -C destination_path

C'est ce que je me suis engagé en mémoire depuis mes nombreuses années sur Linux et récemment sur Nexenta (OpenSolaris).

Bryan Rehbein
la source
3
En fait, c'est l'inverse: zip est désormais intégré à Windows car il était répandu sous DOS et dans les premières versions de Windows.
Christian Lescuyer
J'aime utiliser RAR sous Windows, tar.bz2 sous Linux
Osama Al-Maadeed
Vous pouvez noter l'analyse des options bizarres (non compatible avec getopt ()), et le tiret est facultatif car tar est antérieur aux conventions standard des options de commande Unix.
Jonathan Leffler
5

Je pense que vous cherchiez davantage de contexte historique à ce sujet. Le zip d'origine était pour un seul fichier. Tar est utilisé pour placer plusieurs fichiers dans un seul fichier. Par conséquent, le goudronnage et la fermeture éclair sont le processus en deux étapes. Pourquoi est-ce encore si dominant aujourd'hui?

De wikipedia pour Tar_ (file_format)

En informatique, tar (dérivé d'une archive sur bande) est à la fois un format de fichier (sous la forme d'un type de flux de bits d'archive) et le nom du programme utilisé pour gérer ces fichiers. Le format a été normalisé par POSIX.1-1988 et plus tard POSIX.1-2001. Initialement développé en tant que format brut, utilisé pour la sauvegarde sur bande et d'autres périphériques d'accès séquentiel à des fins de sauvegarde, il est maintenant couramment utilisé pour rassembler des collections de fichiers dans un fichier plus volumineux, pour la distribution ou l'archivage, tout en préservant les informations du système de fichiers telles que l'utilisateur et le groupe. autorisations, dates et structures de répertoires.

martinatime
la source
4

tar est UNIX comme UNIX est tar

À mon avis, la raison de l' utilisation encoretar aujourd'hui est que c'est l'un des cas (probablement rares) où l'approche UNIX l'a parfaitement fait dès le début.

En examinant de plus près les étapes de la création d'archives, j'espère que vous conviendrez que la manière dont la séparation des différentes tâches se déroule ici est la philosophie UNIX à son meilleur:

  • un outil ( tarpour lui donner un nom ici) spécialisé dans la transformation de toute sélection de fichiers, répertoires et liens symboliques, y compris toutes les métadonnées pertinentes comme les horodatages, les propriétaires et les autorisations en un seul flux d'octets.

  • et juste un autre outil arbitrairement interchangeable ( gzip bz2 xzpour ne citer que quelques options) qui transforme tout flux d'entrée d'octets en un autre flux de sortie (espérons-le) plus petit.

L'utilisation d'une telle approche offre de nombreux avantages à l'utilisateur ainsi qu'au développeur:

  • extensibilité Permet de coupler taravec n'importe quel algorithme de compression déjà existant ou n'importe quel algorithme de compression encore à développer sans avoir à changer quoi que ce soit sur le fonctionnement interne de tar.

    Dès que le tout nouvel outil de compression "hyper-zip-utra" ou whater sort, vous êtes déjà prêt à l'utiliser pour embrasser votre nouveau serviteur avec toute la puissance de tar.

  • la stabilité tar a été largement utilisée depuis le début des années 80, testée et exécutée sur de nombreux systèmes d'exploitation et machines.

    Éviter le besoin de réinventer la roue dans la mise en œuvre de la propriété de stockage, des autorisations, des horodatages et autres encore et encore pour chaque nouvel outil d'archivage permet non seulement d'économiser beaucoup de temps (autrement inutilement dépensé) en développement, mais garantit également la même fiabilité pour chaque nouvelle application.

  • cohérence L'interface utilisateur reste la même tout le temps.

    Il n'est pas nécessaire de se rappeler que pour restaurer les autorisations à l'aide de l'outil A, vous devez passer l'option --i-hope-you-rember-this-one et en utilisant l'outil B, vous devez utiliser --this-time-its-another-one tout en utilisant l'outil C, c'est `--hope-you-didnt-try-with-tool-as-switch.

    Alors qu'en utilisant l'outil D, vous l'auriez vraiment gâché si vous ne l'aviez pas utilisé --if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now.

Mikyra
la source
3

le goudron est populaire principalement pour des raisons historiques. Il existe plusieurs alternatives facilement disponibles. Certains d'entre eux sont là depuis presque aussi longtemps que le goudron, mais n'ont pas pu surpasser le goudron en popularité pour plusieurs raisons.

  • cpio (syntaxe extraterrestre; théoriquement plus cohérente, mais les gens aiment ce qu'ils savent, le tar a prévalu)
  • ar (populaire il y a longtemps, maintenant utilisé pour emballer des fichiers de bibliothèque)
  • shar (scripts shell auto-extractibles, avait toutes sortes de problèmes; utilisé pour être populaire jamais le moins)
  • zip (en raison de problèmes de licence, il n'était pas facilement disponible sur de nombreux Unices)

Un avantage majeur (et un inconvénient) de tar est qu'il n'a ni en-tête de fichier, ni répertoire central de contenu. Pendant de nombreuses années, il n'a donc jamais souffert de limitations de taille de fichier (jusqu'à cette décennie où une limite de 8 Go sur les fichiers à l'intérieur de l'archive est devenue un problème, résolu il y a des années).

Apparemment, le seul inconvénient de tar.gz (ou ar.Z d'ailleurs), qui est que vous devez décompresser l'archive entière pour extraire des fichiers uniques et répertorier le contenu de l'archive, ne blesse jamais suffisamment les gens pour les faire défaut de tar en nombre significatif .

edgar.holleis
la source
Les anciennes versions de tar n'avaient pas d'informations d'en-tête; les nouvelles versions (compatibles POSIX, USTAR) de tar (par exemple GNU tar) font. La commande 'file' comprend cela.
Jonathan Leffler
2

gzip et bzip2 sont simplement un compresseur, pas un logiciel d'archivage. D'où la combinaison. Vous avez besoin du logiciel tar pour regrouper tous les fichiers.

ZIP lui-même et RAR sont également une combinaison des deux processus.

jishi
la source
2

Habituellement, dans le monde * nux, les lots de fichiers sont distribués sous forme de tarballs puis éventuellement gzippés. Gzip est un simple programme de compression de fichiers qui ne fait pas le regroupement de fichiers que tar ou zip fait.

À un moment donné, zip ne traitait pas correctement certaines des choses que les systèmes de fichiers Unix tar et unix considéraient comme normaux, comme les liens symboliques, les fichiers de cas mixtes, etc. Je ne sais pas si cela a changé, mais c'est pourquoi nous utilisons tar.

Paul Tomblin
la source
1
* nux - Linux, Unux, Solarnux?
mackenir
1
@mackenir - n'oubliez pas POSUX. :-)
Paul Tomblin
1
@mackenir - Ou est-ce que ça devrait être POSNUX?
Paul Tomblin
1

Tar = regroupe les fichiers en 1 fichiers

GZip = Compressez le fichier

Ils ont divisé le processus en 2. C'est tout.

Dans l'environnement Windows, vous êtes peut-être plus habitué à utiliser WinZip ou WinRar qui font un Zip. Le processus Zip de ces logiciels regroupe le fichier et la compression, mais vous ne voyez tout simplement pas ce processus.

Patrick Desjardins
la source
3
Ce n'est pas la meilleure explication, étant donné que les fichiers "zip" auxquels l'OP est habitué sous Windows incorporent déjà le regroupement.
Gareth
1

Pour la même raison que les utilisateurs de mac adorent les images disque: c'est un moyen très pratique d'archiver des éléments, puis de les transmettre, de les télécharger ou de les envoyer par courrier électronique, etc.

Et plus facile à utiliser et plus portable que les zips IMHO.

Tobias
la source
1

À l'époque d'Altos-XENIX (1982), nous avons commencé à utiliser tar (archiveur de bande) pour extraire des fichiers à partir de disquettes 5 1/4 ou de bandes en streaming ainsi que pour les copier sur ces supports. Sa fonctionnalité est très similaire aux commandes BACKUP.EXE et RESTORE.EXE dans DOS 5.0 et 6.22 en tant que suppléments, vous permettant de couvrir plusieurs supports si cela ne peut pas tenir dans un seul. L'inconvénient était que si l'un des multiples médias avait des problèmes, tout cela ne valait rien. tar et dd proviennent d'UNIX SYstem III et sont restés un utilitaire de publication standard avec un système d'exploitation de type UNIX, probablement pour des raisons de compatibilité descendante.

Frank R.
la source
0

Tar n'est pas seulement un format de fichier, mais c'est un format de bande. Les bandes stockent les données bit par bit. Chaque implémentation de stockage était personnalisée. Tar était la méthode par laquelle vous pouviez retirer des données d'un disque et les stocker sur bande de manière à ce que d'autres personnes puissent les récupérer sans votre programme personnalisé.

Plus tard, les programmes de compression sont arrivés et * nix n'avait encore qu'une seule méthode pour créer un seul fichier contenant plusieurs fichiers.

Je crois que c'est juste l'inertie qui a continué avec la tendance tar.gz. Pkzip a commencé avec la compression et l'archivage d'un seul coup, mais les systèmes DOS n'avaient généralement pas de lecteurs de bande connectés!

De wikipedia pour Tar_ (file_format)

En informatique, tar (dérivé d'une archive sur bande) est à la fois un format de fichier (sous la forme d'un type de flux de bits d'archive) et le nom du programme utilisé pour gérer ces fichiers. Le format a été normalisé par POSIX.1-1988 et plus tard POSIX.1-2001. Initialement développé en tant que format brut, utilisé pour la sauvegarde sur bande et d'autres périphériques d'accès séquentiel à des fins de sauvegarde, il est maintenant couramment utilisé pour rassembler des collections de fichiers dans un fichier plus volumineux, pour la distribution ou l'archivage, tout en préservant les informations du système de fichiers telles que l'utilisateur et le groupe. autorisations, dates et structures de répertoires.

Kieveli
la source
À proprement parler, tar est un format de fichier - c'est juste que sur les bandes Unix, il n'y a qu'un autre fichier.
Martin Beckett
En fait, tar n'était pas un format de fichier au départ. Les bandes n'avaient pas de système de fichiers, donc tar a été créé comme correctif pour ne pas avoir de système de fichiers.
Kieveli
0

En tant que développeur Windows, il est compréhensible que les archives tar semblent étranges. Le mot tarsignifie Tape Archive. Pensez aux magnétophones à bobine.

Dans le monde Windows, les programmes sont généralement installés avec un setup.exeou install.exequi fonctionnent toutes sortes de magie dans le registre, créant des répertoires et installant des .dllfichiers (Dynamic Link Library).

Sous Linux, Ubuntu en particulier d'après ma propre expérience, les gestionnaires de paquets se chargent de prendre une application et de l'installer la plupart du temps . Dans Ubuntu, le développeur crée un package se terminant par .deb(Debian, sur lequel Ubuntu est basé). La syntaxe de base pour installer un .debest:

sudo apt install <package_name>

Bien que ce soit relativement simple pour un utilisateur, il est beaucoup de travail pour les développeurs de créer un .deb package et associer un PPA .

Une méthode plus simple pour les développeurs consiste à créer une archive tar. Ensuite, le fardeau de l'installation est partagé par l'utilisateur final. Elles doivent:

  • télécharger l'archive tar (se terminant généralement par .tar.gz ).
  • décompressez le code source dans un répertoire.
  • compilez le code source (du jamais vu dans le monde Windows for Profit).
  • avec un peu de chance, notez ce qu'ils ont fait au cas où ils auraient besoin de répéter à l'avenir car il n'y a pas de aptbase de données (pensez à la liste des programmes installés par Windows) qui puisse être sauvegardée.

Comme une autre réponse l'indique déjà à une autre question que vous avez posée, vous POUVEZ créer une archive tar et compresser les données en même temps. Un processus en deux passes n'est PAS nécessaire.

WinEunuuchs2Unix
la source