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 que les fichiers sont d'abord placés dans une archive .tar, 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?
Réponses
Trop de publicités?bzip et gzip fonctionnent sur des fichiers uniques, pas sur des groupes de fichiers. Plain old zip (et pkzip) fonctionnent sur des groupes de fichiers et intègrent le concept d'archive.
La philosophie * nix est constituée de petits outils qui effectuent très bien des tâches spécifiques et peuvent être enchaînés. C'est pourquoi deux outils ici ont des tâches spécifiques et sont conçus pour s'intégrer parfaitement. Cela signifie également que vous pouvez utiliser tar pour regrouper des fichiers, puis vous avez le choix d'un outil de compression (bzip, gzip, etc.).
Une distinction importante est dans la nature des deux types d'archives.
Fichiers TAR sont un peu plus d'une concaténation du contenu du fichier avec des en-têtes, tandis que gzip et bzip2 sont les compresseurs stream, qui, dans les archives, sont appliqués à l'ensemble de la concaténation.
Les fichiers ZIP sont un enchaînement de individuellement des fichiers compressés, avec des en-têtes. En fait, l'algorithme DEFLATE est utilisé par zip et gzip, et avec binaire approprié de réglage, vous pouvez prendre la charge utile d'un gzip flux et le mettre dans un fichier zip avec en-tête approprié et les entrées d'un dictionnaire.
Cela signifie que les deux différents types d'archives ont différents arbitrages. Pour les grandes collections de fichiers de petite taille, le GOUDRON, suivie par un flux compresseur normalement entraîner une hausse du taux de compression que ZIP parce que les compresseurs stream aura davantage de données pour construire son dictionnaire des fréquences, et donc être capable de faire sortir plus d'informations redondantes. D'autre part, une (fichier-longueur de la préservation de) l'erreur dans un fichier ZIP ne corrompre les fichiers dont les données compressées qui a été touché. Normalement, les compresseurs stream ne peut pas véritablement corriger les erreurs à mi-parcours. Ainsi, les fichiers ZIP sont plus résistants à la corruption, dans le cadre de l'archive sera toujours accessible.
C'est bizarre que personne ne l'a mentionné que les versions modernes de GNU tar
vous permettre de compresser comme vous le groupement:
tar -czf output.tar.gz directory1 ...
tar -cjf output.tar.bz2 directory2 ...
Vous pouvez également utiliser le compresseur de votre choix à condition qu'il prend en charge le '-c
"(stdout, ou à partir de stdin) et '-d
' (décompresser) options:
tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...
Cela vous permettra de spécifier une alternative compresseur.
[Ajouté: Si vous procédez à l'extraction d' gzip
ou bzip2
fichiers compressés, GNU tar
auto-détecte et exécute le programme approprié. Qui est, 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 celles-ci seront traitées correctement. Si vous utilisez un compresseur standard, alors vous devez le spécifier lorsque vous procédez à l'extraction.]
La raison de la séparation est, comme dans la réponse sélectionnée, la séparation des tâches. Entre autres choses, cela signifie que les gens peuvent utiliser le 'cpio
' programme pour l'emballage de fichiers (au lieu de tar
), puis utilisez le compresseur de choix (once upon a time, le préféré compresseur pack
, plus tard, il a été compress
(ce qui était d'autant plus efficace que l' pack
), et puis, gzip
qui a couru des anneaux autour de ses deux prédécesseurs, et est entièrement concurrentiel avec zip
(qui a été porté sous Unix, mais n'est pas originaire de là), et maintenant, bzip2
ce qui, dans mon expérience, a généralement de 10 à 20% de l'avantage sur gzip
.
[Ajouté: quelqu'un l'ont indiqué dans leur réponse qu' cpio
a de drôles de conventions. C'est vrai, mais jusqu'à ce que GNU tar
obtenu les options pertinentes ('-T -
'), cpio
a été la meilleure de commande lorsque vous ne voulez pas archiver tout ce qui était en dessous d'un répertoire donné -- vous pouviez choisir exactement quels fichiers ont été archivés. L'inconvénient de l' cpio
a été, non seulement que vous pourriez choisir les fichiers -- vous avez eu à choisir entre eux. Il y a encore un endroit où l' cpio
de scores; il peut le faire in situ copie à partir d'une hiérarchie de répertoire à un autre, sans stockage intermédiaire:
cd /old/location; find . -depth -print | cpio -pvdumB /new/place
D'ailleurs, le '-depth
" find
est important dans ce contexte - il copie le contenu de répertoires avant de définir les autorisations sur les répertoires eux-mêmes. Quand j'ai vérifié la commande avant d'entrer dans le plus de cette réponse, j'ai copié certains en lecture seule répertoires (555 autorisation); quand je suis allé à supprimer la copie, j'ai eu à détendre les autorisations sur les répertoires avant 'rm -fr /new/place
"pourrait se terminer. Sans l' -depth
option, l' cpio
commande aurait échoué. Je ne re-rappeler ceci quand je suis allé faire le nettoyage - la formule citée est automatique pour moi (principalement en raison de beaucoup de répétitions pendant de nombreuses années).
]
La chose drôle est, vous pouvez obtenir un comportement non prévu par les créateurs de tar
et gzip
. Par exemple, vous pouvez non seulement d'un fichier tar, gzip, vous pouvez également les fichiers gzip tar, pour produire un files.gz.tar
(ce qui serait techniquement plus proche de la façon dont pkzip
travaux). Ou vous pouvez mettre un autre programme dans le pipeline, par exemple, de la cryptographie, et vous pouvez choisir un ordre arbitraire de goudronnage, gzipping et de cryptage. Celui qui a écrit le programme de cryptographie ne pas avoir la moindre idée de comment son programme serait utilisé, tout ce qu'il doit faire est de lire l'entrée standard et écrire sur la sortie standard.
Une autre raison, c'est si répandue, c'est que tar et gzip sont sur la quasi totalité de *NIX installer le système de base. Je crois que c'est probablement la seule raison de plus grande. C'est aussi pourquoi les fichiers zip sont extrêmement répandus sur Windows, parce que le soutien est construit, indépendamment de la supérieure des routines en RAR ou 7z.
GNU tar permet également de créer, d'extraire ces fichiers à partir d'une seule commande (une seule étape):
- Créer une Archive:
tar -cfvj destination.tar.bz2 *.files
tar -cfvz destination.tar.gz *.files
Extraire les fichiers d'une Archive: (la -dans la partie C est facultatif, la valeur par défaut du 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é à la mémoire de mes nombreuses années sur Linux et récemment sur Nexenta (OpenSolaris).