Por que as pessoas usam tarballs?

90

Como um desenvolvedor principalmente do Windows, talvez eu esteja perdendo algo cultural na comunidade Linux, mas isso sempre me confundiu.

Ao baixar algo, os arquivos são primeiro colocados em um .tararquivo e depois compactados . Por que o processo de duas etapas? Não fechando conseguir o arquivo de agrupamento? Existe algum outro benefício que eu não conheço?

Brian Sullivan
fonte
3
Normalmente, você apenas combina compactação e agrupamento de arquivos em um único comando. tar -zcf file.tar.gz alguns nomes de arquivos
Juha Syrjälä
1
Ninguém mencionou que transferir 1.000.000 de arquivos com tamanho de 1 byte é mais caro do que transferir 1 arquivo com 1.000.000 de bytes.
Milo LaMar

Respostas:

137

bzipe gziptrabalhar em arquivos únicos, não em grupos de arquivos. Simplesmente antigo zip(e pkzip) opera em grupos de arquivos e tem o conceito de arquivo embutido.

A filosofia * nix é uma das pequenas ferramentas que realizam trabalhos específicos muito bem e podem ser encadeadas. É por isso que existem duas ferramentas aqui que têm tarefas específicas e foram projetadas para se encaixar bem. Também significa que você pode usar tar a arquivos de grupo e, em seguida, você tem uma escolha de uma ferramenta de compressão ( bzip, gzip, etc).

Stewart Johnson
fonte
2
Respondeu mais rápido e um pouco melhor do que eu - acho que vou voltar ao trabalho!
Harper Shelby de
9
Eu venci você por 4 minutos, e isso é uma eternidade em tempo de estouro de pilha. :-)
Stewart Johnson
1
É importante notar que tar e gzip são úteis por conta própria, e é por isso que estão separados. Com o uso inteligente de tubos, certa vez movi uma pasta de um computador para outro tarando, compactando e enviando por SSH, depois descompactando e descompactando no destino. Um comando, nenhum arquivo temporário.
rmeador
1
Você também pode dizer que eles seguem o que está provado que funciona bem, em vez de mudar as coisas e quebrar a compatibilidade. .tar.gz pode ser feito em uma única etapa independentemente, assim como as chamadas ferramentas e técnicas modernas (por favor, registre o WinZip).
JeeBee
2
Eu não posso acreditar que ninguém editou a questão, ou deixou um comentário mencionando todo o (imo) ponto de usar tararquivos: suporte a permissão do sistema de arquivos Linux . O que aconteceria se você baixasse um pacote Debian, seu gerenciador de pacotes o instalasse, mas nenhum dos executáveis ​​fosse executável? Essa é a verdadeira razão pela qual todo mundo usa tarballs ...;)
JamesTheAwesomeDude
28

Uma distinção importante está na natureza dos dois tipos de arquivos.

Os arquivos TAR são pouco mais que uma concatenação do conteúdo do arquivo com alguns cabeçalhos, enquanto gzip e bzip2 são compressores de fluxo que, em tarballs, são aplicados a toda a concatenação.

Os arquivos ZIP são uma concatenação de arquivos compactados individualmente, com alguns cabeçalhos. Na verdade, o algoritmo DEFLATE é usado por zip e gzip e, com o ajuste binário apropriado, você pode pegar a carga de um fluxo gzip e colocá-la em um arquivo zip com entradas de cabeçalho e dicionário apropriadas.

Isso significa que os dois tipos de arquivos diferentes têm diferentes compensações. Para grandes coleções de pequenos arquivos, TAR seguido por um compressor de fluxo normalmente resultará em uma taxa de compressão mais alta do que ZIP porque o compressor de fluxo terá mais dados para construir suas frequências de dicionário e, portanto, será capaz de espremer mais informações redundantes. Por outro lado, um erro (preservação do comprimento do arquivo) em um arquivo ZIP só corromperá os arquivos cujos dados compactados foram afetados. Normalmente, os compressores de stream não podem se recuperar de forma significativa de erros no meio do stream. Assim, os arquivos ZIP são mais resistentes à corrupção, pois parte do arquivo ainda estará acessível.

Barry Kelly
fonte
Obrigado pela distinção entre zip e tar + gzip!
Lucas,
1
+1 para a distinção entre "compactar um arquivo agregado" e "agregar arquivos compactados".
Jesse Chisholm
A razão para o alcatrão permitir melhores taxas de compressão e o zip ser mais resiliente, por outro lado, é explicado pelo fato de que o alcatrão é um tipo de compressão sólida, enquanto o zip é não sólido.
magnífico
@Barry, para concluir quem ganha? (presumindo que estamos usando sistemas operacionais modernos)
Pacerier
@Pacerier Não acho que haja vitória. Zips são melhores para acesso aleatório e para uso por pessoas no Windows. Tarballs têm maior compatibilidade imediata com Linux e Unix. Tarballs têm compactação um pouco maior, mas você precisa descompactar tudo para acessar qualquer coisa. Ambos suportam algoritmos de compressão arbitrários, mas é muito mais fácil misturar e combinar com tarballs. Dependendo do objetivo, qualquer um poderia ser melhor.
Barry Kelly
26

É estranho que ninguém mais tenha mencionado que as versões modernas do GNU tarpermitem que você comprima enquanto empacota:

tar -czf output.tar.gz directory1 ...

tar -cjf output.tar.bz2 directory2 ...

Você também pode usar o compressor de sua escolha, desde que ele suporte as opções ' -c' (para stdout ou de stdin) e ' -d' (descompactar):

tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...

Isso permitiria a você especificar qualquer compressor alternativo.

[ Adicionado : se você estiver extraindo gzipou bzip2compactando arquivos, o GNU taros detecta automaticamente e executa o programa apropriado. Ou seja, você pode usar:

tar -xf output.tar.gz
tar -xf output.tgz        # A synonym for the .tar.gz extension
tar -xf output.tar.bz2

e estes serão tratados adequadamente. Se você usa um compressor não padrão, precisa especificá-lo ao fazer a extração.]

O motivo da separação é, como na resposta selecionada, a separação de funções. Entre outras coisas, significa que as pessoas podem usar o 'cpio ' programa para empacotar os arquivos (em vez de tar) e, em seguida, usar o compressor de escolha (uma vez, o compressor preferido era pack, mais tarde era compress(que era muito mais eficaz do que pack), e então gzipque correu anéis em torno de seus antecessores, e é totalmente competitivo com zip(que foi portado para Unix, mas não é nativo lá), e agora bzip2que, na minha experiência, geralmente tem uma vantagem de 10-20% sobre gzip.

[ Adicionado : alguém anotou em sua resposta que cpiotem convenções engraçadas. Isso é verdade, mas até que o GNU tarobtivesse as opções relevantes (' -T -'), cpioera o melhor comando quando você não queria arquivar tudo o que estava sob um determinado diretório - você poderia escolher exatamente quais arquivos seriam arquivados. A desvantagem decpio disso é que você não apenas pode escolher os arquivos - você tem que escolhê-los. Ainda há um lugar onde cpiopontua; ele pode fazer uma cópia in-situ de uma hierarquia de diretório para outra sem nenhum armazenamento intermediário:

cd /old/location; find . -depth -print | cpio -pvdumB /new/place

A propósito, a -depthopção ' ' ativada findé importante neste contexto - ela copia o conteúdo dos diretórios antes de definir as permissões nos próprios diretórios. Quando verifiquei o comando antes de inserir o acréscimo a esta resposta, copiei alguns diretórios somente leitura (permissão 555); quando fui deletar a cópia, tive que relaxar as permissões nos diretórios antes que ' rm -fr /new/place' pudesse terminar. Sem a -depthopção, o cpiocomando teria falhado. Só me lembrei disso quando fui fazer a limpeza - a fórmula citada é tão automática para mim (principalmente em virtude de muitas repetições ao longo de muitos anos). ]

Jonathan Leffler
fonte
Um formato ZIP expandido pode acomodar compressores de fluxo de plug-in tanto quanto TAR, mas sem um protocolo IPC adequado, provavelmente seria mais lento devido à execução excessiva de subprocessos.
Barry Kelly
meu comando goto: tar -xfvz tarpkg.tar.gz (substitua o z por aj para arquivos compactados bz2)
Bryan Rehbein
1
@Redbeard: tar detecta automaticamente gzip e bzip2 na extração - para criar, você precisa dizer a ele o que fazer, mas eu apenas uso -xf (ou -xvf) e o nome do arquivo tar.
Jonathan Leffler
15

O engraçado é que você pode obter comportamentos não previstos pelos criadores de tare gzip. Por exemplo, você não pode apenas compactar um arquivo tar, você também pode compactar arquivos compactados com tar, para produzir um files.gz.tar(isso seria tecnicamente mais próximo da maneira como pkzipfunciona). Ou você pode colocar outro programa no pipeline, por exemplo, alguma criptografia, e pode escolher uma ordem arbitrária de tar, gzip e criptografar. Quem quer que tenha escrito o programa de criptografia não precisa ter a menor idéia de como seu programa seria usado, tudo o que ele precisa fazer é ler a entrada padrão e gravar na saída padrão.

Svante
fonte
Ao gerar o arquivo, lembre-se de criptografar após a compactação, não antes, porque a saída da criptografia parece aleatória e é difícil de compactar.
Jonathan Leffler
8

No mundo Unix, a maioria dos aplicativos são projetados para fazer uma coisa, e bem. Os utilitários zip mais populares no Unix, gzip e bzip2 fazem apenas compactação de arquivos. tar faz a concatenação do arquivo. Canalizar a saída do tar em um utilitário de compactação faz o que é necessário, sem adicionar complexidade excessiva a qualquer parte do software.

Harper Shelby
fonte
7

Outra razão pela qual é tão prevalente é que tar e gzip estão em quase toda a base de instalação do * NIX lá fora. Acredito que esse seja provavelmente o maior motivo. É também por isso que os arquivos zip são extremamente prevalentes no Windows, porque o suporte é embutido, independentemente das rotinas superiores em RAR ou 7z.

GNU tar também permite que você crie / extraia esses arquivos de um comando (uma etapa):

  • Crie um arquivo:
  • tar -cfvj destination.tar.bz2 *.files
  • tar -cfvz destination.tar.gz *.files

  • Extraia um arquivo: (a parte -C é opcional, o padrão é o diretório atual)

  • tar -xfvj archive.tar.bz2 -C destination_path
  • tar -xfvz archive.tar.gz -C destination_path

Isso é o que guardei na memória de meus muitos anos no Linux e recentemente no Nexenta (OpenSolaris).

Bryan Rehbein
fonte
3
Na verdade, é o contrário: o zip é construído no Windows agora porque era predominante no DOS e nas versões anteriores do Windows.
Christian Lescuyer
Eu gosto de usar RAR no Windows, tar.bz2 no Linux
Osama Al-Maadeed em
Você pode notar a estranha (não compatível com getopt ()) análise de opção, e o traço é opcional porque tar é anterior às convenções padrão das opções de comando Unix.
Jonathan Leffler
5

Acho que você estava procurando mais contexto histórico para isso. O zip original era para um único arquivo. Tar é usado para colocar vários arquivos em um único arquivo. Portanto, tarar e compactar é o processo de duas etapas. Por que ainda é tão dominante hoje, ninguém sabe.

Da wikipedia para Tar_ (file_format)

Na computação, tar (derivado do arquivo em fita) é um formato de arquivo (na forma de um tipo de fluxo de bits de arquivo) e o nome do programa usado para lidar com esses arquivos. O formato foi padronizado por POSIX.1-1988 e posteriormente POSIX.1-2001. Inicialmente desenvolvido como um formato bruto, usado para backup em fita e outros dispositivos de acesso sequencial para fins de backup, agora é comumente usado para agrupar coleções de arquivos em um arquivo maior, para distribuição ou arquivamento, enquanto preserva as informações do sistema de arquivos, como usuário e grupo permissões, datas e estruturas de diretório.

martinatime
fonte
4

tar é UNIX assim como UNIX é tar

Em minha opinião, a razão de ainda usar tarhoje é que é um dos casos (provavelmente raros) em que a abordagem do UNIX fez tudo perfeitamente certo desde o início.

Olhando mais de perto os estágios envolvidos na criação de arquivos, espero que você concorde que a forma como a separação de diferentes tarefas ocorre aqui é a filosofia UNIX no seu melhor:

  • uma ferramenta ( tarpara dar um nome aqui) especializada em transformar qualquer seleção de arquivos, diretórios e links simbólicos, incluindo todos os metadados relevantes, como carimbos de data / 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 oferece vários benefícios para o usuário e também para o desenvolvedor:

  • extensibilidade Permitindo acoplar tarcom qualquer algoritmo de compressão já existente ou qualquer algoritmo de compressão ainda a ser desenvolvido sem ter que mudar nada no funcionamento interno de tartudo.

    Assim que o novo "hyper-zip-utra" ou ferramenta de compressão Whater for lançado, você já estará pronto para usá-lo, abraçando seu novo servo com todo o poder de tar.

  • estabilidade tar tem sido amplamente utilizada desde o início dos anos 80, testada e executada em vários sistemas operacionais e máquinas.

    Evitar a necessidade de reinventar a roda na implementação de armazenamento de propriedade, permissões, carimbos de data / hora e semelhantes repetidamente para cada nova ferramenta de arquivamento não só economiza muito (de outra forma desnecessariamente gasto) no desenvolvimento, mas também garante a mesma confiabilidade para todos 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 permissões usando a ferramenta A você deve passar a opção --i-hope-you-rember-this-onee usando a ferramenta B você deve usar --this-time-its-another-one enquanto usa a ferramenta C é `--hope-you-didnt-try-with-tool-as-switch.

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

Mikyra
fonte
3

O alcatrão é popular principalmente por razões históricas. Existem várias alternativas disponíveis. Alguns deles existem há quase tanto tempo quanto o alcatrão, mas não podiam ultrapassar o alcatrão em popularidade por vários motivos.

  • cpio (sintaxe alienígena; teoricamente mais consistente, mas as pessoas gostam do que sabem, o alcatrão prevaleceu)
  • ar (popular há muito tempo, agora usado para empacotar arquivos de biblioteca)
  • shar (scripts de shell de extração automática, tinham todos os tipos de problemas; costumava ser popular, nunca menos)
  • zip (devido a problemas de licenciamento, não estava disponível em muitos Unices)

A principal vantagem (e desvantagem) do tar é que ele não possui cabeçalho de arquivo, nem diretório central de conteúdo. Por muitos anos, portanto, nunca sofreu de limitações no tamanho do arquivo (até esta década em que um limite de 8 Gb para arquivos dentro do arquivo se tornou um problema, resolvido anos atrás).

Aparentemente, a única desvantagem do tar.gz (ou ar.Z para esse assunto), que é que você tem que descompactar todo o arquivo para extrair arquivos individuais e listar o conteúdo do arquivo, nunca feriu as pessoas o suficiente para fazê-los abandonar o tar em números significativos .

edgar.holleis
fonte
Versões antigas do tar não tinham informações de cabeçalho; novas versões (compatível com POSIX, USTAR) do tar (por exemplo, GNU tar) sim. O comando 'arquivo' entende isso.
Jonathan Leffler
2

gzip e bzip2 são simplesmente um compressor, não um software de arquivamento. Daí a combinação. Você precisa do software tar para agrupar todos os arquivos.

O próprio ZIP e o RAR também são uma combinação dos dois processos.

jishi
fonte
2

Normalmente no mundo * nux, pacotes de arquivos são distribuídos como tarballs e, em seguida, opcionalmente compactados com gzip. Gzip é um programa de compressão de arquivo simples que não faz o pacote de arquivos que o tar ou zip faz.

Ao mesmo tempo, o zip não lidava corretamente com algumas das coisas que os sistemas de arquivos Unix tar e unix consideravam normais, como links simbólicos, arquivos de casos mistos, etc. Não sei se isso mudou, mas é por isso que usamos tar.

Paul Tomblin
fonte
1
* nux - Linux, Unux, Solarnux?
mackenir
1
@mackenir - não se esqueça do POSUX. :-)
Paul Tomblin
1
@mackenir - Ou deveria ser POSNUX?
Paul Tomblin
1

Tar = Arquivos de grupos em 1 arquivos

GZip = compactar o arquivo

Eles dividem o processo em 2. É isso.

No ambiente Windows você deve estar mais acostumado a usar o WinZip ou WinRar que faz um Zip. O processo de compactação desses softwares agrupa o arquivo e a compactação, mas você simplesmente não vê esse processo.

Patrick Desjardins
fonte
3
Não é a melhor explicação, visto que os arquivos "zip" a que o OP está acostumado no Windows, já incorporam o agrupamento.
Gareth
1

Pela mesma razão pela qual os usuários do mac adoram imagens de disco: eles são uma maneira realmente conveniente de arquivar coisas e depois distribuí-las, fazer download / baixar ou enviar por e-mail, etc.

E mais fácil de usar e mais portátil do que os zips IMHO.

Tobias
fonte
1

Nos meus dias de Altos-XENIX (1982), começamos a usar tar (arquivador de fita) para extrair arquivos de 5 disquetes de 1/4 ou fita de streaming, bem como copiar para essas mídias. Sua funcionalidade é muito semelhante aos comandos BACKUP.EXE e RESTORE.EXE no DOS 5.0 e 6.22 como suplementos, permitindo que você estenda várias mídias se não couberem em apenas uma. A desvantagem era que, se uma das várias mídias tivesse problemas, a coisa toda seria inútil. tar e dd originam-se do UNIX SYstem III e permaneceu como um utilitário de lançamento padrão com sistemas operacionais semelhantes ao UNIX, provavelmente por motivos de compatibilidade com versões anteriores.

Frank R.
fonte
0

Tar não é apenas um formato de arquivo, mas é um formato de fita. As fitas armazenam dados bit a bit. Cada implementação de armazenamento foi personalizada. Tar era o método pelo qual você podia retirar dados de um disco e armazená-los em uma fita de forma que outras pessoas pudessem recuperá-los sem seu programa personalizado.

Mais tarde, os programas de compactação vieram, e * nix ainda tinha apenas um método para criar um único arquivo que continha vários arquivos.

Eu acredito que é apenas a inércia que continuou com a tendência tar.gz. O Pkzip começou com compactação e arquivamento de uma só vez, mas os sistemas DOS normalmente não tinham unidades de fita conectadas!

Da wikipedia para Tar_ (file_format)

Na computação, tar (derivado do arquivo em fita) é um formato de arquivo (na forma de um tipo de fluxo de bits de arquivo) e o nome do programa usado para lidar com esses arquivos. O formato foi padronizado por POSIX.1-1988 e posteriormente POSIX.1-2001. Inicialmente desenvolvido como um formato bruto, usado para backup em fita e outros dispositivos de acesso sequencial para fins de backup, agora é comumente usado para agrupar coleções de arquivos em um arquivo maior, para distribuição ou arquivamento, enquanto preserva as informações do sistema de arquivos, como usuário e grupo permissões, datas e estruturas de diretório.

Kieveli
fonte
Estritamente falando, tar é um formato de arquivo - só que em fitas unix são apenas mais um arquivo.
Martin Beckett
Na verdade, tar não era um formato de arquivo para começar. As fitas não tinham sistemas de arquivos, então o tar foi criado como um patch para não ter um sistema de arquivos.
Kieveli
0

Como um desenvolvedor do Windows, é compreensível como os tarballs parecem estranhos. A palavratar significa Tape Archive. Pense em gravadores de fita bobina a bobina.

No mundo do Windows, os programas geralmente são instalados com um setup.exeou install.exeque funcionam com todos os tipos de magia no registro, criando diretórios e instalando.dll arquivos (Dynamic Link Library).

No Linux, em particular no Ubuntu, por experiência própria, os gerenciadores de pacotes cuidam de pegar um aplicativo e instalá-lo na maior parte do tempo . No Ubuntu, o desenvolvedor cria um pacote terminando em .deb(Debian, no qual o Ubuntu é baseado). A sintaxe básica para instalar um .debé:

sudo apt install <package_name>

Embora seja relativamente simples para um usuário, é muito trabalhoso para os desenvolvedores criar um .deb pacote e associar o PPA.

Um método mais fácil para desenvolvedores é criar um tarball. Então, o fardo da instalação é compartilhado pelo usuário final. Eles devem:

  • baixe o tarball (geralmente terminando em .tar.gz ).
  • descompacte o código-fonte em um diretório.
  • compilar o código-fonte (inédito no mundo do Windows for Profit).
  • espero que anote o que eles fizeram caso precisem repetir no futuro, porque não há nenhum aptbanco de dados (pense na lista de programas instalados do Windows) que possa ser copiado.

Como outra resposta já diz para outra pergunta que você fez, você PODE criar um tarball e compactar dados ao mesmo tempo. Um processo de duas passagens NÃO é necessário.

WinEunuuchs2Unix
fonte