O que é mais eficiente - compactação tar ou zip? Qual é a diferença entre tar e zip?

68

Estou trabalhando no ambiente Linux e quero saber sobre os comandos tar e zip.

O que é mais eficiente - tar ou zip? Também preciso saber as diferenças entre os comandos tar e zip. Alguém pode me explicar?

rekha_sri
fonte

Respostas:

77

tarsomente cria um único arquivo com vários arquivos, ele não faz compactação, a menos que um programa de compactação seja combinado gzipou como bzip2((que você pode chamar de dentro tarusando as opções -zou -j, respectivamente). zipcombina o arquivamento e a compactação em um programa.

Wim
fonte
60

alcatrão

  • Supõe que você esteja lendo de um extremo ao outro - "Tape ARchive". (A idade do comando mostra ...)
  • Não faz compactação, mas você pode compactar todo o fluxo resultante, canalizando-o através, por exemplo, de gzip e bzip2 (feito internamente com -z ou -j)
  • Atributos arquivo lojas unix : uid, gid, permissões (mais notavelmente executável). O padrão pode depender da sua distribuição e pode ser alternado com as opções.

fecho eclair

  • Armazena atributos do MSDOS . (Arquivar, Somente leitura, Oculto, Sistema)
  • Compacta cada arquivo e os adiciona a um arquivo
  • Inclui uma tabela de arquivos no final do arquivo
  • e como resultado dos dois primeiros, permite ler apenas as partes exatas sobre o arquivo que você precisa.

O fato de o zip compactar os arquivos separadamente afetará as taxas de compactação, principalmente em muitos arquivos semelhantes pequenos.

(Pelo menos, isso estava exatamente correto há uma década.)

MaHuJa
fonte
22

O Tar preserva muito mais metadados que o Zip, veja minha comparação (está um pouco desatualizada):

insira a descrição da imagem aqui

(Clique para ampliar)

O alcatrão passa em 65% dos testes, enquanto o Zip passa apenas em 17%. Disponibilizei a suíte de testes no github, sob licença BSD, para que você possa experimentar se tiver Mac. Para o Linux, não tenho certeza se existem metadados, portanto esses testes podem não ser relevantes.

neoneye
fonte
Interessante! +1 para isso. Mas, novamente, esse foi um programa enorme. Você escreveu isso para outros fins? Apenas curioso.
CppLearner
Eu escrevi os testes para um gerenciador de arquivos em que trabalhava há alguns anos. Nunca o lançou.
neoneye
11
O Linux também possui metadados, portanto deve funcionar para isso.
Zeitue 20/12/16
14

A eficiência pode ser medida de diferentes maneiras:

  1. Quanto tempo leva o processo?
  2. Qual o tamanho dos arquivos resultantes?

Também há outras perguntas, como "Quão comuns são as ferramentas para manipular os arquivos resultantes?"

Assim, por exemplo, bzip2cria arquivos menores que gzip, mas pode demorar significativamente mais. Além disso, na minha experiência, gzipé universal em sistemas similares ao Unix, mas bzip2ainda não é (embora seja muito comum e geralmente fácil de obter).

Telêmaco
fonte
3
O 7zip ( 7-zip.org ) é outra boa opção para obter excelente compactação à custa do tempo da CPU. Menos comum que o bzip2 (não instalado por padrão em qualquer lugar que eu conheça), mas fácil de instalar na maioria dos lugares (ele está nos repositórios padrão da maioria das distribuições Linux e existe um pacote de instalação simples para Windows. janela de compressão através de arquivos de entrada assim fica ainda maior poupança ao longo zip quando incluindo muitos arquivos pequenos.
David Spillett
3
A eficiência também pode ser medida pela preservação dos dados, veja minha resposta a esta pergunta. O alcatrão é muito melhor que preservar os dados.
neoneye
11
mais uma medição pode ser compatível fora do UNIX. O Windows é bom com zip (embutido no Windows), geralmente pode processar facilmente o tar.gz com o shareware, mas o bzip2 é raro de se encontrar. Infelizmente, a pergunta original não mencionou esses critérios, portanto, não podemos ver se são relevantes.
Rich Homolka
11
Certa vez, fiz uma revisão completa da taxa de compressão versus o tempo necessário para alguns compressores comuns e qual seria o mais eficiente, dependendo de como você valoriza o espaço versus o tempo: blog.grandtrunk.net/2004/07/practical-compressor-test
Wim
9

Como Wim observou, o alcatrão em si não se comprime. Se você adicionar compactar o tar (por exemplo, para obter um arquivo .tar.gz ou .tar.bz2), estará compactando o arquivo tar inteiro de uma só vez. Por outro lado, o zip compacta cada arquivo individualmente.

A eficiência depende da carga de trabalho. Especificamente, o zip permite acessar arquivos individuais diretamente. Com o tar, você deve primeiro procurar nos arquivos indesejados (compactados) antes. O desempenho da compactação depende do que você está compactando. tarcom bzip2muitas vezes é melhor para um grande número de arquivos semelhantes (por exemplo, um diretório de origem). zipPode ser melhor se cada arquivo tiver um conteúdo muito diferente.

Matthew Flaschen
fonte
4
... por outro lado, é necessário obter o arquivo zip inteiro antes de acessar o conteúdo, porque o toc é colocado no final. em contraste, você pode descompactar um tar tão rápido quanto os bytes chegar ...
akira
6

Os arquivos zip contêm um diretório central de seu conteúdo no final (é mais provável que você evite ter que criar o diretório antecipadamente, onde você ainda não sabe o que estará lá dentro). Isso permite extrair rapidamente arquivos únicos sem precisar descompactar todo o arquivo morto: basta ler o diretório do arquivo morto e extrair apenas o necessário. No entanto, isso exige que todo o arquivo seja acessível e requer acesso aleatório, disponível apenas em dispositivos de bloco (disquetes, discos rígidos). Além disso, o diretório de arquivamento é vulnerável: se o arquivamento for truncado por algum motivo, será necessário um trabalho pesado para extrair qualquer coisa útil do arquivamento.

Os arquivos zip foram criados para uso do BBS, onde era importante poder agrupar o conteúdo de um diretório em um único arquivo (e compactado) - em vez de precisar fazer o download de milhares de arquivos únicos. Muito parecido com a maioria dos sites, os pacotes são baixados até hoje, pelos mesmos motivos.

Os arquivos Tar foram criados para agrupar backups a serem usados ​​em unidades de fita, portanto, para acesso seqüencial . Não há diretório central; em vez disso, o arquivo contém blocos de cabeçalho em intervalos regulares, indicando quais arquivos serão seguidos nos próximos blocos. Os arquivos de alcatrão devem ser lidos de uma só vez; se apenas um arquivo for extraído, o arquivo será lido sequencialmente, começando desde o início até que o arquivo solicitado seja encontrado (que também pode estar no final). A compressão é aplicada em cima disso; cada um dos vários programas de compressão que são aplicadas aos arquivos tar ( compress, gzip,bzip2etc.) são compressores de fluxo e não alteram a natureza seqüencial do arquivo em nenhum assunto. Na pior das hipóteses, você precisaria de um pouco mais de blocos até poder começar a extrair.

Isso pode parecer uma diferença trivial, mas de fato representa um oposto polar na filosofia. Nos arquivos zip, sempre há a necessidade de ter o arquivo inteiro em mãos para fazer alguma coisa útil, enquanto um arquivo tar pode ser transmitido para um pipeline. Posso fazer o download de um grande arquivo tar e começar a extraí-lo desde o início, assim que os primeiros blocos chegarem (e talvez interrompa o download assim que obtiver o arquivo que estou procurando). Para um arquivo Zip, tenho que esperar até que o diretório do arquivo apareça, que chega no final do arquivo. Mas uma vez eu faço tem o arquivo inteiro na mão, extraindo conteúdo parcial a partir dele será muito mais rápido de um arquivo tar.

Ambos os formatos têm um ponto muito forte, dependendo de onde e como são usados. Como os pipelines (e, portanto, a noção de streaming de dados de um processo para outro) realmente existem apenas no mundo Unix, a principal vantagem dos arquivos tar é perdida em outros sistemas, e é por isso que os arquivos Zip são muito mais populares lá. Mas os arquivos tar são mais flexíveis, e é por isso que os prefiro sempre que tenho uma escolha.

Vucar Timnärakrul
fonte
5

Como o outro já disse, o tar cria um grande "bloco" de todos os arquivos que podem ser compactados com um compressor de fluxo como gzip ou bzip2.

A desvantagem disso é que você precisa descompactar o arquivo inteiro para acessar um arquivo dentro do arquivo morto.

A vantagem disso é que a taxa de compactação geralmente é maior, principalmente quando os arquivos compactados são muito semelhantes.

Outros empacotadores como "rar" têm um "modo de bloqueio" (ou similar) para ter o mesmo efeito.

IanH
fonte