Tem uma confusão conceitual que persegue quem está começando com Linux, e que vale desfazer logo no início deste artigo: arquivar e comprimir são duas coisas diferentes, mesmo que a gente use os dois termos meio misturados no dia a dia. Arquivar é juntar vários arquivos e diretórios em um único arquivo, preservando estrutura, permissões e metadados. Comprimir é reduzir o tamanho dos dados, usando algum algoritmo que elimina redundância. O .zip do Windows faz as duas coisas ao mesmo tempo, num pacote só — e é por isso que, para quem vem desse mundo, a separação entre tar (arquivar) e gzip/bzip2 (comprimir) do universo Linux parece estranha à primeira vista.
Esse tema, além de aparecer o tempo todo no dia a dia — fazer backup do diretório pessoal, empacotar um projeto para enviar a alguém, extrair um pacote baixado da internet —, é também um dos tópicos cobrados na certificação LPI Essentials, dentro da área de conhecimento sobre arquivos e compressão. Vamos entender a fundo.
tar: arquivar, não comprimir (por padrão)
O nome tar vem de tape archive — literalmente, arquivo de fita magnética, uma herança dos tempos de backup em fita. Na essência, tar pega um conjunto de arquivos e diretórios e os empacota num único arquivo, mantendo estrutura de diretórios, permissões, dono e timestamps.
Criando um arquivo tar
tar -cvf backup.tar Documentos/
Vale entender cada letra dessas flags, porque tar tem uma sintaxe peculiar (não exige - antes das opções, embora seja aceito, e a ordem das letras costuma seguir uma convenção):
-c(create) — cria um novo arquivo tar.-v(verbose) — mostra cada arquivo conforme é processado.-f(file) — especifica o nome do arquivo de destino. Essa opção precisa ser a última da sequência de letras, porque o argumento que vem logo depois dela (backup.tar) é interpretado como o nome do arquivo — colocar-fno meio da sequência de flags é um erro comum que faztartentar usar a letra seguinte como nome de arquivo.
Extraindo um arquivo tar
tar -xvf backup.tar
-x (extract) no lugar de -c. O restante da lógica é igual.
Listando o conteúdo sem extrair
Antes de extrair um .tar desconhecido — especialmente um baixado da internet —, é uma boa prática conferir o que ele contém, sem extrair nada ainda:
tar -tvf backup.tar
-t (list) mostra a lista de arquivos, com permissões, dono e tamanho — o mesmo formato de um ls -l — sem tocar em nenhum arquivo do disco.
Extraindo em um diretório específico
tar -xvf backup.tar -C /destino/
-C muda o diretório de trabalho antes de extrair, evitando espalhar os arquivos no diretório atual. É praticamente obrigatório usar essa flag ao extrair pacotes baixados, para não bagunçar o diretório onde você está.
Combinando tar com compressão: -z e -j
Sozinho, tar só empacota — o arquivo resultante não é menor que a soma dos arquivos originais (pode até ser marginalmente maior, por causa dos metadados). É aí que entra a combinação com um algoritmo de compressão, e é exatamente por isso que você vê extensões como .tar.gz e .tar.bz2 — tar cuidando do empacotamento, e outro programa cuidando da compressão.
tar moderno já integra essa combinação através de flags diretas, sem precisar rodar dois comandos separados:
tar -czvf backup.tar.gz Documentos/ # compressão com gzip (-z)
tar -cjvf backup.tar.bz2 Documentos/ # compressão com bzip2 (-j)
tar -cJvf backup.tar.xz Documentos/ # compressão com xz (-J)
E, na extração, tar detecta automaticamente qual algoritmo foi usado — não é preciso lembrar qual flag de compressão usar na hora de extrair, -xvf sozinho já resolve para qualquer um dos formatos:
tar -xvf backup.tar.gz
tar -xvf backup.tar.bz2
tar -xvf backup.tar.xz
gzip vs. bzip2 vs. xz: qual escolher
Essa é uma dúvida prática recorrente, e a resposta depende do que se está otimizando — velocidade ou taxa de compressão:
gzip— o mais rápido dos três, e o mais universalmente disponível (praticamente todo sistema Unix temgzipinstalado por padrão). Taxa de compressão razoável, mas não a melhor. É a escolha padrão quando velocidade importa mais que o tamanho final — por exemplo, comprimir logs rotacionados automaticamente todo dia.bzip2— comprime melhor quegzipna maioria dos casos, mas é sensivelmente mais lento, tanto para comprimir quanto para descomprimir. Faz sentido quando o espaço economizado compensa o tempo extra — arquivamento de longo prazo, por exemplo, onde a compressão roda uma vez só, mas o arquivo fica armazenado por muito tempo.xz— geralmente a melhor taxa de compressão dos três, mas o mais lento e o que mais consome memória durante a compressão. Comum em distribuição de pacotes de software (é o formato usado pelo próprio kernel Linux, por exemplo), onde o tamanho final do arquivo distribuído importa mais do que o tempo gasto para gerá-lo uma única vez.
Uma forma prática de decidir, sem precisar decorar: se o arquivo vai ser comprimido com frequência (rotina automatizada, muitas vezes ao dia), priorize velocidade (gzip). Se vai ser comprimido uma vez e armazenado/distribuído por muito tempo, priorize taxa de compressão (xz ou bzip2).
Usando gzip e bzip2 diretamente, sem tar
Os comandos gzip e bzip2 também funcionam sozinhos, comprimindo um único arquivo — sem empacotar vários arquivos, já que essa não é a função deles:
gzip arquivo.log
# gera arquivo.log.gz, e REMOVE o arquivo.log original
Esse comportamento — remover o arquivo original — costuma surpreender quem usa pela primeira vez. Para manter o original intacto e gerar a versão comprimida como uma cópia separada:
gzip -k arquivo.log
# -k (keep): mantém o arquivo.log original, além de gerar arquivo.log.gz
Para descomprimir:
gunzip arquivo.log.gz
# ou, equivalente:
gzip -d arquivo.log.gz
O mesmo padrão se aplica ao bzip2:
bzip2 -k arquivo.log # comprime, mantendo o original
bunzip2 arquivo.log.bz2 # descomprime
Verificando o conteúdo de um arquivo comprimido sem descomprimir
Uma dupla de comandos pouco conhecida, mas bastante prática para investigar logs comprimidos sem precisar descomprimir o arquivo inteiro primeiro:
zcat arquivo.log.gz | grep "ERROR"
# lê o conteúdo comprimido diretamente, direcionando para outro comando
Isso conecta diretamente com o artigo sobre grep — é bastante comum, em investigação de logs antigos já rotacionados e comprimidos, precisar buscar um padrão sem ocupar espaço extra descomprimindo o arquivo primeiro. zcat (para .gz) e bzcat (para .bz2) resolvem exatamente isso, agindo como uma ponte entre o arquivo comprimido e qualquer outro comando via pipe.
zip e unzip: quando a compatibilidade com outros sistemas importa
Diferente de tar + gzip/bzip2 (dois passos separados, típico do mundo Unix), o .zip já combina arquivamento e compressão num formato único — e é o formato mais universalmente reconhecido fora do mundo Linux, especialmente por usuários de Windows e macOS.
zip -r backup.zip Documentos/
-r (recursive) é necessário para incluir o conteúdo de subdiretórios — sem ela, zip só adicionaria os arquivos do nível mais alto de Documentos/, ignorando o que estiver dentro de subpastas.
Extraindo:
unzip backup.zip
Para extrair num diretório específico:
unzip backup.zip -d /destino/
Para listar o conteúdo sem extrair (equivalente ao tar -tvf):
unzip -l backup.zip
Quando usar zip em vez de tar + gzip
A regra prática: use .zip quando o arquivo vai ser compartilhado com alguém que provavelmente não está em um sistema Unix, ou quando a ferramenta de destino (um sistema de upload, uma API, um cliente que só aceita .zip) exige esse formato especificamente. Para backups, transferências entre servidores Linux, e arquivamento dentro do próprio ecossistema Unix, tar combinado com gzip/bzip2/xz é o padrão mais nativo, mais flexível (preserva melhor permissões e links simbólicos do Unix) e, no caso do gzip, quase sempre disponível sem precisar instalar nada extra.
Exemplos práticos do dia a dia
# Backup completo do diretório pessoal, com data no nome do arquivo
tar -czvf backup_home_$(date +%Y%m%d).tar.gz ~/
# Extrair um pacote baixado, direto no diretório de destino desejado
tar -xzvf pacote.tar.gz -C /opt/aplicacao/
# Compactar todos os logs de um diretório, individualmente
gzip /var/log/app/*.log
# Buscar um erro específico dentro de um log já compactado
zcat /var/log/app/antigo.log.gz | grep "Traceback"
# Criar um zip para enviar um projeto a alguém fora do ambiente Linux
zip -r projeto.zip meu_projeto/ -x "*.git*" -x "__pycache__/*"
# Conferir o conteúdo de um tar.gz antes de extrair, por segurança
tar -tzvf pacote_desconhecido.tar.gz
No exemplo do zip, a flag -x exclui padrões da compactação — parecido em espírito com o --exclude do rsync visto no artigo anterior, útil para não empacotar arquivos irrelevantes (controle de versão, cache) junto com o projeto de verdade.
Boas práticas
- Sempre liste o conteúdo (
-tno tar,-lno unzip) antes de extrair um arquivo de origem desconhecida — evita extrair um número inesperado de arquivos direto no diretório atual, ou pior, sobrescrever algo sem perceber. - Use
-Cnotarao extrair, para controlar exatamente onde os arquivos vão parar, em vez de depender de estar no diretório certo antes de rodar o comando. - Prefira
gzip -kebzip2 -kquando quiser manter o arquivo original — o comportamento padrão de remover o original surpreende bastante gente na primeira vez. - Escolha o algoritmo pela frequência de uso:
gzippara rotinas automatizadas e frequentes,xz/bzip2para arquivamento único de longo prazo onde o tamanho final importa mais que o tempo de compressão. - Use
zcat/bzcatcombinado comgreppara investigar logs comprimidos sem precisar descomprimir o arquivo inteiro primeiro — economiza espaço em disco e um passo manual. - Use
.zipapenas quando a compatibilidade fora do Unix for necessária — para uso interno entre servidores Linux,tar+ compressão continua sendo mais idiomático e mais completo na preservação de metadados. - Inclua a data no nome de arquivos de backup (
$(date +%Y%m%d)), especialmente em scripts agendados viacron— evita sobrescrever o backup anterior sem perceber.
Conclusão
A separação entre arquivar (tar) e comprimir (gzip/bzip2/xz) parece, à primeira vista, uma complicação desnecessária para quem vem de sistemas onde o .zip já faz tudo junto. Na prática, é o oposto: separar as duas responsabilidades dá flexibilidade — trocar o algoritmo de compressão sem mudar a forma de empacotar, ou usar só um dos dois quando o outro não for necessário. Entender essa distinção, e saber quando cada ferramenta (incluindo o .zip, para os casos certos) é a mais adequada, é exatamente o tipo de conhecimento fundamental que a LPI Essentials cobra — e que continua sendo usado o tempo todo, muito depois da prova, em qualquer rotina real de administração de sistemas Linux.