gzip sem alcatrão? Por que eles são usados ​​juntos?

60

Por que o tar e o gzip quase sempre são usados ​​juntos, e não apenas o gzip? Existe alguma vantagem nesse método?

Mehrdad
fonte

Respostas:

72

O TAR cria um único arquivo arquivado de muitos arquivos, mas não os compacta.

Detalhes do formato

Um arquivo tar é a concatenação de um ou mais arquivos. Cada arquivo é precedido por um registro de cabeçalho de 512 bytes. Os dados do arquivo são gravados inalterados, exceto que seu comprimento é arredondado para um múltiplo de 512 bytes e o espaço extra é preenchido com zero. O final de um arquivo é marcado por pelo menos dois registros consecutivos preenchidos com zero.

O GZIP compacta um único arquivo em outro arquivo, mas não cria arquivos.

Formato de arquivo

... Embora seu formato de arquivo também permita a concatenação de vários fluxos (os arquivos compactados são simplesmente descompactados como se fossem originalmente um arquivo), o gzip é normalmente usado para compactar apenas arquivos únicos. [4] Os arquivos compactados geralmente são criados reunindo coleções de arquivos em um único arquivo tar e depois compactando esse arquivo com o gzip.

Matt Ball
fonte
12
Não existe um arquivo "tgz". É um tar.gz. O trabalho do gzip é compactar ou descompactar seu conteúdo (nesse caso, um arquivo tar). Em seguida, você o desarquivará com tar. É a filosofia típica de pipeline do Unix e, portanto, dificilmente única.
Luis.espinal 02/03
5
Não, .tar.gz não é único: .tar.bz2, .cpio.gz etc. funcionam da mesma maneira.
precisa saber é o seguinte
3
@ user36310 Eu sei o que você quer dizer em princípio, mas, na prática, as ferramentas permitem extrair um único arquivo. tar -xzvf tarball.tar.gz single/file.txt. Nos bastidores, ele precisa fazer um trabalho extra, mas, para as aparências, extrai um único arquivo.
Rich Homolka
4
Faça "muito trabalho extra" se o arquivo estiver no final de um arquivo grande. Claramente, se você precisar de acesso aleatório, zip / rar / xar / 7z / lzh / arj / cab / sit etc. são formatos superiores.
LaC
3
Para ser mais preciso, um .tar.*arquivo compactado é sempre "sólido", ou seja. consiste em um único fluxo compactado. Um .ziparquivo, por outro lado, não é sólido, o algoritmo de compactação é iniciado novamente para cada arquivo. Ele sacrifica a eficiência da compactação para acelerar o acesso aleatório. .7zos arquivos podem ser sólidos, não sólidos ou ter blocos sólidos.
Daniel B
17

Gzip / Bzip2 são compressores de fluxo. Eles compactam um fluxo de dados em algo menor. Eles podem ser usados ​​em arquivos individuais, mas não em grupos de arquivos por conta própria.

O Tar, por outro lado, tem a capacidade de transformar uma lista de arquivos, com caminhos, permissões e informações de propriedade, em um único fluxo contínuo - e vice-versa.

É por isso que, para arquivar arquivos (e se também é necessário compactação), geralmente se usa tar + algum método de compactação.

Dan
fonte
12

Tar é responsável por fazer uma e apenas uma coisa bem: (des) arquivar em (de) um único arquivo. Sobre o que? De uma e apenas uma coisa: um conjunto de arquivos.

O Gzip é responsável por fazer uma e apenas uma coisa bem: (des) compactar. Sobre o que? De uma coisa e apenas uma coisa: um único arquivo de qualquer tipo ... e isso inclui um arquivo criado com tar.

Ele volta à filosofia UNIX de pipelining, a arquitetura subjacente de "tubos e filtros"; o tratamento de tudo como um arquivo e o objetivo arquitetônico sólido de "uma coisa faz apenas uma coisa e faz bem" (que resulta em uma espécie de plug-and-play muito elegante e simples .)

Em sua simplicidade, é quase de natureza algébrica (um grande objetivo no design de sistemas). E isso não é tarefa fácil.

De muitas maneiras (e não sem falhas), isso é quase um ponto alto em composição, modularidade, acoplamento solto e alta coesão. Se você entende esses quatro (e eu quero dizer realmente entender ), entende, será óbvio por que tar e gzip funcionam assim em pares.

luis.espinal
fonte
11
Essa filosofia do UNIX é linda, tudo bem, mas estou observando que ela fica aquém, criando arquivos não sólidos. (Extrair um único arquivo de um tar.gz de 1 GB não deve ser complicado, e pelo que entendi aqui, o ZIP é muito superior ao tar.gz ... certo?)
Mehrdad
@ Mehrad - Primeiro , o que é um arquivo não sólido? Como atribuído a Voltaire: "Se você quiser conversar comigo, primeiro deve definir seus termos". . Segundo , sim, a arquitetura de tubos e filtros fica aquém em casos específicos, como qualquer outra arquitetura, independentemente de sua beleza. Isso é um dado com um pouco de engenharia, e não é esse o argumento que está sendo feito. Terceiro , o zip é superior ao gzip e tar, mas não foi o que você pediu. Você perguntou por que o zip e o tar funcionam da maneira que eles funcionam e se havia alguma vantagem, e você recebeu uma resposta técnica.
Luis.espinal 02/03
@ Mehrad - também não sei que tipo de problemas você encontra ao descompactar | descompactar um arquivo 1gig tar.gz. Já fiz isso várias vezes, até 2 GB com instalações mais antigas do gzip (e até 4 GB com versões mais recentes do gzip.) Você encontrará problemas de desempenho semelhantes, como se fosse feito com zip simples. Heck, eu até desenrolei de um pipe para um processo remoto, cuspindo a entrada gzip em um soquete. Tente isso com zip. Para cada problema, use a ferramenta apropriada (seja tar | gz ou zip.)
luis.espinal
8

Primeiro de tudo, TAR não foi criado para criar arquivo arquivos. É Tape ARchiver . Seu trabalho é gravar ou carregar um arquivo de / para fita.

A opção -f faz com que use um arquivo como "fita virtual", que pode ser compactada por outro programa. De fato, essa compactação também acontece em gravações do mundo real.

Obviamente, a filosofia de usar um programa para fazê-lo também conta nesse caso, mas pode-se perder o motivo pelo qual os arquivos TAR são estruturados como um fluxo em vez de um diretório de conteúdo + conteúdo.

p_l
fonte
3
Certo ... Os arquivos ZIP colocam todas as informações do arquivo em um cabeçalho unificado, e todo o conteúdo do arquivo ... o que torna impossível anexar mais arquivos a um arquivo ZIP ... você precisa reescrever o arquivo inteiro ... com formato TAR, o cabeçalho para cada arquivo é separado, então você pode facilmente adicionar mais arquivos sem reescrever a fita inteira
JoelFan
5

Tradicionalmente, os sistemas Unix usado um programa para executar uma tarefa acordo com a filosofia Unix : tarera apenas um meio para empacotar vários arquivos em um único arquivo, originalmente para backup em fita (daí tar, t macaco ar cebolinha). tarnão fornece compactação; o arquivo não comprimida resultante é tipicamente comprimida com algum outro programa, tais como gzip, bzip2, ou xz. Antigamente, eles usavam o compresscomando para fazer isso; algoritmos de compressão mais recentes são muito mais eficazes que isso.

A abordagem altamente modularizada ditada pela filosofia do Unix significa que cada programa pode ser usado individualmente, conforme apropriado, ou combinado para executar tarefas mais complexas, incluindo a criação de arquivos compactados, conforme descrito aqui. Para esse tipo de tarefa, também facilita a troca de ferramentas individuais, conforme necessário; você apenas alteraria o programa de compactação para usar um algoritmo de compactação diferente, sem precisar substituir o tarpróprio utilitário.

Essa abordagem modular não deixa de ter suas desvantagens. Conforme mencionado nos comentários de outras respostas, um formato de arquivo compactado dedicado como .zipé mais capaz de lidar com a extração de arquivos individuais; tarballs compactados precisam ser descompactados quase totalmente para extrair arquivos perto do final do arquivo, enquanto os .ziparquivos permitem acesso aleatório ao seu conteúdo. (Alguns formatos mais recentes, como, por exemplo .7z, suportam arquivos sólidos e não sólidos, bem como blocos sólidos de tamanho variável em arquivos maiores.) O uso contínuo de tarem conjunto com um utilitário de compactação separado é uma questão de tradição e compatibilidade; também .7ze .zipnão suporta metadados do sistema de arquivos Unix, como permissões.

bwDraco
fonte