Questão Qual é a vantagem de usar 'tar' hoje?


Eu sei disso tar Foi feito para arquivos de fita no passado, mas hoje temos formatos de arquivo que agregam arquivos e executam compactação dentro do mesmo formato de arquivo lógico.

Questões:

  • Existe uma penalidade de desempenho durante os estágios de agregação / compressão / descompressão para usar tar encapsulado em gzip ou bzip2, quando comparado ao uso de um formato de arquivo que faz agregação e compactação na mesma estrutura de dados? Suponha que o tempo de execução do compressor que está sendo comparado é idêntico (por exemplo, gzip e Deflate são semelhantes).

  • Existem características do tar formato de arquivo que outros formatos de arquivo, como .7z e .zip não tem?

  • Desde a tar é um formato de arquivo tão antigo e formatos de arquivo mais recentes existem hoje, por que tar (encapsulado em gzip, bzip2 ou até mesmo o novo xz) ainda tão amplamente usado hoje em GNU / Linux, Android, BSD e outros sistemas operacionais UNIX, para transferências de arquivos, origem de programas e downloads binários, e às vezes até mesmo como um formato de gerenciador de pacotes?


206


origem


Eu discordo que "desperdiça tempo". Se você quer dizer desempenho, não há penalidade de desempenho real para tar, já que o formato é muito eficiente. Se você quer dizer que desperdiça seu tempo, eu não vejo como tar xvzf é mais difícil que 7z -x... - allquixotic
Ele parece estar lamentando o fato de que o tar não armazena um catálogo no começo, então ferramentas de compressão gui que querem listar o conteúdo antes de extraí-lo precisam descompactar todo o tar apenas para listar o conteúdo, então ele descompacta novamente ao extrair . - psusi
@MarcusJ: você acha que o 7z de alguma forma magicamente sabe onde cada arquivo começa em um arquivo? Além disso, os algoritmos usuais de compressão (gzip, bzip2) funcionam com o streaming do conteúdo: não é necessário completar 100% o primeiro estágio antes do próximo. - progo
Também @MarcusJ você parece estar confundindo duas coisas diferentes: quando você faz tar xvzf, os dados não compactados não é escrito no disco rígido .tar formato! Você está certo de que se você correu gunzip blah.tar.gz e depois tar xf blah.tar, ele gravaria os dados no disco duas vezes (uma vez como .tar e novamente como arquivos no sistema de arquivos), mas ninguém realmente faz isso dessa maneira. o tar xzf usa um Tubo UNIX (basicamente uma cópia da memória) para transferir os dados não compactados gzip (ou qualquer compressor) para tar, então os dados são não escrito no disco em .tar formato. - allquixotic
Uma coisa que eu sei é que tar (especialmente comprimido) se comporta muito quando se trata de corrupção de dados. Pequenos dados de redundância / recuperação adicionados por formatos modernos valem ouro - PPC


Respostas:


Parte 1: desempenho

Aqui está uma comparação entre dois fluxos de trabalho separados e o que eles fazem.

Você tem um arquivo no disco blah.tar.gz que é, digamos, 1 GB de dados compactados com gzip que, quando não compactados, ocupam 2 GB (portanto, uma taxa de compactação de 50%).

A maneira que você criaria isso, se você fizesse arquivamento e compactação separadamente, seria:

tar cf blah.tar files ...

Isso resultaria em blah.tar que é uma mera agregação do files ... em forma não comprimida.

Então você faria

gzip blah.tar

Isso leria o conteúdo de blah.tar do disco, comprima-os através do algoritmo de compactação gzip, escreva o conteúdo blah.tar.gze, em seguida, desvincule (exclua) o arquivo blah.tar.

Agora vamos descomprimir!

Maneira 1

Você tem blah.tar.gz, De uma forma ou de outra.

Você decide executar:

gunzip blah.tar.gz

Isso vai

  • LEIA o conteúdo de dados comprimidos de 1 GB blah.tar.gz.
  • PROCESSAR os dados comprimidos através do gzip descompressor na memória.
  • À medida que o buffer de memória é preenchido com "um bloco" de dados, WRITE os dados não compactados no arquivo blah.tar no disco e repita até que todos os dados comprimidos sejam lidos.
  • Desvincular (excluir) o arquivo blah.tar.gz.

Agora você tem blah.tar no disco, que é descompactado, mas contém um ou mais arquivos dentro dele, com sobrecarga de estrutura de dados muito baixa. O tamanho do arquivo é provavelmente alguns bytes maior que a soma de todos os dados do arquivo.

Você corre:

tar xvf blah.tar

Isso vai

  • LEIA os 2 GB de conteúdo de dados não compactados de blah.tar e a tar estruturas de dados do formato de arquivo, incluindo informações sobre permissões de arquivos, nomes de arquivos, diretórios etc.
  • ESCREVA os 2 GB de dados mais os metadados no disco. Isso envolve: converter a estrutura de dados / informações de metadados em novos arquivos e diretórios no disco, conforme apropriado, ou reescrever arquivos e diretórios existentes com novos conteúdos de dados.

Os dados totais nós LER do disco neste processo foi de 1 GB (para gunzip) + 2 GB (para tar) = 3 GB.

Os dados totais nós ESCREVI para disco nesse processo foi de 2 GB (para gunzip) + 2 GB (para tar) + alguns bytes para metadados = cerca de 4 GB.

Caminho 2

Você tem blah.tar.gz, De uma forma ou de outra.

Você decide executar:

tar xvzf blah.tar.gz

Isso vai

  • LEIA o conteúdo de dados comprimidos de 1 GB blah.tar.gz, um bloco de cada vez, na memória.
  • PROCESSAR os dados comprimidos através do gzip descompressor na memória.
  • À medida que o buffer de memória é preenchido, tubo esses dados, na memória, até o tar analisador de formato de arquivo, que lerá as informações sobre metadados, etc. e os dados de arquivos descompactados.
  • À medida que o buffer de memória é preenchido tar Analisador de arquivos, ele gravará os dados descompactados no disco, criando arquivos e diretórios e preenchendo-os com o conteúdo descompactado.

Os dados totais nós LER do disco neste processo foi de 1 GB de dados compactados, ponto final.

Os dados totais nós ESCREVI para disco nesse processo foi de 2 GB de dados não compactados + alguns bytes para metadados = cerca de 2 GB.

Se você notar, a quantidade de E / S do disco em Caminho 2 é idêntico para o disco I / O executado por, digamos, o Zip ou 7-Zip programas, ajustando as diferenças na taxa de compressão.

E se a taxa de compressão for sua preocupação, use o Xz compressor para encapsular tar, e você tem LZMA2'ed Arquivo TAR, que é tão eficiente quanto o algoritmo mais avançado disponível para o 7-Zip :-)

Parte 2: Recursos

tar armazena permissões Unix dentro de seus metadados de arquivo, e é muito bem conhecido e testado para empacotar com sucesso um diretório com todos os tipos de permissões diferentes, links simbólicos, etc. Existem mais que algumas instâncias onde um pode globar um monte de arquivos em um único arquivo ou fluxo, mas não necessariamente compactá-lo (embora a compactação seja útil e usada com frequência).

Parte 3: Compatibilidade

Muitas ferramentas são distribuídas em fonte ou forma binária como .tar.gz ou .tar.bz2, porque é um formato de arquivo "menor denominador comum": como a maioria dos usuários do Windows têm acesso a descompactadores .zip ou .rar, a maioria das instalações do Linux , até mesmo o mais básico, terá acesso a pelo menos tar e gunzip, não importa quão antigo ou reduzido. Até mesmo os firmwares Android têm acesso a essas ferramentas.

Novos projetos voltados para audiências que executam distribuições modernas podem muito bem ser distribuídos em um formato mais moderno, como .tar.xz (usando o formato de compactação Xz (LZMA), que comprime melhor que gzip ou bzip2) ou .7z, que é semelhante a o CEP ou RAR formatos de arquivo em que comprime e especifica um layout para encapsular vários arquivos em um único arquivo.

Você não vê .7z usado com mais frequência pela mesma razão pela qual a música não é vendida em lojas de download on-line em formatos novos como Opusou vídeo em WebM. Compatibilidade com pessoas que executam sistemas antigos ou muito básicos.


173



Parabéns pela ótima resposta com todo o conteúdo separado em três cabeçalhos distintos. - JFW
"Parte 3: Compatibilidade" parece ter sido copiado da resposta de @ Kruug. - titaniumdecoy
@titaniumdecoy Você percebeu que foi allquixotic quem originalmente escreveu essa parte e a editou na resposta de Kruug? - slhck
Obrigado por apontar isso, eu não percebi. No entanto, parece um pouco tolo para mim ter um bloco idêntico de texto em duas respostas diferentes nesta página. - titaniumdecoy
Isso responde porque tar se encaixa no ecossistema de arquivamento (ou seja, para agregar arquivos juntos, proporcionando um aumento de desempenho e alguns outros benefícios como o salvamento de permissões), mas não aborda por que alternativas modernas como dar não são usados ​​no lugar. Em outras palavras, essa resposta justifica o uso de agregadores de arquivos, mas não do tar software em si. - gaborous


este foi respondida no Stack Overflow.

O bzip e o gzip funcionam em arquivos únicos, não em grupos de arquivos. O zip antigo simples (e o pkzip) operam em grupos de arquivos e possuem o conceito do arquivo embutido.

A filosofia * nix é uma das pequenas ferramentas que fazem trabalhos específicos muito bem e podem ser encadeadas. É por isso que há duas ferramentas que têm tarefas específicas e foram projetadas para se encaixarem bem. Isso também significa que você pode usar tar para agrupar arquivos e, em seguida, você tem a opção de ferramenta de compactação (bzip, gzip, etc).

Muitas ferramentas são distribuídas em fonte ou forma binária como .tar.gz ou .tar.bz2, porque é um formato de arquivo "menor denominador comum": como a maioria dos usuários do Windows têm acesso a descompactadores .zip ou .rar, a maioria das instalações do Linux , mesmo o mais básico, terá acesso a pelo menos tar e gunzip, não importa quão antigo ou reduzido. Até mesmo os firmwares Android têm acesso a essas ferramentas.

Novos projetos voltados para audiências que executam distribuições modernas podem muito bem ser distribuídos em um formato mais moderno, como .tar.xz (usando o Xz (LZMA) formato de compressão, que comprime melhor que gzip ou bzip2), ou .7z, que é similar ao formato fecho eclair ou RAR formatos de arquivo em que comprime e especifica um layout para encapsular vários arquivos em um único arquivo.

Você não vê .7z usado com mais frequência pela mesma razão pela qual a música não é vendida em lojas de download on-line em formatos novos como Opusou vídeo em WebM. A compatibilidade com pessoas que executam sistemas antigos ou muito básicos é importante.


100



Olá @Kruug, editei o seu post apenas para dar uma perspectiva prática sobre por que as pessoas ainda escolher para usar esses formatos quando eles tiverem a opção de usar outra coisa. Eu não mudei o texto que você já tinha. Isso é apenas para garantir que o que parece ser a resposta canônica para essa pergunta tenha o quadro completo. Sinta-se à vontade para editar minha edição se você quiser :) - allquixotic
inicio allquixotic qualquer um? Edite a edição e edite para editar uma edição ... - SnakeDoc
Esta resposta é definitivamente um caso de "eu sou às vezes surpreendido por votos negativos imerecidos". Ele não aborda a questão central da questão que é listar o conteúdo do tar compactado e nem sequer é uma resposta original! - Ярослав Рахматуллин
-1 para grande justiça. isso deveria ter sido um comentário. - wim
Eu não compro o argumento legado / menor denominador comum; Lembro-me de novos sistemas (sun) freqüentemente ter que baixar gzip / gunzip (de sunfreeware) apenas para instalar outro software empacotado tar.gz (mais o gnu tar, já que o tar do sol foi sugado). Para legado / denominador comum inferior, você tinha tar.Z (comprimir / descomprimir). A progressão de utilitários tem sido um fluxo constante (sem trocadilhos) de mudança e melhoria: Z => zip => gz => bz2 => 7z => xz (ou qualquer ordem que você preferir). Quanto ao papel do tar, alguns utilitários não são compactados apenas, e ainda requerem tar para agrupar hierarquias de arquivos. - michael


Tar tem um rico conjunto de operações e modificadores que conhecem tudo sobre sistemas de arquivos Unix. Ele sabe sobre as permissões do Unix, sobre os diferentes tempos associados aos arquivos, sobre hard links, sobre softlinks (e sobre a possibilidade de que links simbólicos possam introduzir ciclos no gráfico do sistema de arquivos) e permite que você especifique várias maneiras diferentes de gerenciar todos esses dados .

  • Você deseja que os dados extraídos preservem os tempos de acesso aos arquivos? Tar pode fazer isso. Para preservar permissões? Tar pode fazer isso.

  • Você quer preservar os links simbólicos como links simbólicos? Tar faz isso por padrão. Quer copiar o alvo em vez disso? Tar pode fazer isso.

  • Você quer ter certeza de que os dados de hardlink são armazenados apenas uma vez (isto é, fazer a coisa certa)? Tar faz isso.

  • Você quer lidar bem com arquivos esparsos? Tar pode fazer isso.

  • Você quer dados não compactados (por quê?)? Tar pode fazer isso. Para compactar com gzip? Tar pode fazer isso. Com bzip2? Tar pode fazer isso. Com programas de compressão externos arbitrários? Tar pode fazer isso.

  • Você quer gravar ou recuperar de / para um dispositivo bruto? O formato do Tar lida bem com isso.

  • Você quer adicionar arquivos a um arquivo existente? Tar pode fazer isso. Para diferenciar dois arquivos para ver o que mudou? Tar pode fazer isso. Para atualizar apenas as partes do arquivo que foram alteradas? Tar pode fazer isso.

  • Você quer ter certeza de não arquivar em mais de um sistema de arquivos? Tar pode fazer isso.

  • Você quer pegar apenas arquivos que são mais recentes que o seu último backup? Tar pode fazer isso.

  • Você quer preservar nomes ou números de usuários e grupos? Tar pode fazer qualquer um.

  • Você precisa preservar nós de dispositivo (como os arquivos em /dev) para que, após a extração, o sistema funcione corretamente? Tar pode fazer isso.

O alcatrão tem evoluído para lidar com muitos e muitos casos de uso por décadas e realmente sabe muito sobre as coisas que as pessoas querem fazer com sistemas de arquivos Unix.


61



Você não precisa do GNU tar para usar um compressor arbitrário: apenas diga ao tar para escrever o arquivo para stdout com f - e canalizá-lo para o compressor. - Ilmari Karonen
"Você quer dados não compactados (por quê?)?" eu uso tar muitas vezes, para copiar uma árvore do sistema de arquivos de um lugar para outro e preservar as permissões, etc., e a compactação, nesse caso, leva apenas ciclos extras de CPU. Por exemplo. tar cf - * | tar xf - -C /somewhere. - Steve
Além disso, você desejaria um arquivo .tar quando o sistema de arquivos de destino executa a desduplicação. A criação de arquivos compactados em um sistema de arquivos que realiza a desduplicação reduzirá substancialmente a taxa de desduplicação. Exemplo: uma vez excluímos um arquivo tar.gz de US $ 10.000,00; ou seja, estava ocupando US $ 10 mil em espaço de armazenamento porque alguém usava compactação. - Aaron
Os ciclos de CPU do @Steve podem ser mais baratos que o disco IO para algoritmos como LZ4 ou LZO. É por isso que eles são usados ​​no zram e em sistemas de arquivos de compactação transparentes como NTFS, ZFS, Btrfs ... então, às vezes, é mais rápido do que compactar, já que a quantidade de IO do disco é bastante reduzida - phuclv


Você confunde os dois processos distintos de arquivamento e compressão.

Razões para usar um arquivador

Uma razão para usar o arquivamento sem compactação é, por exemplo, se um grupo de arquivos é copiado de um host para outro. Um comando como o seguinte

tar cf - some_directory | ssh host "(cd ~/somewhere | tar xf -)"

pode acelerar consideravelmente as coisas. Se eu sei que os arquivos não podem ser compactado ou se SSH é configurado com compressão, pode economizar considerável CPU Tempo. Claro, pode-se usar uma ferramenta de compactação mais moderna com uma função de arquivamento e desligue a compressão. A vantagem de tar é que eu posso esperar estar disponível em todos os sistemas.

Razões para usar um arquivador com compactação gzip

Uma razão que eu uso tar com gzip é: Rapidez! Se eu quiser transferir alguns GiB de arquivos de texto de um lugar para outro, eu não se preocupam em espremer os últimos bytes, já que a compactação é apenas usado para trânsito, não para armazenamento a longo prazo. Nesses casos eu uso gzip, que não maximiza a CPU (em contraste com 7-Zip, por exemplo), que significa que eu sou E / S vinculado novamente e não vinculado à CPU. E de novo: gzip pode ser considerado disponível em todos os lugares.

Razões para usar tar em favor de scp, rsyncetc.

Bate scp se você tiver muitos arquivos pequenos para copiar (por exemplo, um diretório de correio com centenas de milhares de arquivos). rsync, por incrível que pareça, pode não estar disponível em todos os lugares. Mais distante, rsync só vale a pena se parte dos arquivos - ou uma versão anterior - já estiver presente no destino. Para a cópia inicial tar é o mais rápido, com ou sem compressão, dependendo dos dados reais.


28



Mas se você for arquivar, por que não compactar também? Ok, sim, pode economizar tempo para arquivos que não são facilmente compactados, mas, em seguida, os arquivadores provavelmente devem saber que a música, por exemplo, não é muito compressível, exceto os cabeçalhos. - MarcusJ
Você pode não precisar ou seu conteúdo pode não ser compressível. - Hasturkun
Por motivos de desempenho, geralmente é mais fácil usar a agregação de arquivos descompactados ao enviar dados por meio de links de rede de largura de banda muito alta que excedem a velocidade na qual o compressor pode compactar dados. Isso é possível, por exemplo, com Gigabit Ethernet; apenas alguns algoritmos de compactação bem projetados, que também têm uma taxa de compactação muito baixa, podem compactar dados com rapidez, mesmo em uma grande CPU de desktop. Em um dispositivo incorporado, você tem menos tempo de CPU para trabalhar. - allquixotic
não só isso está acelerando as coisas, mas também permite preservar a propriedade, os timestamps e os atributos dos arquivos (se os privilégios de usuário permitirem) - Andre Holzner
@AndreHolzner direito. Muitas vezes faço tar cf - . | (cd ~/somewhere; tar xvf -). É realmente útil não ter que esperar até que o índice central seja escrito (como, por exemplo, em um arquivo zip). - user239558


Somando às outras boas respostas aqui, prefiro a combinação tar + gzip|bzip2|xz principalmente porque esses arquivos compactados são como fluxos, e você pode canalizá-los facilmente.

Eu preciso descompactar um arquivo disponível na internet. Com qualquer zip ou rar Formatos eu tenho que baixá-lo primeiro e depois descompactá-lo. Com tar.{gz,bz2,xz} Eu posso baixar e descompactar na mesma etapa, sem precisar ter o arquivo compactado fisicamente no disco:

curl -s http://example.com/some_compressed_file.tar.gz | tar zx

Isso vai deixar apenas os arquivos descompactados no meu disco, e vai acelerar todo o processo, porque eu não estou na primeira vez baixando o arquivo inteiro e depois que o download terminar eu descomprimi-lo. Em vez disso, eu estou descomprimindo enquanto está baixando. Você não pode fazer isso com zip ou rar arquivos.


24



Eu não sei sobre rar (é um programa terrível que só parece ter se tornado popular entre os piratas por causa de sua capacidade de dividir em vários arquivos menores), mas você pode transmitir o zip muito bem. A página man ainda menciona isso. Ele também tem a vantagem de poder extrair ou atualizar arquivos do meio de um grande arquivo de forma eficiente, embora o tar tenda a obter uma compactação ligeiramente melhor. Compressão versus acesso aleatório é uma troca. - psusi
@psusi incorreto. Você pode fazer hacks como esta, mas o que ele faz é baixar todo o arquivo na memória e, em seguida, descompactá-lo, em vez de descompactar durante o download. E funzip apenas extrai o primeiro arquivo no zipfile, não todos. - Carlos Campderrós
@Stu apenas para esclarecer, não é um problema, é apenas otimizar seu tempo (eu não me importo com o espaço se é isso que você pensou) - Carlos Campderrós
Ambos os lados trabalham: você pode tar de um lado e descompactar no outro também: tar zc /some/folder | ssh user@host "cd /other/folder && tar zx" - Carlos Campderrós
@psusi como eu lembro dos tempos antigos quando usava o pkzip para armazenar arquivos em vários disquetes, o catálogo da loja zip no final do arquivo. Ele sempre solicita o último disquete para iniciar a extração ou mostrar o catálogo. assim en.wikipedia.org/wiki/File:ZIP-64_Internal_Layout.svg - Mikhail Moskalev


Existem várias razões para ficar com o (GNU) Tar.

Isto é:

  • Licença GPL
  • bom no sentido da filosofia Unix
    • ferramenta de propósito único, capaz de realizar várias tarefas
  • bem documentado e tem muitos recursos confiáveis
  • compatível com vários algoritmos de compressão
  • fácil de usar e as pessoas desenvolveram hábitos com isso
  • amplamente disponível
  • Sinto-me quente e confuso por dentro quando uso software iniciado por RMS (excluindo Emacs)

Se o seu interesse é ter que "descompactar" um tarball antes de poder ler o conteúdo, então provavelmente você está certo. WinRAR e 7-Zip faça isso automaticamente. No entanto, há soluções simples para esse problema, como documentar o conteúdo de um arquivo morto em um formato descompactado.


13



É software livre - Então são muitos deles É bom no que faz - Dificilmente comparado a outras coisas É bem documentado e tem muitos recursos - Os recursos são pouco usados ​​e detestavelmente fáceis de usar. Suporta vários algoritmos de compressão - não tantos quantos outros - Griffin
os Deuses Unix criaram isso - portanto, devemos usá-lo! - SnakeDoc
O tar também armazena as permissões do UNIX nativamente e é muito bem conhecido e testado. Há mais do que alguns casos em que é necessário globalizar vários arquivos em um único arquivo ou fluxo, mas não necessariamente compactá-lo. - LawrenceC
Felizmente, o tar não está limitado apenas às versões GNU. Embora o GNU tar seja certamente um bom software, os front-ends relacionados ao libarchive + são muito mais rápidos e fáceis de incorporar em outros projetos de software. Você pode fazer um argumento para o tar sem transformá-lo em uma luta de licenciamento. - Lucas Holt
Eu não sou sarcástico. Eu gosto de RMS e do jeito que ele leva adiante, acredita. - Ярослав Рахматуллин


Formatos de arquivo como .zip exigir o software para ler o final do arquivo primeiro, para ler um catálogo de nomes de arquivos. Por outro lado, o tar armazena essa informação com o fluxo compactado.

A vantagem do modo tar é que você pode descompactar dados enquanto o lê de um tubo não-pesquisável, como um soquete de rede.

A vantagem do zip é que, para um arquivo estático no disco, você pode navegar pelo conteúdo e pelos metadados sem primeiro descompactar todo o arquivo.

Ambos têm seus usos, dependendo do que você está fazendo.


11



Não, você pode ler e gravar arquivos zip como um fluxo de e para um pipe. - Mark Adler
Isso pode ser específico da implementação, então, certamente não é suportado pelo pkzip original. - xorsyst
Sim, o software precisa ser escrito para suportá-lo. O formato zip o suporta completamente, com descritores de dados que podem seguir os dados compactados com os comprimentos e o CRC. - Mark Adler
@MarkAdler, qual software? O Infozip não suporta a descompactação de um pipe. - psusi
zlib.net/sunzip033.c.gz - Mark Adler


Parece haver alguma relutância em responder todas as suas perguntas diretamente, com uma aparente preferência em usar sua pergunta como um ponto de partida para a pontificação. Então eu vou tentar.

Existe uma penalidade de desempenho durante o   estágios de agregação / compressão / descompressão para usar tar   encapsulado em gzip ou bzip2, quando comparado ao uso de um formato de arquivo   que faz agregação e compactação na mesma estrutura de dados?   Assumir que o tempo de execução do compressor sendo comparado é idêntico (por ex.   gzip e Deflate são semelhantes).

Não. Na verdade, como tar e gzip geralmente são dois processos, você até recebe um benefício de velocidade multi-core que um arquivador como o zip da Info-ZIP não oferece. Em termos de taxa de compressão, o tar + gzip normalmente será visivelmente melhor que o zip com deflate, já que o primeiro pode se beneficiar da correlação entre os arquivos, enquanto o segundo comprime os arquivos separadamente. Esse benefício de compactação se traduz em um benefício de velocidade ao extrair, já que um arquivo mais compactado é descompactado em menos tempo.

Existem recursos do formato de arquivo tar que outros formatos de arquivo,   como .7z e .zip não tem?

Sim, o tar foi projetado para o Unix e evoluiu ao longo dos anos para poder gravar e restaurar exatamente cada detalhe de sistemas de arquivos Unix, até mesmo o sistema de arquivos Mac OS X Unix mais nookier e crannier. O zip é capaz de reter grande parte dos metadados, como permissões, horários, proprietários, grupos e links simbólicos, mas ainda não é tudo. Como exemplo, nem o zip nem o 7z podem reconhecer ou tirar proveito de arquivos esparsos, nem estão cientes ou capazes de restaurar links físicos.

Como o tar é um formato de arquivo tão antigo e existem formatos de arquivos mais novos   hoje, por que é tar (seja encapsulado em gzip, bzip2 ou até mesmo o novo   xz) ainda hoje muito usado no GNU / Linux, Android, BSD e outros   tais sistemas operacionais UNIX, para transferências de arquivos,   downloads binários, e às vezes até como um formato de gerenciador de pacotes?

Muitas outras boas respostas aqui para isso. O melhor é que apenas funciona, e você pode continuar a atualizá-lo para melhores formatos de compactação (por exemplo, xz) e ainda usar o mesmo formato tar e até mesmo o mesmo utilitário tar compilado. Se você quer apenas empacotar um monte de coisas, e depois descompactar tudo na outra ponta, então há poucas razões para usar qualquer coisa além de um dos mais antigos, mais completos e mais depurados softwares do mercado.

Se você quiser acesso aleatório, atualizações parciais ou outras coisas que precisem lidar com o conteúdo de forma fragmentada, ou você quer ser capaz de descobrir o que está nele sem ler a coisa toda, então você desejaria usar um formato diferente.


11



CW apoia Wiki da comunidade. Veja também Quais são as postagens da "Wiki da comunidade"?. - ctype.h
Eu acho que é CW porque a pergunta tem mais de 15 respostas. Quando você postou essa resposta, porque é 15, a pergunta e todas as respostas foram marcadas como CW. - ctype.h
Eu não consigo ver como esta resposta diz algo que nenhuma das outras respostas, além de citar diretamente as perguntas (que eu escrevi, BTW, porque a revisão original da questão foi horrível o suficiente para ser fechado como NARQ). Boa tentativa embora. - allquixotic
Ok. Tudo o que você gostaria de pensar está bem. Sua resposta nem qualquer outra resposta parece abordar se há uma penalidade de desempenho. Sua resposta não aborda a diferença de compactação perceptível, embora outros o façam. Como o seu não aborda realmente o desempenho (sua seção de desempenho é, na verdade, sobre fluxo de trabalho, nada sobre desempenho), nenhuma outra resposta responde a tudo em um só lugar. É interessante que você tenha escrito a questão da penalidade de desempenho, mas você não a respondeu! Vai saber. - Mark Adler
A propósito, sua discussão de fluxo de trabalho é sobre algo que ninguém faz, que é gravar um arquivo tar em um disco e compactá-lo. tar é sempre usado chamando o programa de compactação diretamente ou diretamente em um pipe para um programa de compactação. - Mark Adler


atuação

A grande diferença é a ordem em que a compactação e o arquivamento são feitos. tar arquivos, em seguida, pode opcionalmente enviar o arquivo para um compressor, e zip constrói o arquivo e compacta os dados do arquivo em blocos de 32 KB à medida que são inseridos no arquivo. Ao dividir os dados do arquivo em pequenos pedaços e compactá-los separadamente, ele permite que você extraia arquivos específicos ou partes de arquivos sem precisar descompactar tudo no arquivo antes dele. Também evita que o compressor crie um dicionário muito grande antes de ser reiniciado. Isso significa que a compactação será mais rápida, mas não resultará em uma taxa tão boa quanto a compactação da coisa toda com um tamanho de dicionário maior.

Você pode visualizá-lo pensando em dois arquivos, nos quais os primeiros 500 bytes do segundo arquivo são os mesmos que os últimos 500 bytes do primeiro arquivo. Com o zip método, o compressor é reiniciado para o segundo arquivo, por isso não se lembra que o primeiro arquivo terminou nos mesmos dados, por isso não é possível remover os dados duplicados do segundo arquivo.

Popularidade

Existem muitos outros formatos que apresentam várias vantagens sobre tar. 7-Zip não armazena permissões de arquivo Unix, mas dar faz e zip pode, e todos os três armazenam um índice, que permite a navegação rápida, a extração de um subconjunto de arquivos e a atualização de arquivos dentro do arquivo. Eles também podem usar CPUs multi-core para compactação.

A razão pela qual todo mundo ainda usa tar é a mesma razão pela qual todos ainda usam o Windows e Instantâneo: as pessoas não gostam de mudanças. Sem um forte motivo para mudar, as pessoas só se atêm ao que sabem. dar não fornece um benefício suficiente para justificar a publicação de arquivos no formato quando a maioria das pessoas já tem tar instalado, e muito poucos sabem sobre dar, a inércia tão simples nos mantém no padrão antigo.


11



O zip pode armazenar e restaurar as permissões do Unix. Os utilitários zip e unzip do InfoZIP normalmente distribuídos com o sistema Unix fazem isso. - Mark Adler
O zip não compacta o arquivo em blocos de 32K. Você está confundindo o tamanho da janela deslizante de 32K com a forma como a compactação é feita. - Mark Adler
O gzip -9 não possui um dicionário de 900 kB. Todos os níveis de gzip usam um dicionário de 32K. Você pode estar pensando em bzip2. - Mark Adler
Tanto desinformação em uma resposta. - Mark Adler
Você precisa fazer correções em sua resposta ou excluir sua resposta. - Mark Adler


O tar foi criado para fazer backup de backups de fidelidade total de seu sistema de arquivos, não apenas para transferir arquivos. Como tal, o utilitário tar é o utilitário mais completo para criar um arquivo que preserva tudo o que é importante sobre a estrutura do sistema de arquivos.

Isso inclui todos esses recursos que estão faltando em uma ou mais ferramentas concorrentes:

  • propriedade de arquivo
  • permissões de arquivo
  • permissões de arquivo menos comuns (por exemplo, setuid, sticky bit)
  • links simbólicos
  • links rígidos
  • entradas de dispositivos (ou seja, caracteres e dispositivos de bloco)
  • arquivos esparsos
  • Entradas ACL (não suportado por todas as versões)
  • atributos estendidos / de usuário (não suportado por todas as versões)
  • Etiquetas SElinux (não suportado por todas as versões)

Ele também tem o --one-file-system opção que é extraordinariamente útil ao fazer backups.

Sempre que um novo recurso é adicionado aos sistemas de arquivos, o suporte é adicionado ao tarprimeiro (ou mesmo exclusivamente). Por isso, continua a ser a maneira mais compatível para salvar arquivos.


6



Essa resposta é a única que faz sentido. Obrigado por postar. - gaborous


Temos muitos arquivos compactados flutuando hoje, MP3s, JPGs, vídeos, arquivos tar.gz, pacotes JAR, RPMs, DEBs e assim por diante. Se você precisar agrupar um monte deles em um único arquivo para transferência, será útil ter um utilitário 'tar' que apenas agrupe os arquivos sem tentar compactá-los.

Não apenas desperdiça tempo e eletricidade para tentar compactar um arquivo compactado, mas geralmente resulta em um arquivo maior do que o original.

Outro uso disso é melhorar as taxas de compressão. Por exemplo, se você 'tar' um pacote de arquivos de log e então gzip o resultado, você provavelmente criará um arquivo menor do que se você compactasse primeiro, então empacotado com 'tar'. E, claro, usando o tar, você pode escolher qualquer algoritmo de compactação desejado e especificar opções para otimizar a compactação para seu caso de uso específico.

Acho que o tar 'é muito relevante hoje e eu prefiro usar o ZIP. Em nosso escritório, todos os usuários do Windows têm o 7-zip instalado, portanto, para nós, os arquivos tar são totalmente compatíveis com plataformas cruzadas.


5



Você praticamente nunca vê descompactado tar arquivos e há uma razão para isso. tar usa pedaços muito grandes, o que significa que você recebe muito preenchimento no final dos arquivos. Para se livrar de todos esses zeros, quase sempre vale a pena apenas usar gzip sem dar um segundo pensamento. - Christian
Uma exceção divertida é que o código-fonte do gzip está disponível como um tar nu, por razões óbvias. - Mark Adler