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

209

Sei que isso tarfoi feito para arquivos de fita antigamente, mas hoje temos formatos de arquivos que agregam arquivos e executam compactação no mesmo formato de arquivo lógico.

Questões:

  • Existe uma penalidade de desempenho durante os estágios de agregação / compactação / descompactação pelo uso tarencapsulado gzipou bzip2, quando comparado ao uso de um formato de arquivo que agrega e compacta na mesma estrutura de dados? Suponha que o tempo de execução do compressor que está sendo comparado seja idêntico (por exemplo, gzip e Deflate são semelhantes).

  • Existem recursos do tarformato de arquivo que outros formatos, como .7ze .zipnão possuem?

  • Desde taré tal um formato de arquivo de idade, e formatos de arquivo mais recentes existem hoje, por que é tar(seja encapsulado em gzip, bzip2ou mesmo o novo xz) ainda tão amplamente utilizada hoje em GNU / Linux, Android, BSD e outros tais sistemas operacionais UNIX, para o arquivo transferências, fonte do programa e downloads binários, e às vezes até como um formato de gerenciador de pacotes?

MarcusJ
fonte
33
Não concordo que "perca tempo". Se você quer dizer desempenho, não há penalidade de desempenho real para o alcatrão, pois o formato é muito eficiente. Se você quer dizer que desperdiça o seu tempo, eu não vejo como tar xvzfé mais difícil do que 7z -x...
allquixotic
41
Ele parece estar lamentando o fato de o tar não armazenar um catálogo no início, portanto, as ferramentas de compactação da interface do usuário que desejam listar o conteúdo antes da extração precisam descompactar o tar inteiro apenas para listar o conteúdo e descompactá-lo novamente ao extrair. .
21813 psusi #
10
@ MarcusJ: você acha que o 7z sabe de alguma forma magicamente onde cada arquivo começa em um arquivo? Além disso, os algoritmos de compactação comuns (gzip, bzip2) funcionam com o streaming do conteúdo: não é necessário concluir 100% do primeiro estágio antes do próximo.
souser12345
11
Além disso, no @MarcusJ, você parece confundir duas coisas diferentes: quando o fizer tar xvzf, os dados não compactados não serão gravados no disco rígido em .tarformato! Você está certo que, se você executasse gunzip blah.tar.gze tar xf blah.targravasse os dados no disco duas vezes (uma vez como .tar e novamente como arquivos no sistema de arquivos), mas ninguém realmente faz dessa maneira. Ele tar xzfusa um Pipe UNIX (basicamente uma cópia de memória) para transferir os dados não compactados de gzip(ou qualquer compressor) para tar, para que os dados não sejam gravados no disco no .tarformato.
allquixotic
14
Uma coisa que eu sei é que tar(especialmente comprimido) comporta-se muito quando se trata de corrupção de dados. Dados pequena redundância / recuperação adicionadas por formatos modernos vale ouro
PPC

Respostas:

178

Parte 1: Desempenho

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

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

A maneira como você criaria isso, se fosse para arquivamento e compactação separadamente, seria:

tar cf blah.tar files ...

Isso resultaria em blah.taruma mera agregação da files ...forma não compactada.

Então você faria

gzip blah.tar

Isso lê o conteúdo blah.tardo disco, compacta-o através do algoritmo de compressão gzip, grava o conteúdo e blah.tar.gz, em seguida, desvincula (exclui) o arquivo blah.tar.

Agora, vamos descomprimir!

Caminho 1

Você tem blah.tar.gz, de um jeito ou de outro.

Você decide executar:

gunzip blah.tar.gz

Isso vai

  • LEIA o conteúdo de dados compactados de 1 GB de blah.tar.gz.
  • PROCESSE os dados compactados através do gzipdescompactador na memória.
  • À medida que o buffer de memória se enche de "um bloco" de dados, ESCREVA os dados não compactados no arquivo blah.tarem disco e repita até que todos os dados compactados sejam lidos.
  • Desvincule (exclua) o arquivo blah.tar.gz.

Agora, você tem blah.tarno disco, que não é compactado, mas contém um ou mais arquivos, 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 blah.tare as tarestruturas 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 as informações da estrutura de dados / metadados na criação de novos arquivos e diretórios no disco, conforme apropriado, ou reescrever os arquivos e diretórios existentes com novos conteúdos de dados.

O total de dados que lemos do disco nesse processo foi de 1 GB (para gunzip) + 2 GB (para tar) = 3 GB.

O total de dados que gravamos no 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 um jeito ou de outro.

Você decide executar:

tar xvzf blah.tar.gz

Isso vai

  • LEIA o conteúdo de dados compactados de 1 GB blah.tar.gzna memória, um bloco de cada vez.
  • PROCESSE os dados compactados através do gzipdescompactador na memória.
  • À medida que o buffer de memória é preenchido, ele direciona esses dados, na memória, para o taranalisador de formato de arquivo, que lê as informações sobre metadados etc. e os dados do arquivo não compactado.
  • À medida que o buffer de memória é preenchido no taranalisador de arquivos, ele grava os dados não compactados no disco, criando arquivos e diretórios e preenchendo-os com o conteúdo não compactado.

O total de dados que lemos do disco nesse processo foi de 1 GB de dados compactados, ponto final.

O total de dados que gravamos no 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 disco I / O no Caminho 2 é idêntico ao disco I / O realizadas por, digamos, as Zipou 7-Zip programas, ajuste para quaisquer diferenças na taxa de compressão.

E se a taxa de compressão é sua preocupação, use o Xzcompressor para encapsular tare você terá o arquivo TAR do LZMA2 , que é tão eficiente quanto o algoritmo mais avançado disponível para o 7-Zip :-)

Parte 2: Recursos

tar armazena permissões do Unix em seus metadados de arquivo e é muito conhecido e testado para compactar com êxito um diretório com todos os tipos de permissões diferentes, links simbólicos, etc. Há mais do que algumas instâncias em que é necessário enviar vários arquivos em um único arquivo ou fluxo, mas não necessariamente o compacta (embora a compactação seja útil e frequentemente usada).

Parte 3: Compatibilidade

Muitas ferramentas são distribuídas na forma de origem ou binária como .tar.gz ou .tar.bz2, porque é um formato de arquivo com "menor denominador comum": assim como a maioria dos usuários do Windows tem 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 importando a idade ou o tamanho reduzido. Até os firmwares Android têm acesso a essas ferramentas.

Novos projetos voltados para o público que executa distribuições modernas podem muito bem distribuir em um formato mais moderno, como .tar.xz (usando o formato de compactação Xz (LZMA), que compacta melhor que gzip ou bzip2) ou .7z, que é semelhante a os formatos de arquivo ZIP ou RAR , na medida em que comprime e especifica um layout para encapsular vários arquivos em um único arquivo.

Você não vê o .7z usado com mais frequência pelo mesmo motivo que a música não é vendida em lojas de download online em novos formatos, como o Opus , ou vídeo no WebM . Compatibilidade com pessoas que executam sistemas antigos ou muito básicos.

allquixotic
fonte
Parabéns pela ótima resposta, com todo o conteúdo separado em três cabeçalhos distintos.
JFW 15/03
2
"Parte 3: Compatibilidade" parece ter sido copiado da resposta de @ Kruug.
titaniumdecoy
23
@titaniumdecoy Você já reparou que era totalmente quixotesco que originalmente escreveu essa parte e a editou na resposta de Kruug?
slhck
2
Obrigado por apontar isso, eu não percebi. No entanto, me parece um pouco tolo ter um bloco de texto idêntico em duas respostas diferentes nesta página.
titaniumdecoy
11
Isso responde por que tarse encaixa no ecossistema de arquivamento (ou seja, para agregar arquivos, fornecendo um aumento de desempenho e alguns outros benefícios, como salvar permissões), mas não aborda por que alternativas modernas, como darnão são usadas no local. Em outras palavras, esta resposta justifica o uso de agregadores de arquivos, mas não do tarsoftware em si.
gaborous
101

Isso foi respondido no Stack Overflow .

O bzip e o gzip funcionam em arquivos únicos, não em grupos de arquivos. Zip antigo simples (e pkzip) operam em grupos de arquivos e têm o conceito de arquivamento incorporado.

A filosofia * nix é uma das pequenas ferramentas que executam tarefas específicas muito bem e podem ser encadeadas. É por isso que aqui existem duas ferramentas que possuem tarefas específicas e foram projetadas para se encaixar bem. Isso também significa que você pode usar o tar para agrupar arquivos e, em seguida, pode escolher uma ferramenta de compactação (bzip, gzip, etc.).

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

Novos projetos direcionados ao público executando distribuições modernas podem muito bem distribuir em um formato mais moderno, como .tar.xz(usando o formato de compactação Xz ( LZMA ), que compacta melhor que gzip ou bzip2) ou .7z, que é semelhante ao ZIP ou RAR formatos de arquivo, pois comprime e especifica um layout para encapsular vários arquivos em um único arquivo.

Você não vê o .7z usado com mais frequência pelo mesmo motivo que a música não é vendida em lojas de download online em novos formatos, como o Opus , ou vídeo no WebM . A compatibilidade com pessoas executando sistemas antigos ou muito básicos é importante.

Kruug
fonte
7
Olá @Kruug, editei sua postagem apenas para fornecer uma perspectiva prática sobre por que as pessoas ainda escolhem usar esses formatos quando têm a opção de usar outra coisa. 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 uma visão completa. Sinta-se livre para editar a minha edição se você quiser :)
allquixotic
5
@allquixotic inception alguém? Editar o editar de e edição para que você possa editar uma edição ...
SnakeDoc
21
Essa resposta é definitivamente um caso de "Às vezes sou surpreendido por votos não merecidos". Ele não aborda a questão central da questão, que consiste em listar o conteúdo do alcatrão compactado e nem é uma resposta original!
Ярослав Рахматуллин
5
-1 por grande justiça. isso deveria ter sido um comentário.
Wim
6
Não compro o argumento legado / menor denominador comum; Lembro-me de que, em novos sistemas (sun), é necessário fazer o download do gzip / gunzip (do sunfreeware) apenas para instalar outro software empacotado tar.gz (mais o gnu tar, já que o alcatrão do sol é uma droga). Para o denominador legado / baixo-comum, você tinha tar.Z(comprimir / descompactar). A progressão dos utilitários tem sido um fluxo constante (sem trocadilhos) de alterações e melhorias: Z => zip => gz => bz2 => 7z => xz (ou na ordem que você preferir). Quanto à função do tar, alguns utilitários descompactam apenas e ainda exigem que o tar agrupe hierarquias de arquivos.
michael
63

O Tar possui um rico conjunto de operações e modificadores que sabem tudo sobre os sistemas de arquivos Unix. Ele conhece as permissões do Unix, os diferentes horários associados aos arquivos, os hard links, os softlinks (e a possibilidade de os links simbólicos introduzirem ciclos no gráfico do sistema de arquivos) e permite especificar várias maneiras diferentes de gerenciar todos esses dados. .

  • Deseja que os dados extraídos preservem os tempos de acesso ao arquivo? Tar pode fazer isso. Para preservar permissões? Tar pode fazer isso.

  • Deseja preservar links simbólicos como links simbólicos? O Tar faz isso por padrão. Deseja copiar o destino? Tar pode fazer isso.

  • Deseja ter certeza de que os dados com link físico são armazenados apenas uma vez (ou seja, para fazer a coisa certa)? Tar faz isso.

  • Deseja lidar bem com arquivos esparsos? Tar pode fazer isso.

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

  • Deseja gravar ou recuperar de / para um dispositivo bruto? O formato do Tar lida com isso.

  • Deseja 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.

  • Deseja ter certeza de que não arquiva em mais de um sistema de arquivos? Tar pode fazer isso.

  • Deseja pegar apenas os arquivos mais recentes que o seu último backup? Tar pode fazer isso.

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

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

Tar vem evoluindo para lidar com muitos casos de uso há décadas e realmente sabe muito sobre o que as pessoas querem fazer com os sistemas de arquivos Unix.

dmckee
fonte
12
Você não precisa do tar GNU para usar um compressor arbitrário: basta dizer ao tar para gravar o arquivo no stdout f -e encaminhá-lo ao compressor.
Ilmari Karonen
3
"Deseja dados não compactados (por quê?)?" Eu uso tarmuito frequentemente para copiar uma árvore do sistema de arquivos de um lugar para outro e preservar permissões etc., e a compactação nesse caso requer apenas ciclos extras da CPU. Por exemplo tar cf - * | tar xf - -C /somewhere.
Steve
11
Além disso, você desejaria um arquivo .tar quando o sistema de arquivos de destino executar a desduplicação. Criar arquivos compactados em um sistema de arquivos que executa a deduplicaçã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.000 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 em zram, e sistemas de arquivos de compressão transparentes como NTFS, ZFS, Btrfs ... por isso às vezes é realmente mais rápido do que para comprimir uma vez que a quantidade de IO de disco é bastante reduzido
phuclv
30

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

Razões para usar um arquivador

Um motivo para usar o arquivamento sem compactação é, por exemplo, se um monte 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 as coisas consideravelmente. Se eu souber que os arquivos não podem ser compactados ou se o SSH estiver configurado com compactação, poderá economizar um tempo considerável da CPU. Certamente, pode-se usar uma ferramenta de compactação mais moderna com uma função de arquivamento e desativar a compactação. A vantagem taré que posso esperar que esteja disponível em todos os sistemas.

Razões para usar um arquivador com compressão gzip

Uma razão que eu uso tarcom gzipé: velocidade! Se eu quiser transferir alguns GiB de arquivos de texto de um lugar para outro, não me importo em extrair os últimos bytes, pois a compactação é usada apenas para trânsito, não para armazenamento a longo prazo. Nesses casos, eu uso gzip, o que não maximiza a CPU (em contraste com o 7-Zip , por exemplo), o que significa que estou ligado à E / S novamente e não à CPU. E novamente: gzippode ser considerado disponível em qualquer lugar.

Razões para usar tarem favor de scp, rsync, etc.

É excelente scpse você tiver muitos arquivos pequenos para copiar (por exemplo, diretórios de correio com centenas de milhares de arquivos). rsync, por incrível que seja, pode não estar disponível em qualquer lugar. Além disso, rsyncapenas compensa se parte dos arquivos - ou uma versão mais antiga - já estiver presente no destino. A cópia inicial taré a mais rápida, com ou sem compactação, dependendo dos dados reais.

Marco
fonte
11
Mas se você estiver arquivando, por que não compactar também? Ok, sim, pode economizar tempo para arquivos que não são facilmente compactados, mas os arquivadores provavelmente devem saber que a música, por exemplo, não é muito compressível, exceto os cabeçalhos.
MarcusJ
2
Talvez você não precise, ou seu conteúdo pode não ser compactável.
Hasturkun
4
Por motivos de desempenho, geralmente é mais fácil usar a agregação de arquivos não compactados ao enviar dados por links de rede de largura de banda muito alta que excedem a velocidade com que 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 ainda menos tempo de CPU para trabalhar.
allquixotic
3
Não só isso está acelerando as coisas, mas também permite preservar propriedade do arquivo, a hora e os atributos (se os privilégios de usuário permitirem)
Andre Holzner
3
@AndreHolzner Right. Eu costumo fazer tar cf - . | (cd ~/somewhere; tar xvf -). É realmente útil não ter que esperar até que o índice central seja gravado (como, por exemplo, em um arquivo zip).
user239558
24

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

Preciso descompactar um arquivo disponível na internet. Com um zipou outro rarformato, preciso baixá-lo primeiro e depois descompactá-lo. Com tar.{gz,bz2,xz}eu posso baixar e descompactar na mesma etapa, sem a necessidade de ter o arquivo compactado fisicamente em disco:

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

Isso deixará apenas os arquivos descompactados no meu disco e acelerará todo o processo, porque não tenho tempo para baixar primeiro o arquivo inteiro e, após o término do download, descompacte-o. Em vez disso, estou descompactando-o durante o download. Você não pode fazer isso com zipou rararquivos.

Carlos Campderrós
fonte
2
Eu não conheço o rar (é um programa terrível que parece ter se tornado popular entre os piratas devido à sua capacidade de se dividir em vários arquivos menores), mas você pode transmitir o zip muito bem. A página do manual até menciona isso. Ele também tem a vantagem de poder extrair ou atualizar arquivos do meio de um arquivo grande com eficiência, embora o tar tenda a obter uma compressão um pouco melhor. Compactação vs. acesso aleatório é uma desvantagem.
psusi
3
@psusi incorreto. Você pode fazer hacks como este , mas o que ele faz é baixar todos os arquivos na memória e, em seguida, descompactá-lo, em vez de descomprimir durante o download. E funzipapenas extrai o primeiro arquivo no arquivo zip, não todos.
Carlos Campderrós 14/03
2
@Stu só para esclarecer, não é um problema, é apenas otimizar o seu tempo (Eu não me importo sobre o espaço se é isso que você pensou)
Carlos Campderrós
11
Ambos os lados trabalhar: Você pode tar de um lado e untar na outra, também:tar zc /some/folder | ssh user@host "cd /other/folder && tar zx"
Carlos Campderrós
11
@psusi, como me lembro dos velhos tempos, ao usar o pkzip para armazenar arquivos em vários disquetes, o catálogo da loja zip no final do arquivo morto. Ele sempre solicita o último disquete para iniciar a extração ou mostrar o catálogo. Então, en.wikipedia.org/wiki/File:ZIP-64_Internal_Layout.svg
Mikhail Moskalev 15/13
13

Existem várias razões para se manter no Tar (GNU).

Isto é:

  • GPL licenciado
  • bom no sentido da filosofia Unix
    • ferramenta de uso único, capaz de executar várias tarefas
  • bem documentado e possui muitos recursos confiáveis
  • compatível com vários algoritmos de compactação
  • fácil de usar e as pessoas desenvolveram hábitos com ele
  • amplamente disponível
  • Sinto-me quente e confuso por dentro ao usar o software iniciado pelo RMS (excluindo o Emacs )

Se a sua carne em particular é a necessidade de "descomprimir" um tarball antes de poder ler o conteúdo, provavelmente você está certo. WinRAR e 7-Zip fazem isso automaticamente. No entanto, existem soluções simples para esse problema, como documentar o conteúdo de um arquivo morto de forma descompactada.

Ярослав Рахматуллин
fonte
11
É um software livre - assim como muitos deles. É bom no que faz - Dificilmente comparado a outras coisas. Está bem documentado e tem muitos recursos. - Os recursos são dificilmente usados ​​e detestadamente fáceis de usar. Ele suporta vários algoritmos de compressão - não tantos como alguns outros
Griffin
4
os Deuses Unix o criaram - portanto, devemos usá-lo!
SnakeDoc 14/03/2019
28
O Tar também armazena permissões UNIX nativamente e é muito conhecido e testado. Existem mais de algumas instâncias em que é necessário enviar vários arquivos para um único arquivo ou fluxo, mas não necessariamente compactá-lo.
LawrenceC
3
Felizmente, o tar não se limita apenas às versões GNU. Enquanto o GNU tar é certamente um bom software, os front-ends relacionados à libarchive + são muito mais rápidos e fáceis de incorporar em outros projetos de software. Você pode argumentar a favor do alcatrão sem transformá-lo em uma luta de licenciamento.
Lucas Holt
11
Eu não sou sarcástico. Gosto do RMS e da maneira como ele realiza suas crenças.
Ярослав Рахматуллин
11

Formatos de arquivo como .zip requerem que o software leia primeiro o final do arquivo, leia um catálogo de nomes de arquivos. Por outro lado, o tar armazena essas informações no fluxo compactado.

A vantagem da maneira tar é que você pode descompactar dados enquanto os lê de um tubo não procurável, como um soquete de rede.

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

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

xorsyst
fonte
5
Não, você pode ler e gravar arquivos zip como um fluxo de e para um canal.
Mark Adler
Isso pode ser específico da implementação, mas certamente não é suportado pelo pkzip original.
xorsyst
11
Sim, o software precisa ser escrito para suportá-lo. O formato zip o suporta completamente, com descritores de dados que podem acompanhar os dados compactados com os comprimentos e CRC.
Mark Adler
@ MarkAdler, que software? O Infozip não suporta descompactação de um tubo.
Psusi
11

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

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

Não. De fato, como tar e gzip são geralmente dois processos, você ainda recebe uma pequena vantagem de velocidade de vários núcleos que um arquivador como o zip do Info-ZIP não fornece. Em termos de taxa de compactação, tar + gzip geralmente se saem melhor do que zip com deflate, pois o primeiro pode se beneficiar da correlação entre arquivos, enquanto o último compacta os arquivos separadamente. Esse benefício de compactação se traduz em um benefício de velocidade na extração, pois um arquivo compactado descompacta em menos tempo.

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

Sim, o tar foi projetado para o Unix e evoluiu ao longo dos anos para ser capaz de registrar e restaurar exatamente cada cantinho dos sistemas de arquivos Unix, até mesmo o sistema de arquivos Mac OS X Unix mais exigente e irritante. O zip pode 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 têm conhecimento ou são capazes de restaurar links físicos.

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

Muitas outras boas respostas aqui para isso. O melhor é que ele funciona e você pode continuar atualizando-o para melhores formatos de compactação (por exemplo, xz) e ainda usar o mesmo formato tar e até o mesmo utilitário tar compilado. Se você quiser apenas empacotar um monte de coisas e depois descompactar tudo do outro lado, há poucas razões para usar qualquer coisa, exceto um dos mais antigos, mais completos e mais depurados softwares existentes.

Se você deseja acesso aleatório, atualizações parciais ou outras coisas que precisam lidar com o conteúdo aos poucos, ou deseja descobrir o que está nele sem ler a coisa toda, use um formato diferente.

Mark Adler
fonte
CW significa Wiki da Comunidade . Veja também O que são postagens no "Community Wiki"? .
Ctype.h
Eu acho que é CW porque a pergunta tem mais de 15 respostas. Quando você postou esta resposta, porque é o dia 15, a pergunta e todas as respostas foram marcadas como CW.
Ctype.h
Não vejo como essa resposta diz algo que nenhuma das outras respostas faz, além de citar diretamente as perguntas (que eu escrevi, BTW, porque a revisão original da pergunta foi horrível o suficiente para ser fechada como NARQ). Boa tentativa embora.
allquixotic
Ok Tudo o que você gostaria de pensar está bem. Sua resposta e nenhuma outra resposta parecem abordar se existe uma penalidade de desempenho. Sua resposta não aborda a notável diferença de compactação, embora outras o façam. Como a sua não aborda realmente o desempenho (sua seção de desempenho é sobre fluxo de trabalho, nada sobre desempenho), nenhuma outra resposta responde tudo em um só lugar. É interessante que você escreveu a questão da penalidade de desempenho, mas não a respondeu! Vai saber.
Mark Adler
A propósito, sua discussão sobre o fluxo de trabalho é sobre algo que ninguém faz, que é gravar um arquivo tar em um disco e depois compactá-lo. tar é sempre usado chamando o programa de compactação diretamente ou diretamente em um canal para um programa de compactação.
Mark Adler
11

atuação

A grande diferença é a ordem em que a compactação e o arquivamento são feitos nos tararquivos . , Então, opcionalmente, é possível enviar o arquivo para um compressor, zipconstruir o arquivo e compactar os dados do arquivo em pedaços 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 extrair arquivos ou partes de arquivos específicos sem ter que descomprimir tudo no arquivo antes dele. Também evita que o compressor construa um dicionário muito grande antes de ser reiniciado. Isso significa que a compactação será mais rápida, mas não fornecerá uma proporção tão boa quanto compactar tudo com um tamanho de dicionário maior.

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

Popularidade

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

O motivo pelo qual todos ainda usam taré o mesmo pelo qual todos ainda usam o Windows e o Flash : as pessoas não gostam de mudanças. Sem uma forte razão para mudar, as pessoas seguem o que sabem. darnão oferece um benefício suficiente para justificar a publicação de arquivos no formato quando a maioria das pessoas já tarinstalou, e muito poucas sabem dar, portanto, a inércia simples mantém o padrão antigo.

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

O Tar foi criado para fazer backups de fidelidade total do 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 na estrutura do sistema de arquivos.

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

  • propriedade do arquivo
  • permissões de arquivo
  • permissões de arquivo menos comuns (por exemplo, setuid, bit pegajoso)
  • links simbólicos
  • links físicos
  • entradas de dispositivos (isto é, dispositivos de caracteres e blocos)
  • arquivos esparsos
  • Entradas ACL ( não suportadas por todas as versões )
  • atributos estendidos / usuário ( não suportados por todas as versões )
  • Etiquetas SElinux ( não suportadas por todas as versões )

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

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

tylerl
fonte
Essa resposta é a única que faz sentido. Obrigado por publicá-lo.
gaborous
5

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

Não apenas perde tempo e eletricidade para tentar compactar um arquivo compactado, mas também resulta em um arquivo maior que o original.

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

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

Michael Dillon
fonte
Você praticamente nunca vê tararquivos descompactados e há uma razão para isso. tarusa pedaços muito grandes, o que significa que você recebe muitos preenchimentos no final dos arquivos. Para se livrar de todos esses zeros, quase sempre vale a pena usar apenas gzipsem pensar duas vezes.
Christian
Uma exceção divertida é que o código-fonte gzip está disponível como um tar puro, por razões óbvias.
Mark Adler
4

Talvez devêssemos nos perguntar por que esses "novos" formatos de arquivo que executam compactação e agregação (e eu acrescentaria criptografia) não foram criados no tar desde o início, em vez de ferramentas completamente diferentes.

Pelo que entendi, existem razões históricas (relacionadas ao histórico do SO, "proteção" de patentes, capacidade do fornecedor de software de vender ferramentas etc.).

Agora, como outra resposta apontou, ainda hoje o alcatrão não é claramente inferior a outras soluções e pode ser melhor em outros aspectos, como capacidade de trabalhar em fluxos ou gerenciamento de direitos Unix.

Se você ler o artigo da Wikipedia sobre alcatrão, poderá ver outro fato interessante. O artigo reconhece algumas deficiências do alcatrão ... mas não sugere o uso de zip (o formato zip realmente não resolve essas deficiências), mas o DAR.

Terminarei com um toque pessoal. Algumas vezes atrás, tive que criar um formato de arquivo para armazenar dados criptografados. Usar o tar como base foi útil (outros fizeram a mesma escolha, por exemplo, tar é o formato de agregação interno para pacotes .deb). Era óbvio para mim que tentar compactar dados após a criptografia era totalmente inútil, eu tinha que executar a compactação como uma etapa independente antes da criptografia e também não estava pronto para usar a criptografia zip (eu queria duas criptografias com chaves pública e privada) . Usando o alcatrão, funcionou como uma brisa.

kriss
fonte
3

Estou surpreso que ninguém tenha mencionado isso, mas uma das razões - não é realmente uma vantagem, mas uma necessidade - é a compatibilidade com versões anteriores. Há muitos sistemas executando software há décadas que podem exigir tararquivamento. Não é rentável contratar alguém para "consertar" todos os sistemas antigos.

Keltari
fonte
3

tar é UNIX como UNIX é tar

Na minha opinião, o motivo de ainda usar tarhoje é que é um dos casos (provavelmente raros) em que a abordagem UNIX a tornou perfeitamente correta desde o início.

Examinando mais de perto os estágios envolvidos na criação de arquivos, espero que você concorde que a maneira como a separação de tarefas diferentes ocorre aqui é a filosofia do UNIX da melhor forma possível:

  • uma ferramenta ( tarpara dar um nome aqui) especializada na transformação de qualquer seleção de arquivos, diretórios e links simbólicos, incluindo todos os metadados relevantes, como registros de data e hora, proprietários e permissões em um fluxo de bytes.

  • e apenas outra ferramenta arbitrariamente intercambiável ( gzip bz2 xzpara citar apenas algumas opções) que transforma qualquer fluxo de entrada de bytes em outro (espero) menor fluxo de saída.

O uso dessa abordagem e oferece vários benefícios ao usuário e ao desenvolvedor:

  • extensibilidade Permitindo a par tarcom qualquer algoritmo de compressão já existente ou qualquer algoritmo de compressão, mas ainda a ser desenvolvido sem ter que mudar alguma coisa sobre o funcionamento interno de tarem tudo.

    Assim que a nova ferramenta de compressão "hyper-zip-utra" ou whater for lançada, você já estará pronto para usá-la, abraçando seu novo servidor com todo o poder de tar.

  • a estabilidade tar tem sido muito utilizada desde o início dos anos 80, testada e operada em inúmeros sistemas operacionais e máquinas.

    Impedir a necessidade de reinventar a roda na implementação de propriedade de armazenamento, permissões, carimbos de data e hora e assim por diante para cada nova ferramenta de arquivamento não apenas economiza muito tempo (de outra forma desnecessariamente gasto) no desenvolvimento, mas também garante a mesma confiabilidade para cada nova aplicação.

  • consistência A interface do usuário permanece a mesma o tempo todo.

    Não há necessidade de lembrar que para restaurar as permissões usando a ferramenta A, você precisa passar a opção --i-hope-you-rember-this-onee, usando a ferramenta B, a --this-time-its-another-one ferramenta C é `- - espero que você não tente usar a ferramenta como opção.

    Considerando que, ao utilizar a ferramenta D, você realmente teria estragado tudo se não usasse --if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now.

Mikyra
fonte
3

Muitas respostas boas, mas todas negligenciam um fato importante. O Tar possui um ecossistema bem estabelecido de usuários e desenvolvedores no mundo semelhante ao Unix. Isso mantém o ritmo, assim como o ZIP é mantido pelo ecossistema DOS / Windows. Ter esse ecossistema é o que sustenta uma tecnologia, não suas vantagens técnicas.

Isaac Rabinovitch
fonte
Um comentário muito bom, eu nem pensei nisso, e esse é realmente um bom ponto a se fazer.
MarcusJ
3

A razão é "entrincheiramento na cultura". Existem inúmeras pessoas como eu, cujos olhos ficam vidrados se for solicitado que processem algo além de um arquivo compactado de alcatrão ou o ZIP ocasional, se vier do mundo do Windows.

Eu não quero ouvir sobre o 7-Zip, RAR ou qualquer outra coisa. Se eu tiver que instalar um programa para descompactar seu arquivo, isso é trabalho. Farei isso se resultar em meu pagamento ou se o conteúdo é algo que "devo ter" e não está disponível de nenhuma outra maneira.

Uma vantagem do alcatrão é que, se você enviar um tarball para alguém, ele será instantaneamente reconhecido. O destinatário pode digitar os comandos de extração usando memória muscular.

A verdadeira questão é: por que algumas pessoas estão tão obcecadas em economizar mais um byte de espaço que pedem a todos que percam tempo instalando algum utilitário exótico e aprendendo a usá-lo? E há os usos estúpidos de formatos exóticos de compressão e arquivo. Um vídeo H.264 com som AAC realmente precisa ser inserido no RAR de várias partes?

O formato tar pode ser antigo, mas armazena tudo o que é relevante: conteúdo do arquivo, caminhos, registros de data e hora, permissões e propriedades. Ele armazena não apenas links simbólicos, mas pode preservar a estrutura do link físico. Ele armazena arquivos especiais também, para que um arquivo de fita possa ser usado para coisas como um /devdiretório secundário usado durante a inicialização. Você pode montar uma distribuição Linux cujo formato de pacote binário não consiste em nada, mas em tarballs descompactados em relação à raiz do sistema de arquivos.

Kaz
fonte
Re "Tão obcecado" ... imagine que você está preso na zona de guerra com um único laptop reforçado, e o disco rígido 20G de tamanho pequeno está quase cheio, talvez um Gig deixado, e ouvindo os tiros de longe, você realmente gostaria de navegar um manual em PDF de 100 MB que mostra como reparar o jipe, mas o arquivo está em um arquivo .tgz de 2 GB. E o laptop executa um sistema operacional proprietário de fonte fechada e estranho, e você não tem acesso root para excluir arquivos do sistema, não que seja óbvio como excluir o 4G + sem interromper o dearchiver ou o visualizador de PDF. Se você poderia apenas extrair o arquivo de 100MB ...
AGC
2

Respondendo diretamente às perguntas específicas que você fez:

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

Há uma melhoria específica de desempenho, em casos gerais, usando tarespecialmente com a biblioteca de compactação incorporada (as linhas de comando tar xvzfou tar xvjfstyle, em que uma biblioteca de compactação é usada em vez de um segundo processo). Isso vem de duas causas principais:

  • ao processar um grande número de arquivos relativamente pequenos, especialmente aqueles comumente usados ​​na distribuição de software, há alta redundância. A compactação em muitos arquivos resulta em uma compactação geral mais alta do que na compactação de arquivos individuais. E o "dicionário" é calculado uma vez para cada parte da entrada, não para cada arquivo.

  • tarentende sistemas de arquivos. Ele foi projetado para salvar e restaurar um sistema operacional funcional / viável. Ele capta profundamente exatamente o que é importante em um sistema de arquivos UNIX e captura e restaura fielmente isso. Outras ferramentas ... nem sempre, especialmente a família zip, que é melhor projetada para compartilhar arquivos entre uma família de sistemas operacionais, em que o documento é importante, e não uma cópia fiel do sistema operacional.

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

Manipulação de arquivos esparsos. Algumas das bibliotecas diretas de banco de dados dependem de arquivos esparsos - arquivos em que os dados são nominalmente GB, mas os dados reais gravados e armazenados são muito, muito menos, e apenas alguns blocos de disco são realmente usados. Se você usar uma ferramenta inconsciente, ao descomprimir, você terá um consumo massivo de blocos de disco, todos contendo zeros. Transformar isso de volta em um arquivo esparso é ... doloroso. Se você ainda tem espaço para fazê-lo. Você precisa de uma ferramenta que capte o que é um arquivo esparso e respeite isso.

Metadados. O Unix evoluiu algumas coisas estranhas ao longo dos anos. Nomes de arquivos de 14 caracteres, nomes de arquivos longos, links sym links, bits fixos, bits de superusuário, permissões de acesso de grupo herdadas, etc. Tar os compreende e os reproduz. Ferramentas de compartilhamento de arquivos ... nem tanto. Muitas pessoas não usam os links da maneira que poderiam ... Se você já trabalhou com software que usa links e depois usou uma ferramenta inconsciente para fazer backup e restaurar, agora você tem várias funções independentes. arquivos, em vez de um único arquivo com muitos nomes. Dor. Seu software falha e você tem um inchaço no disco.

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

tartrabalho. Ele faz o trabalho para o qual foi projetado, também. Houve outras substituições elogiado ( cpio, pax, etc, etc). Mas o tar é instalado em praticamente tudo, e as bibliotecas de compactação que ele usa também são muito comuns por outros motivos. Nada mais apareceu além do que o alcatrão faz. Sem vantagens claras e muito uso e conhecimento incorporados na comunidade, não haverá substituição. O alcatrão teve muito uso ao longo dos anos. Se recebermos grandes mudanças na maneira como pensamos em sistemas de arquivos, ou arquivos sem texto se tornarem o caminho para a transferência de código (atualmente não é possível imaginar como, mas ignorar isso ...), você poderá encontrar outra ferramenta. Mas esse não seria o tipo de sistema operacional que usamos agora. Seria algo diferente, organizado de forma diferente e precisaria de suas próprias ferramentas.

A pergunta mais importante, eu acho, que você não perguntou, é para qual emprego o 'tar' é inadequado.

tarcom compressão é frágil. Você precisa de todo o arquivo, pouco a pouco. Na minha experiência, não é resiliente. Eu tive erros de bit único, resultando em arquivos com várias partes se tornando inutilizáveis. Não introduz redundância para se proteger contra erros (o que anularia uma das perguntas que você fez sobre compactação de dados). Se houver uma possibilidade de corrupção de dados, você deseja verificar erros com redundância para poder reconstruir os dados. Isso significa, por definição, que você não está maximamente compactado. Você não pode ter todos os dados exigidos e carregar seu valor máximo de significado (compactação máxima) e ter todos os dados capazes de perda e recuperação (redundância e correção de erros). Então ... qual é o objetivo do seu arquivo?taré excelente em ambientes de alta confiabilidade e quando o arquivo pode ser reproduzido da fonte novamente. IME, na verdade é pior na coisa original que seus nomes sugerem - arquivamento em fita. Erros de bit único em uma fita (ou pior, erros de bit único em uma cabeça de fita, em que você perde um bit em cada byte de uma fita ou arquivo inteiro) resultam na inutilização dos dados. Com redundância suficiente e detecção e correção de erros, você pode sobreviver a qualquer um desses problemas.

Então ... quanto barulho e corrupção há no ambiente que você está vendo, e a fonte pode ser usada para regenerar um arquivo com falha? A resposta, a partir das pistas que você forneceu, é que o sistema não é barulhento e que a fonte é capaz de regenerar um arquivo morto. Nesse caso, taré adequado.

tarcom compactação também não funciona bem com arquivos pré-compactados. Se você estiver enviando dados já compactados ... use tar, e não se incomode com o estágio de compactação - ele adiciona ciclos de CPU para não fazer muito. Isso significa que você precisa saber o que está enviando e por quê. Se você se importa. Se você não se importa com esses casos especiais, o tar copiará fielmente os dados e a compactação falhará fielmente em fazer muito útil para reduzi-los. Não há grande problema, exceto alguns ciclos de CPU.

JezC
fonte
-3

TAR é Tape Archive. Ele existe há décadas e é amplamente usado e suportado. É um produto maduro e atende às necessidades atuais e legadas.

Edward
fonte