O tar realmente comprime arquivos ou apenas os agrupa?

37

Eu normalmente assumi que tarera um utilitário de compactação, mas não tenho certeza, ele realmente comprime arquivos ou é como um arquivo ISO, um arquivo para armazenar arquivos?

O médico
fonte
Também no SuperUser .
allquixotic

Respostas:

49

O Tar é uma ferramenta de arquivamento (Tape ARchive), ele apenas coleta arquivos e seus metadados e produz um arquivo. Se você deseja compactar esse arquivo posteriormente, poderá usar gzip / bzip2 / xz. Por conveniência, o tar fornece argumentos para compactar o arquivo automaticamente para você. Confira a página do manual tar para obter mais detalhes.

0xAF
fonte
9
Um ligeiro esclarecimento sobre a resposta. É o tar do GNU que fornece esses argumentos extras de compactação. Por exemplo, o tar do Solaris não fornece argumentos para compactação.
Tero Kilkanen
5
oooh, é por isso que continuo vendo #thing.tar.7z
Mooing Duck
O tar BSD também fornece um argumento para compactação, embora ele aceite ze determine apenas o método de compactação com base na extensão, enquanto o tar GNU possui zZjJargumentos separados para os diferentes métodos de compactação.
wingedsubmariner
2
Basta ler a página de manual do tar do BSD e, por acaso, eu estava enganado, o tar do BSD usa separado zZjJpara compactação, como o tar do GNU. No entanto, ele detecta automaticamente a compactação ao descompactar, enquanto o GNU tar espera zZjJtambém.
precisa saber é o seguinte
5
@wingedsubmariner: não; as versões modernas do GNU tardescomprimem automaticamente sem exigir as -zZjJopções.
precisa
17

tarproduz arquivos; a compactação é uma funcionalidade separada. No entanto, por tar si só, pode reduzir o uso de espaço quando usado em um grande número de arquivos pequenos menores que o tamanho do cluster do sistema de arquivos. Se um sistema de arquivos usar clusters de 1kb, mesmo um arquivo que contenha um único byte consumirá 1kb (mais um inode). Um tararquivo não possui essa sobrecarga.

Aliás, um arquivo ISO não é realmente "um arquivo para armazenar arquivos" - é na verdade uma imagem de um sistema de arquivos inteiro (um originalmente projetado para ser usado em CDs) e, portanto, sua estrutura é consideravelmente mais complexa.

Michael Borgwardt
fonte
3
Na verdade, um arquivo vazio não consumirá 1kb. Um arquivo de 1-1023 bytes será.
precisa saber é
@psusi, portanto, para um arquivo de bytes de 1 a 1023, sempre consumirá 1024, o que resulta em desperdício de 1023 a 1 bytes.
Shiplu Mokaddim
2

O comando tar original do UNIX não compactou arquivos. Como foi mencionado em um comentário, o tar do Solaris não é compactado. Nem o HP-UX, nem o AIX, FWIW. Por convenção, os arquivos não compactados terminam em .tar.

Com o GNU / Linux, você obtém o tar do GNU. (Você pode instalar o GNU tar em outros sistemas UNIX.) Por padrão, ele não é compactado; no entanto, ele faz comprimir o arquivo resultante com o gzip (também por GNU) se você fornecer -z. O sufixo convencional para arquivos compactados com gzip é que .gz, geralmente, você vê tarballs (gírias para um arquivo tar, geralmente sugerindo que ele foi compactado) que terminam em .tar.gz. Esse final implica que o tar foi executado, seguido por gzip, por exemplo tar cf - .|gzip -9v > archive.tar.gz. Você também encontrará arquivos terminados em .tgz, por exemplo tar czf archive.tgz ..

Edit: www.linfo.org/tar.html me lembrou que o GNU tar suporta muito mais funcionalidades do que apenas comprimir com o gzip, e me lembrou que os sufixos são mais do que convenções simples. Eles têm semântica integrada. Também suporta bzip2 ( -jfor .bz2) e compressa antiga ( -Zfor .Z). Então olhei para a página do manual e lembrei que -amapeia automaticamente o método de compactação desejado com base no sufixo.

Um outro nit. Como diz a página do manual tar do Linux, o GNU produz páginas de informações, não páginas do manual, portanto, para aprender tudo sobre o tar do GNU, execute info tar.

tbc0
fonte
O tar GNU ainda não lida com compressões por si só, apenas canaliza para / do gzip, bzip2, compress e outros.
#
Eu dei uma olhada na fonte . O tar GNU lida com a compactação! A implementação tira proveito da reutilização de código e som princípios de arquitetura do espaço do usuário UNIX. "Just pipes" está subestimando a maneira como a compactação é fortemente integrada à ferramenta. O fato de acontecer aos programas auxiliares de bifurcação é um detalhe técnico. Se você quer defender "just pipes", cite os nomes dos arquivos e os números de linha e vamos ver de que lado a comunidade fica.
tbc0
Demora alguns dias até que eu possa verificar essa fonte.
#
1

O utilitário tar não será compactado até que você dê um argumento para fazê-lo [tar -z file name].

AJ
fonte