Pergunta

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

Ao baixar algo que os arquivos são colocados em um .tar Arquive então cortante. Por que o processo de duas etapas? Não zipando alcançar o agrupamento de arquivos? Existe algum outro benefício que eu não estou ciente?

Foi útil?

Solução

bzip e gzip Trabalhe em arquivos únicos, não grupos de arquivos. Idosos simples zip (e pkzip) opere em grupos de arquivos e tenha o conceito de arquivo interno.

A filosofia *Nix é uma das pequenas ferramentas que fazem muito bem trabalhos específicos e podem ser acorrentados. É por isso que existem duas ferramentas aqui que têm tarefas específicas e são projetadas para se encaixar bem. Isso também significa que você pode usar alcatrão para agrupar arquivos e, em seguida, você tem a opção de uma ferramenta de compressão (bzip, gzip, etc).

Outras dicas

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 o GZIP e o 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 pelo ZIP e pelo GZIP e, com ajuste binário apropriado, você pode levar a carga útil de um fluxo GZIP e colocá -lo em um arquivo zip com entradas de cabeçalho e dicionário apropriadas.

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

É estranho que ninguém mais tenha mencionado que as versões modernas do GNU tar Permita que você compacte enquanto está agrupando:

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 suporta o '-c'(para stdout, ou de stdin) e'-d'(descompacte) opções:

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

Isso permitiria especificar qualquer compressor alternativo.

[Adicionado: Se você está extraindo de gzip ou bzip2 Arquivos compactados, GNU tar Detecta automaticamente eles e executa o programa apropriado. Isto é, 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 corretamente. Se você usar um compressor não padrão, precisará especificar isso quando fizer a extração.

A razão para a separação é, como na resposta selecionada, a separação de deveres. Entre outras coisas, significa que as pessoas poderiam usar o 'cpio'Programa para embalar os arquivos (em vez de tar) e depois use o compressor de escolha (Era uma vez, o compressor preferido foi pack, depois foi compress (o que foi muito mais eficaz do que pack), e depois gzip que corriam toca em torno de seus dois antecessores e é totalmente competitivo com zip (que foi portado para o Unix, mas não é nativo lá) e agora bzip2 que, na minha experiência, geralmente tem uma vantagem de 10 a 20% sobre gzip.

[Adicionado: alguém notou em sua resposta que cpio tem convenções engraçadas. Isso é verdade, mas até GNU tar Tenho as opções relevantes ('-T -'), cpio foi o melhor comando quando você não queria arquivar tudo o que estava embaixo de um determinado diretório - você poderia realmente escolher exatamente quais arquivos foram arquivados. A desvantagem de cpio foi você não apenas poderia Escolha os arquivos - você teve para escolhê -los. Ainda há um lugar onde cpio pontuações; Ele pode fazer uma cópia in situ de uma hierarquia de diretório para outra sem qualquer armazenamento intermediário:

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

Aliás, o '-depth'opção em find é importante nesse contexto - ele 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 a adição a esta resposta, copiei alguns diretórios somente leitura (555 permissão); Quando fui excluir a cópia, tive que relaxar as permissões nos diretórios antes 'rm -fr /new/place'poderia terminar. Sem o -depth opção, o cpio O comando teria falhado. Só me lembrei disso quando fui fazer a limpeza - a fórmula citada é automática para mim (principalmente em virtude de muitas repetições ao longo de muitos anos).

O engraçado é que você pode obter o comportamento não previsto pelos criadores de tar e gzip. Por exemplo, você não pode apenas gzip um arquivo alcatrão, mas também pode produzir arquivos de alcatrão, para produzir um files.gz.tar (isso estaria tecnicamente mais próximo do caminho pkzip funciona). Ou você pode colocar outro programa no pipeline, por exemplo, alguma criptografia, e você pode escolher uma ordem arbitrária de acariciar, brigando e criptografando. Quem escreveu o programa de criptografia não precisa ter a menor idéia de como o programa seria usado, tudo o que ele precisa fazer é ler a partir de entrada padrão e gravar para a saída padrão.

No mundo Unix, a maioria das aplicações é projetada para fazer uma coisa e fazê -lo bem. Os utilitários ZIP mais populares do UNIX, GZIP e BZIP2 apenas fazem compactação de arquivo. TAR faz a concatenação do arquivo. Exibir a saída de alcatrão para um utilitário de compressão faz o que é necessário, sem adicionar complexidade excessiva a qualquer software.

Outro motivo pelo qual é tão prevalente é que o alcatrão e o GZIP estão em quase toda a base de instalação *nix. Eu acredito que esse é provavelmente o maior motivo. É também por isso que os arquivos ZIP são extremamente prevalentes no Windows, porque o suporte é incorporado, independentemente das rotinas superiores em RAR ou 7z.

O GNU TAR também permite criar/extrair 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, padronizando o diretório atual)

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

É isso que me comprometi com os meus muitos anos no Linux e recentemente no Nexenta (OpenSolaris).

Eu acho que você estava procurando mais contexto histórico para isso. O zip original era para um único arquivo. O alcatrão é usado para colocar vários arquivos em um único arquivo. Portanto, tarring e zipping são o processo de duas etapas. Por que ainda é tão dominante hoje é um palpite.

Da Wikipedia para Tar_ (file_format)

Na computação, o alcatrão (derivado do arquivo de fita) é um formato de arquivo (na forma de um tipo de areia de arquivo) e o nome do programa usado para lidar com esses arquivos. O formato foi padronizado por Posix.1-1988 e posterior Posix.1-2001. Inicialmente desenvolvido como um formato bruto, usado para backup de fita e outros dispositivos de acesso seqüencial para fins de backup, agora é comumente usado para coletar coleções de arquivos em um arquivo maior, para distribuição ou arquivamento, enquanto preserva informações do sistema de arquivos, como usuário e grupo Permissões, datas e estruturas de diretório.

alcatrão é unix como unix é alcatrão

Na minha opinião, o motivo de ainda usando tar Hoje é que é um dos casos (provavelmente raros) em que a abordagem do UNIX apenas a tornou perfeitamente desde o início.

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

  • uma ferramenta (tar para dar um nome aqui) especializado em transformar algum Seleção de arquivos, diretórios e links simbólicos, incluindo tudo Meta-dados relevantes, como registros de data e hora, proprietários e permissões em um fluxo de bytes.

  • E apenas mais uma ferramenta arbitrariamente intercambiável (gzip bz2 xz para citar apenas algumas opções) que transformam algum fluxo de entrada de bytes em outro fluxo de saída (espero) menor.

Usar tal e abordagem oferece vários benefícios ao usuário e ao desenvolvedor:

  • extensibilidadePermitindo se aconchegar tar com algum algoritmo de compressão já existente ou algum algoritmo de compressão ainda a ser desenvolvido sem tendo que mudar qualquer coisa no funcionamento interno de tar de forma alguma.

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

  • estabilidade tar está em uso pesado desde o início dos anos 80 testado e foi executado em sistemas e máquinas operacionais numerosas.

    Impedindo a necessidade de reinventar a roda na implementação de armazenamento de propriedade, permissões, registros de data e hora e similares repetidamente por todo A nova ferramenta de arquivamento não apenas salva muito (caso contrário, gasto desnecessariamente) tempo em desenvolvimento, mas também garante o mesmo confiabilidade para cada novo aplicativo.

  • 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 que você precisa passar pela opção --i-hope-you-rember-this-one e usando a ferramenta B, você tem que usar --this-time-its-another-one Ao usar a ferramenta C, é `--Hope-You-Didnt-Try-With-Tool-As-Switch.

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

alcatrão é popular principalmente por razões históricas. Existem várias alternativas prontamente disponíveis. Alguns deles estão por aí por quase tanto tempo, mas não conseguiram superar o alcatrão em popularidade por várias razões.

  • CPIO (sintaxe alienígena; teoricamente mais consistente, mas as pessoas gostam do que sabem, Tar prevaleceu)
  • AR (popular há muito tempo, agora usado para embalá -lo dos arquivos da biblioteca)
  • shar (scripts de shell auto -extraídos, tinham todos os tipos de questões; costumava ser popular nunca mais)
  • ZIP (devido a problemas de licenciamento, não estava prontamente disponível em muitos unices)

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

Apermente, a única desvantagem de tar.gz (ou ar.z para esse assunto), que é que você precisa descompactar todo o arquivo para extrair arquivos únicos e listar o conteúdo do arquivo, nunca prejudicar as pessoas o suficiente para fazê -las defeito do alcatrão em números significativos .

GZIP e BZIP2 são simplesmente um compressor, não um software de arquiver. Portanto, a combinação. Você precisa do Software Tar para agrupar todos os arquivos.

Zip em si, e rar também são uma combinação dos dois processos.

Geralmente no mundo *Nux, os pacotes de arquivos são distribuídos como tarballs e, opcionalmente, opcionalmente. O GZIP é um programa de compactação de arquivo simples que não faz o agrupamento de arquivos que o TAR ou o ZIP faz.

Ao mesmo tempo, o ZIP não lidou com algumas das coisas que os sistemas de arquivos UNIX TAR e UNIX consideraram normais, como links simbólicos, arquivos de casos mistos etc. Não sei se isso mudou, mas é por isso que usamos o TAR.

Alcatrão = grupos arquivos em 1 arquivos

Gzip = zip o arquivo

Eles dividiram o processo em 2. É isso.

No ambiente do Windows, você pode estar mais usado para usar o Winzip ou o Winrar que faz um zip. O processo ZIP desses software agrupa o arquivo e o zipping, mas você simplesmente não vê esse processo.

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

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

No meu Altos-Xenix Days (1982), começamos a usar alcatrão (arquiver de fita) para extrair arquivos de 5 1/4 falhas ou fitas de streaming e copiar para essas mídias. Sua funcionalidade é muito semelhante aos comandos backup.exe e restauração.exe no DOS 5.0 e 6.22 como suplementos, permitindo abranger vários meios se não pudesse caber em apenas um. A desvantagem era que, se uma das várias mídias tivesse problemas, tudo era inútil. O TAR e o DD originam do Unix System III e permaneceu um utilitário de liberação padrão com OS do tipo UNIX 'provavelmente por razões de compatibilidade com versões anteriores.

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

Posteriormente, os programas de compactação chegaram e *Nix ainda tinha apenas um método de criar um único arquivo que continha vários arquivos.

Eu acredito que é apenas inércia que continuou com a tendência do Tar.gz. O PKZIP começou com compressão e arquivo de uma só vez, mas os sistemas DOS normalmente não tinham unidades de fita adesiva!

Da Wikipedia para Tar_ (File_Format)

Na computação, o alcatrão (derivado do arquivo de fita) é um formato de arquivo (na forma de um tipo de areia de arquivo) e o nome do programa usado para lidar com esses arquivos. O formato foi padronizado por Posix.1-1988 e posterior Posix.1-2001. Inicialmente desenvolvido como um formato bruto, usado para backup de fita e outros dispositivos de acesso seqüencial para fins de backup, agora é comumente usado para coletar coleções de arquivos em um arquivo maior, para distribuição ou arquivamento, enquanto preserva informações do sistema de arquivos, como usuário e grupo Permissões, datas e estruturas de diretório.

Como desenvolvedor do Windows, é compreensível como Tarballs parece estranho. A palavra tar significa o arquivo de fita. Pense nos gravadores de fita de bobina a bobina.

Nos programas do Windows World, geralmente são instalados com um setup.exe ou install.exe que funcionam todos os tipos de magia no registro, criando diretórios e instalando .dll (Biblioteca de link dinâmico) arquivos.

No Linux, o Ubuntu, em particular por minha própria experiência, os gerentes de pacotes cuidam de um aplicativo e instalá -lo a maior parte do tempo. Em Ubuntu, o desenvolvedor cria um pacote que termina em .deb (Debian, no qual o Ubuntu se baseia). A sintaxe básica para instalar um .deb é:

sudo apt install <package_name>

Embora isso seja relativamente direto para um usuário, é muito trabalho para os desenvolvedores criarem um .deb Pacote e associar PPA.

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

  • baixar o tarball (geralmente terminando em .tar.gz).
  • descompacte o código -fonte para um diretório.
  • Compile o código -fonte (inédito no Windows for Profit World).
  • Espero escrever o que eles fizeram caso precisem repetir no futuro, porque não há apt Banco de dados (Pense na lista de programas instalados do Windows) que podem ser backups.

Como outra resposta já declara para outra pergunta que você fez, você pode criar um tarball e compactar dados ao mesmo tempo. Um processo de dois passes não é necessário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top