Compactação e Descompactação de Arquivos no Linux
Trabalhar com arquivos compactados é uma tarefa cotidiana para qualquer usuário Linux. Seja para economizar espaço em disco, transferir arquivos pela rede ou fazer backups, entender as ferramentas de compactação é essencial. Neste guia, você vai aprender a usar as principais ferramentas disponíveis no Linux, com exemplos práticos que pode usar imediatamente.
Por que comprimir arquivos?
Section titled “Por que comprimir arquivos?”Antes de mergulharmos nas ferramentas, vale entender os benefícios da compactação:
- Economia de espaço: Arquivos compactados ocupam menos espaço em disco
- Transferências mais rápidas: Arquivos menores são transmitidos mais rapidamente pela rede
- Organização: Um arquivo compactado pode conter múltiplos arquivos e diretórios
- Backups eficientes: Compactar backups reduz o espaço necessário para armazenamento
Entendendo os conceitos básicos
Section titled “Entendendo os conceitos básicos”No Linux, é importante distinguir dois conceitos:
Arquivamento: Juntar vários arquivos em um único arquivo (como o tar faz)
Compactação: Reduzir o tamanho de um arquivo usando algoritmos (como gzip e bzip2 fazem)
Muitas vezes, usamos as duas técnicas juntas: primeiro arquivamos com tar, depois compactamos o resultado.
tar: O Arquivador Universal
Section titled “tar: O Arquivador Universal”O tar (Tape Archive) é a ferramenta mais usada no Linux para criar arquivos. Originalmente criado para backups em fita, hoje é o padrão para distribuir software e criar backups.
Quando usar tar
Section titled “Quando usar tar”- Fazer backup de diretórios inteiros
- Distribuir código-fonte de programas
- Preservar permissões e estrutura de diretórios
- Combinar com algoritmos de compactação
Criando arquivos tar
Section titled “Criando arquivos tar”Criar um arquivo tar simples:
tar -cvf arquivo.tar diretorio/-c: create (criar)-v: verbose (mostrar progresso)-f: file (especificar nome do arquivo)
Criar tar com compactação gzip (.tar.gz ou .tgz):
tar -czvf arquivo.tar.gz diretorio/A opção -z adiciona compactação gzip.
Criar tar com compactação bzip2 (.tar.bz2):
tar -cjvf arquivo.tar.bz2 diretorio/A opção -j usa bzip2, que comprime mais mas é mais lento.
Criar tar com compactação xz (.tar.xz):
tar -cJvf arquivo.tar.xz diretorio/A opção -J (maiúscula) usa xz, a compactação mais eficiente.
Extraindo arquivos tar
Section titled “Extraindo arquivos tar”Extrair arquivo tar simples:
tar -xvf arquivo.tarA opção -x significa extract (extrair).
Extrair tar.gz:
tar -xzvf arquivo.tar.gzExtrair tar.bz2:
tar -xjvf arquivo.tar.bz2Extrair tar.xz:
tar -xJvf arquivo.tar.xzDica importante: O tar moderno detecta automaticamente o tipo de compactação, então você pode usar simplesmente:
tar -xvf arquivo.tar.gztar -xvf arquivo.tar.bz2tar -xvf arquivo.tar.xzVisualizar conteúdo sem extrair
Section titled “Visualizar conteúdo sem extrair”tar -tvf arquivo.tar.gzA opção -t lista o conteúdo sem extrair.
Extrair em diretório específico
Section titled “Extrair em diretório específico”tar -xzvf arquivo.tar.gz -C /caminho/destino/Excluir arquivos ao criar tar
Section titled “Excluir arquivos ao criar tar”tar -czvf backup.tar.gz --exclude='*.log' --exclude='temp/' projeto/--exclude='*.log': Exclui da compactação todos os arquivos que terminam com.log:- Exemplos excluídos:
app.log,error.log,sistema.log
- Exemplos excluídos:
--exclude='temp/': Exclui o diretório chamadotemp/e todo seu conteúdo:- A barra
/no final indica que é um diretório - Tudo dentro de
temp/será ignorado
- A barra
gzip: Compactação Rápida e Eficiente
Section titled “gzip: Compactação Rápida e Eficiente”O gzip é o algoritmo de compactação mais usado no Linux. Ele oferece um bom equilíbrio entre velocidade e taxa de compactação.
Quando usar gzip
Section titled “Quando usar gzip”- Compactação rápida de arquivos individuais
- Situações onde velocidade é mais importante que tamanho
- Compatibilidade universal (está em todos os sistemas Unix-like)
Compactando com gzip
Section titled “Compactando com gzip”Compactar um arquivo:
gzip arquivo.txtIsso cria arquivo.txt.gz e remove o original.
Manter o arquivo original:
gzip -k arquivo.txtCompactação máxima:
gzip -9 arquivo.txtOs níveis vão de -1 (mais rápido) a -9 (melhor compactação). O padrão é -6.
Descompactando com gzip
Section titled “Descompactando com gzip”Descompactar:
gzip -d arquivo.txt.gz# ougunzip arquivo.txt.gzManter o arquivo compactado:
gzip -dk arquivo.txt.gzVisualizar conteúdo sem descompactar
Section titled “Visualizar conteúdo sem descompactar”zcat arquivo.txt.gzzless arquivo.txt.gzzgrep "termo" arquivo.txt.gzbzip2: Compactação Máxima
Section titled “bzip2: Compactação Máxima”O bzip2 oferece melhor taxa de compactação que o gzip, mas é mais lento. Ideal quando o espaço é mais importante que o tempo de processamento.
Quando usar bzip2
Section titled “Quando usar bzip2”- Arquivos grandes onde economia de espaço é crítica
- Arquivamento de longo prazo
- Quando velocidade de compactação não é prioridade
Compactando com bzip2
Section titled “Compactando com bzip2”Compactar um arquivo:
bzip2 arquivo.txtCria arquivo.txt.bz2.
Manter o arquivo original:
bzip2 -k arquivo.txtCompactação máxima:
bzip2 -9 arquivo.txtDescompactando com bzip2
Section titled “Descompactando com bzip2”Descompactar:
bzip2 -d arquivo.txt.bz2# oubunzip2 arquivo.txt.bz2Visualizar conteúdo
Section titled “Visualizar conteúdo”bzcat arquivo.txt.bz2bzless arquivo.txt.bz2bzgrep "termo" arquivo.txt.bz2xz: A Nova Geração
Section titled “xz: A Nova Geração”O xz é o algoritmo mais moderno e eficiente, oferecendo as melhores taxas de compactação. É usado em distribuições Linux para pacotes de software.
Quando usar xz
Section titled “Quando usar xz”- Máxima compactação necessária
- Distribuição de software
- Arquivos grandes que serão armazenados por muito tempo
Compactando com xz
Section titled “Compactando com xz”Compactar um arquivo:
xz arquivo.txtManter o arquivo original:
xz -k arquivo.txtCompactação extrema:
xz -9e arquivo.txtDescompactando com xz
Section titled “Descompactando com xz”Descompactar:
xz -d arquivo.txt.xz# ouunxz arquivo.txt.xzVisualizar conteúdo
Section titled “Visualizar conteúdo”xzcat arquivo.txt.xzxzless arquivo.txt.xzxzgrep "termo" arquivo.txt.xzzip: Compatibilidade Multiplataforma
Section titled “zip: Compatibilidade Multiplataforma”O zip não é nativo do Unix, mas é amplamente usado pela compatibilidade com Windows e outros sistemas operacionais.
Quando usar zip
Section titled “Quando usar zip”- Compartilhar arquivos com usuários Windows
- Compatibilidade multiplataforma
- Quando você precisa adicionar/remover arquivos do arquivo compactado
Compactando com zip
Section titled “Compactando com zip”Criar arquivo zip:
zip arquivo.zip arquivo1.txt arquivo2.txtCompactar diretório recursivamente:
zip -r projeto.zip projeto/Compactação máxima:
zip -9 -r arquivo.zip diretorio/Descompactando com zip
Section titled “Descompactando com zip”Extrair arquivo zip:
unzip arquivo.zipExtrair em diretório específico:
unzip arquivo.zip -d /caminho/destino/Listar conteúdo:
unzip -l arquivo.zipTestar integridade:
unzip -t arquivo.zipTabela Comparativa das Ferramentas
Section titled “Tabela Comparativa das Ferramentas”| Ferramenta | Compactação | Velocidade | Uso de CPU | Uso de Memória | Compatibilidade | Melhor uso |
|---|---|---|---|---|---|---|
| gzip | Boa | Rápida | Baixo | Baixo | Universal Unix | Uso geral, velocidade importante |
| bzip2 | Muito boa | Média | Médio | Médio | Universal Unix | Arquivos grandes, espaço crítico |
| xz | Excelente | Lenta | Alto | Alto | Moderno Unix/Linux | Máxima compactação, distribuição |
| zip | Boa | Rápida | Baixo | Baixo | Multiplataforma | Compatibilidade Windows |
| tar | Nenhuma* | Muito rápida | Muito baixo | Baixo | Universal Unix | Arquivamento (combinar com outros) |
*O tar sozinho não compacta, apenas arquiva. Combina-se com gzip/bzip2/xz.
Comparação Prática de Compactação
Section titled “Comparação Prática de Compactação”Vamos ver um exemplo real com um diretório de 100 MB:
# Arquivo originaldu -sh projeto/# 100M projeto/
# Diferentes compactaçõestar -czf projeto.tar.gz projeto/ # 45M (gzip)tar -cjf projeto.tar.bz2 projeto/ # 38M (bzip2)tar -cJf projeto.tar.xz projeto/ # 32M (xz)zip -r projeto.zip projeto/ # 46M (zip)Tempo de compactação aproximado:
- gzip: 5 segundos
- bzip2: 15 segundos
- xz: 40 segundos
- zip: 6 segundos
Melhores Práticas
Section titled “Melhores Práticas”1. Nome dos arquivos
Section titled “1. Nome dos arquivos”Use nomes descritivos e inclua a data:
tar -czvf backup_projeto_$(date +%Y%m%d).tar.gz projeto/# Resultado: backup_projeto_20250129.tar.gz2. Verifique a integridade
Section titled “2. Verifique a integridade”Teste os arquivos compactados:
# Para tartar -tvf arquivo.tar.gz > /dev/null && echo "OK" || echo "ERRO"
# Para zipunzip -t arquivo.zip
# Para gzipgzip -t arquivo.gz3. Use compactação em pipes
Section titled “3. Use compactação em pipes”Combine ferramentas via pipe:
# Backup direto para arquivo compactadomysqldump banco | gzip > banco_backup.sql.gz
# Transferência pela rede com compactaçãotar -czf - diretorio/ | ssh user@servidor "cat > backup.tar.gz"-(entrezcfediretorio/): Envia a saída do comando para stdout. Permite que o próximo comando receba os dados via pipe Sem isso, otargravaria um arquivo local
4. Divida arquivos grandes
Section titled “4. Divida arquivos grandes”Para arquivos muito grandes, divida em partes:
# Criar arquivo e dividir em partes de 1GBtar -czf - grande_diretorio/ | split -b 1G - backup.tar.gz.part
# Recombinar e extraircat backup.tar.gz.part* | tar -xzf -Comandos Úteis do Dia a Dia
Section titled “Comandos Úteis do Dia a Dia”Backup rápido com data
Section titled “Backup rápido com data”tar -czvf ~/backups/backup_$(date +%Y%m%d_%H%M%S).tar.gz ~/documentos/Comprimir logs antigos
Section titled “Comprimir logs antigos”find /var/log -name "*.log" -mtime +30 -exec gzip {} \;Extrair arquivo específico
Section titled “Extrair arquivo específico”tar -xzvf arquivo.tar.gz caminho/para/arquivo_especifico.txtcaminho/para/arquivo_especifico.txt: Caminho do arquivo dentro do arquivotar.gz.
Comparar tamanhos antes e depois
Section titled “Comparar tamanhos antes e depois”du -sh diretorio/tar -czvf arquivo.tar.gz diretorio/ls -lh arquivo.tar.gzDescompactar múltiplos arquivos
Section titled “Descompactar múltiplos arquivos”# Todos os .tar.gz no diretóriofor f in *.tar.gz; do tar -xzvf "$f"; done
# Todos os .zipfor f in *.zip; do unzip "$f"; doneTroubleshooting Comum
Section titled “Troubleshooting Comum”Arquivo corrompido
Section titled “Arquivo corrompido”Se receber erro ao descompactar:
# Teste a integridadegzip -t arquivo.gztar -tzf arquivo.tar.gz
# Tente recuperaçãogzip -dc arquivo.gz > arquivo_recuperado.txtSem espaço em disco
Section titled “Sem espaço em disco”# Extrair diretamente para outro discotar -xzvf arquivo.tar.gz -C /mnt/outro_disco/Permissões preservadas
Section titled “Permissões preservadas”# Manter permissões originais ao extrair (necessita root em alguns casos)sudo tar -xzvpf arquivo.tar.gzA opção -p preserva permissões.
Recursos adicionais
Section titled “Recursos adicionais”man tar- Manual completo do tarman gzip- Documentação do gzipman bzip2- Documentação do bzip2man xz- Documentação do xz