gzip sans goudron? Pourquoi sont-ils utilisés ensemble?

60

Pourquoi goudron et gzip sont-ils presque toujours utilisés ensemble, et pas seulement gzip? Y at-il un avantage à cette méthode?

Mehrdad
la source

Réponses:

72

TAR crée un seul fichier archivé à partir de plusieurs fichiers, mais ne les compresse pas.

Détails du format

Un fichier tar est la concaténation d'un ou plusieurs fichiers. Chaque fichier est précédé d’un enregistrement d’en-tête de 512 octets. Les données de fichier sont écrites sans modification, sauf que leur longueur est arrondie à un multiple de 512 octets et que l'espace supplémentaire est rempli à zéro. La fin d'une archive est marquée par au moins deux enregistrements consécutifs remplis à zéro.

GZIP compresse un fichier unique en un autre fichier, mais ne crée pas d'archives.

Format de fichier

... Bien que son format de fichier autorise également la concaténation de plusieurs flux de ce type (les fichiers compressés sont simplement décompressés comme s'il s'agissait d'un fichier à l'origine), gzip est normalement utilisé pour compresser des fichiers uniques. [4] Les archives compressées sont généralement créées en assemblant des collections de fichiers dans une archive tar unique, puis en compressant cette archive avec gzip.

Matt Ball
la source
12
Il n’existe pas de fichier "tgz". C'est un tar.gz. Le travail de gzip est de compresser ou décompresser son contenu (dans ce cas, une archive tar.) Ensuite, vous le désarchivez avec tar. C’est la philosophie typique du pipeline en Unix, et donc à peine unique.
luis.espinal
5
Non, .tar.gz n'est pas unique: .tar.bz2, .cpio.gz, etc. fonctionnent de la même manière.
user46971
3
@ user36310 Je sais ce que vous voulez dire en principe, mais dans la pratique, les outils vous permettent d'extraire un seul fichier. tar -xzvf tarball.tar.gz single/file.txt. En coulisse, il doit faire un travail supplémentaire, mais pour les apparences, il extrait un seul fichier.
Rich Homolka
4
Faites cela "beaucoup de travail supplémentaire" si le fichier se trouve à la fin d'une archive volumineuse. Clairement, si vous avez besoin d’un accès aléatoire, zip / rar / xar / 7z / lzh / arj / cab / sit etc. sont des formats supérieurs.
LaC
3
Pour être précis, une .tar.*archive compressée est toujours «solide», c'est-à-dire. se compose d'un seul flux compressé. En .ziprevanche, une archive n’est pas solide du tout, l’algorithme de compression est démarré de nouveau pour chaque fichier. Il sacrifie l'efficacité de la compression pour accélérer l'accès aléatoire. .7zles archives peuvent être pleines, non solides ou avoir des blocs pleins.
Daniel B
17

Gzip / Bzip2 sont des compresseurs de flux. Ils compressent un flux de données en quelque chose de plus petit. Ils pourraient être utilisés sur des fichiers individuels, mais pas sur des groupes de fichiers.

Tar, de son côté, a la possibilité de transformer une liste de fichiers, avec les chemins, les autorisations et les informations de propriété, en un seul flux continu - et inversement.

C'est pourquoi, pour archiver des fichiers (et si l'on a également besoin de compression), on utilise généralement tar + une méthode de compression.

Dan
la source
12

Tar est chargé de bien faire une et une seule chose: archiver (dés) archiver dans un seul fichier d'archive. De quoi? D'une seule et unique chose: un ensemble de fichiers.

Gzip est chargé de bien faire une et une seule chose: compresser. De quoi? D'une chose et d'une chose seulement: un seul fichier de tout type ... et cela inclut un fichier créé avec tar.

Cela remonte à la philosophie UNIX de traitement en pipeline, l'architecture sous-jacente de "tuyaux et filtres"; le traitement de tout comme un fichier et l'objectif architectural sonore de "bien faire", ce qui donne un plug-n-play très élégant et simple .)

Dans sa simplicité, il est de nature presque algébrique (un objectif ambitieux dans la conception de systèmes). Et ce n'est pas une mince affaire.

À bien des égards (et non sans ses défauts), il s’agit presque d’un summum en matière de composabilité, de modularité, de couplage lâche et de grande cohésion. Si vous comprenez ces quatre (et je veux dire vraiment comprendre ), vous comprendrez, il sera évident que pourquoi tar et gzip fonctionnent comme cela par paires.

luis.espinal
la source
1
Cette philosophie UNIX est belle, d’accord, mais j’observe qu’elle ne tient pas la route et crée des archives non solides. (Extraire un seul fichier d'un fichier tar.gz de 1 Go ne devrait pas être un problème, et de ce que j'ai compris ici, ZIP est bien supérieur à tar.gz ... n'est-ce pas?)
Mehrdad
@ Mehrad - Premièrement , qu'est-ce qu'une archive non solide? Comme attribué à Voltaire, "Si vous voulez converser avec moi, vous devez d'abord définir vos termes." . Deuxièmement , oui, l’architecture des tuyaux et des filtres est insuffisante dans certains cas, comme toute autre architecture, quelle que soit sa beauté. C'est une donnée avec un minimum d'ingénierie, et ce n'est pas l'argument qui est avancé. Troisièmement , zip est supérieur à gzip et tar, mais ce n’est pas ce que vous avez demandé. Vous avez demandé pourquoi les fichiers zip et tar fonctionnaient comme ils le faisaient et s'il y avait des avantages, et vous avez obtenu une réponse technique.
luis.espinal
@Mehrad - également, je ne sais pas quel genre de problèmes rencontrez-vous lorsque vous décompressez | untar un fichier 1gig tar.gz Je l'ai déjà fait plusieurs fois, jusqu'à 2 Go avec les anciennes installations de gzip (et jusqu'à 4 Go avec les versions plus récentes de gzip.) Si vous le faites par câble ou sur un montage NFS, alors duh! Vous rencontrerez des problèmes de performances similaires à ceux rencontrés avec un zip simple. Heck, j'ai même débridé d'un tuyau à un processus distant spitting entrée gzip dans un socket. Essayez cela avec zip. Pour chaque problème, utilisez l'outil approprié (que ce soit tar | gz ou zip.)
luis.espinal
8

Tout d'abord, TAR n'a pas été créé pour créer des archives de fichiers . C'est Tape ARchiver . Son travail consiste à écrire ou à charger une archive sur / à partir d'une bande.

L' option -f lui permet d'utiliser un fichier en tant que "bande virtuelle", qui peut ensuite être compressé par un autre programme. En fait, une telle compression se produit également sur les lecteurs de bande du monde réel.

Bien sûr, la philosophie d'utiliser un programme pour bien le faire compte également dans ce cas, mais on peut ne pas comprendre pourquoi les archives TAR sont structurées comme un flux plutôt que comme un répertoire de contenu + contenu.

PL
la source
3
Bon ... Les fichiers ZIP mettent toutes les informations sur les fichiers dans un en-tête unifié, puis tout le contenu du fichier ... rendant impossible l' ajout de fichiers supplémentaires à un fichier ZIP ... vous devez réécrire le fichier entier ... avec Au format TAR, l'en-tête de chaque fichier est séparé, vous pouvez donc facilement ajouter d'autres fichiers sans réécrire toute la bande
JoelFan
5

Traditionnellement, les systèmes Unix utilisés un programme pour effectuer une tâche par la philosophie Unix : tarétait juste un moyen pour emballer plusieurs fichiers en un seul fichier, à l' origine pour la sauvegarde sur bande (donc tar, t singe ar civette). tarne fournit pas de compression; l'archive non compressée résultant est généralement compressée avec un autre programme tel que gzip, bzip2ou xz. Autrefois, ils utilisaient la compresscommande pour le faire; Les nouveaux algorithmes de compression sont beaucoup plus efficaces que cela.

L'approche hautement modularisée dictée par la philosophie Unix signifie que chaque programme peut être utilisé individuellement ou combiné pour effectuer des tâches plus complexes, notamment la création d'archives compressées, comme décrit ici. Pour ce type de tâches, il est également facile d’échanger des outils individuels selon les besoins; vous voudriez simplement que le programme de compression utilise un algorithme de compression différent, sans avoir à remplacer l' tarutilitaire lui-même.

Cette approche modulaire n’est pas sans inconvénients. Comme mentionné dans les commentaires aux autres réponses, un format d'archive compressé dédié .zipest mieux à même de gérer l'extraction de fichiers individuels; Les archives compressées doivent être décompressées presque entièrement pour pouvoir extraire les fichiers vers la fin de l'archive, tandis que les .ziparchives permettent un accès aléatoire à leur contenu. (Certains formats plus récents, tels que .7z, prennent en charge les archives solides et non solides, ainsi que les blocs solides de taille variable dans les archives plus grandes.) L'utilisation continue de tarconjointement avec un utilitaire de compression séparé est une question de tradition et de compatibilité; aussi, .7zet .zipne supporte pas les métadonnées du système de fichiers Unix telles que les permissions.

bwDraco
la source