Compactação e arquivamento
Nesta aula, você aprenderá a compactar e arquivar arquivos no Linux usando ferramentas essenciais como tar, gzip, gunzip, zip e unzip. Veremos comandos práticos, combinações eficientes e boas práticas para gerenciar arquivos compactados no dia a dia.
Compactação e arquivamento são tarefas fundamentais no dia a dia de quem trabalha com sistemas Linux. Seja para fazer backup, transferir arquivos ou economizar espaço em disco, dominar as ferramentas de compactação é essencial. Nesta aula, vamos explorar as principais ferramentas: tar (que agrupa arquivos), gzip/gunzip (que compactam), e zip/unzip (que fazem ambos). Além disso, veremos como combiná-las para criar arquivos eficientes e como extrair conteúdo de forma segura.
Você vai aprender não apenas os comandos básicos, mas também flags importantes, diferenças entre formatos e boas práticas para evitar erros comuns. Ao final, terá exercícios práticos para consolidar o conhecimento.
tar
O comando tar (Tape Archive) é a ferramenta padrão no Linux para agrupar múltiplos arquivos e diretórios em um único arquivo, chamado de arquivo tar ou 'tarball'. Inicialmente, o tar foi criado para fitas magnéticas, mas hoje é usado principalmente para distribuição de software e backups. O tar não compacta por padrão; ele apenas junta os arquivos, preservando metadados como permissões e timestamps.
O uso básico envolve três operações: criar (c), extrair (x) e listar (t). A sintaxe geral é tar [opções] [arquivo.tar] [arquivos...]. Por exemplo, para criar um arquivo tar de um diretório chamado 'documentos', usamos:
tar -cf documentos.tar documentos/A flag -c indica criação, e -f especifica o nome do arquivo. Para extrair, usamos -x:
tar -xf documentos.tarPara listar o conteúdo:
tar -tf documentos.tarÉ comum combinar tar com compactação, como veremos a seguir. Mas antes, vale destacar algumas opções úteis: -v (verbose, mostra os arquivos processados), -z (compacta com gzip), -j (compacta com bzip2) e -J (compacta com xz). Também é possível usar --exclude para ignorar arquivos específicos.
gzip e gunzip
O gzip é um dos compactadores mais utilizados no Linux. Ele usa o algoritmo DEFLATE e é muito eficiente para arquivos de texto. O comando gzip substitui o arquivo original por um arquivo com extensão .gz, a menos que você use a flag -k para manter o original. Para descompactar, usamos gunzip ou gzip -d.
Exemplo: compactar um arquivo chamado 'relatorio.txt':
gzip relatorio.txtIsso criará 'relatorio.txt.gz' e removerá o original. Para descompactar:
gunzip relatorio.txt.gzSe você quiser manter o arquivo original durante a compactação, use gzip -k relatorio.txt. O gzip também pode compactar a saída de outro comando, usando pipes. Por exemplo, para compactar um backup de banco de dados:
mysqldump -u root meu_banco | gzip > backup.sql.gzPara visualizar o conteúdo de um arquivo .gz sem descompactar, use zcat ou zless.
zip/unzip
O formato zip é amplamente utilizado, especialmente em ambientes Windows, mas também é suportado nativamente no Linux. Ele combina arquivamento e compactação em um único comando. Diferente do tar, o zip pode compactar arquivos individualmente e é fácil de usar para distribuir pastas.
Para criar um arquivo zip de um diretório, usamos:
zip -r arquivos.zip documentos/A flag -r é necessária para incluir subdiretórios recursivamente. Para extrair, usamos unzip:
unzip arquivos.zipVocê também pode listar o conteúdo com unzip -l arquivos.zip e extrair apenas um arquivo específico: unzip arquivos.zip caminho/dentro/do/zip. O zip também permite adicionar arquivos a um arquivo existente com zip arquivos.zip novo_arquivo.txt.
Uma diferença importante é que o zip preserva permissões de arquivo de forma menos fiel que o tar, mas é mais portátil para sistemas não Unix.
Combinações
Na prática, é comum combinar tar com gzip (ou outros compactadores) para criar um arquivo único e compactado. A forma mais tradicional é usar tar -czf (criar, gzip, arquivo) e tar -xzf (extrair, gzip). Por exemplo:
tar -czf documentos.tar.gz documentos/Isso cria um arquivo compactado com gzip. Para extrair:
tar -xzf documentos.tar.gzOutras combinações incluem tar -cjf (bzip2) e tar -cJf (xz). A escolha do compactador depende do tamanho e da velocidade desejada: gzip é rápido, bzip2 comprime melhor, xz é ainda melhor em compressão, mas mais lento.
Também é possível usar zip para compactar um diretório inteiro, como vimos, mas lembre-se de que o zip é menos eficiente para arquivos de texto do que gzip em alguns casos. No entanto, para compatibilidade com outros sistemas, zip é uma boa escolha.
Uma boa prática é sempre verificar a integridade dos arquivos compactados com gzip -t (testa um arquivo .gz) ou unzip -t (testa um zip). Para tar, você pode usar tar -tzf para listar e verificar se o arquivo está íntegro.
Boas práticas e observações finais
Ao trabalhar com compactação, tenha atenção aos seguintes pontos:
- Sempre use a flag
-fcom tar para especificar o nome do arquivo; sem ela, o tar pode tentar usar a fita magnética padrão. - Para extrair em um diretório específico, use
tar -xzf arquivo.tar.gz -C /caminho/destinoouunzip arquivo.zip -d /caminho/destino. - Use
--excludeno tar para excluir diretórios como.gitounode_modulesao fazer backups. - Verifique sempre o conteúdo de arquivos compactados antes de extrair, especialmente se vierem de fontes externas, para evitar arquivos indesejados.
- Considere usar
pigz(gzip paralelo) para compactar mais rápido em máquinas com múltiplos núcleos.
Essas ferramentas são essenciais para qualquer usuário de Linux. Pratique os comandos e explore as opções de ajuda com man tar, man gzip e man zip para aprofundar.
Exercícios
- Crie um diretório chamado 'backup' com três arquivos de texto (ex.: a.txt, b.txt, c.txt). Use o comando tar para criar um arquivo 'backup.tar' contendo esse diretório. Liste o conteúdo do arquivo tar para verificar se os arquivos estão lá.✓ Resposta:
mkdir backup cd backup touch a.txt b.txt c.txt cd .. tar -cf backup.tar backup/ tar -tf backup.tar - Compacte o arquivo 'backup.tar' usando gzip, mantendo o arquivo original (use a opção -k). Depois, liste o conteúdo do arquivo .gz com zcat.✓ Resposta:
gzip -k backup.tar zcat backup.tar.gz | tar -t - Crie um arquivo zip contendo o diretório 'backup' (com os arquivos de texto) usando o comando zip. Extraia o conteúdo em um diretório chamado 'extraido' e verifique se os arquivos estão lá.✓ Resposta:
zip -r backup.zip backup/ mkdir extraido unzip backup.zip -d extraido ls extraido/backup - Use o tar para criar um arquivo compactado com gzip diretamente (tar -czf) do diretório 'backup'. Depois, extraia o conteúdo em um diretório chamado 'restaurado' usando a opção -C.✓ Resposta:
tar -czf backup.tar.gz backup/ mkdir restaurado tar -xzf backup.tar.gz -C restaurado ls restaurado/backup - Crie um arquivo zip com uma senha usando a opção -P (ex.: 'zip -P senha backup.zip backup/'). Depois, extraia o conteúdo usando unzip (você precisará fornecer a senha).✓ Resposta:
zip -P senha backup.zip backup/ unzip backup.zip