Empacotamento e Compactação de Arquivos

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, aprenderemos como empacotar e compactar arquivos e diretórios usando comandos comuns do Linux, como tar, gzip e zip. Essas ferramentas são fundamentais para o gerenciamento de arquivos e diretórios em sistemas Linux, permitindo que você armazene e transfira dados de maneira eficiente. Começaremos com operações básicas e avançaremos gradualmente para tarefas mais complexas, explicando cada etapa detalhadamente.

Este é um Laboratório Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para concluir cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 96%. Ele recebeu uma taxa de avaliação positiva de 99% dos alunos.

Criando uma Estrutura de Diretórios de Exemplo

Vamos começar criando uma estrutura de diretórios de exemplo para trabalharmos. Isso nos ajudará a entender como o empacotamento e a compactação de arquivos funcionam com diferentes tipos de arquivos e diretórios.

Abra seu terminal e digite os seguintes comandos:

cd ~/project
mkdir -p test_dir/{subdir1,subdir2}
echo "This is file 1" > test_dir/file1.txt
echo "This is file 2" > test_dir/file2.txt
echo "This is in subdir1" > test_dir/subdir1/subfile1.txt
echo "This is in subdir2" > test_dir/subdir2/subfile2.txt

Vamos detalhar o que esses comandos fazem:

  1. cd ~/project: Altera seu diretório atual para a pasta project em seu diretório pessoal.
  2. mkdir -p test_dir/{subdir1,subdir2}: Cria um novo diretório chamado test_dir e dois subdiretórios dentro dele: subdir1 e subdir2. A opção -p permite que o mkdir crie diretórios pai conforme necessário.
  3. Os comandos echo criam arquivos de texto com conteúdo de exemplo em diferentes locais dentro da nossa nova estrutura de diretórios.

Agora, vamos verificar a estrutura que criamos:

tree test_dir

Se você não vir essa saída ou receber um erro dizendo "command not found", não se preocupe. O comando tree pode não estar instalado em seu sistema. Você pode usar ls -R test_dir em vez disso, que mostrará uma saída semelhante (embora menos gráfica).

Empacotando Arquivos com tar

Agora que temos nossa estrutura de diretórios de exemplo, vamos aprender sobre o empacotamento de arquivos usando o comando tar. tar significa "tape archive" (arquivo de fita) e era originalmente usado para criar arquivos em unidades de fita. Hoje, é comumente usado para agrupar vários arquivos e diretórios em um único arquivo.

Vamos empacotar nosso test_dir:

cd ~/project
tar -cvf test_archive.tar test_dir

Vamos detalhar este comando:

  • tar: O comando que estamos usando para criar o arquivo.
  • -c: Esta opção instrui o tar a criar um novo arquivo (create).
  • -v: Significa "verbose" (detalhado). Faz com que o tar exiba os nomes dos arquivos que está adicionando ao pacote. Isso é opcional, mas útil para acompanhar o que está acontecendo.
  • -f: Esta opção é seguida pelo nome do arquivo de pacote que queremos criar.
  • test_archive.tar: Este é o nome que estamos dando ao nosso novo arquivo de pacote. A extensão .tar é convencional para arquivos tar.
  • test_dir: Este é o diretório que estamos empacotando.

Após executar este comando, você deverá ver uma lista de arquivos sendo adicionados ao pacote.

Para visualizar o conteúdo do pacote sem extraí-lo, você pode usar:

tar -tvf test_archive.tar

Este comando lista (-t) o conteúdo do pacote, de forma detalhada (-v), a partir do arquivo (-f) chamado test_archive.tar.

Extraindo Arquivos de um Pacote tar

Antes de compactarmos nosso pacote tar, vamos aprender como extrair arquivos dele. Esta é uma habilidade importante ao trabalhar com arquivos tar.

Para extrair o conteúdo do nosso arquivo test_archive.tar:

mkdir extracted_tar
tar -xvf test_archive.tar -C extracted_tar

Vamos detalhar este comando:

  • mkdir extracted_tar: Cria um novo diretório chamado extracted_tar onde colocaremos o conteúdo do nosso pacote.
  • tar: O comando que estamos usando para extrair o pacote.
  • -x: Esta opção instrui o tar a extrair (extract) arquivos de um pacote.
  • -v: Torna a operação detalhada, mostrando cada arquivo conforme ele é extraído.
  • -f: Esta opção especifica o nome do arquivo de pacote sobre o qual operar. Ao extrair arquivos, deve ser seguida pelo caminho ou nome do arquivo tar a ser extraído.
  • -C extracted_tar: Esta opção instrui o tar a mudar para o diretório extracted_tar antes de extrair os arquivos.

Após executar este comando, você deverá ver uma lista de arquivos sendo extraídos.

Para verificar a extração, você pode usar:

tree extracted_tar

Ou se o tree não estiver disponível:

ls -R extracted_tar

Isso mostrará a estrutura de diretórios e os arquivos que estavam no pacote.

Compactando Arquivos com gzip

Agora que criamos um pacote tar, vamos compactá-lo usando o gzip:

gzip test_archive.tar

Este comando compactará o test_archive.tar e o renomeará para test_archive.tar.gz. O arquivo test_archive.tar original será substituído pela versão compactada.

Para ver o tamanho do arquivo compactado, você pode usar o seguinte comando:

ls -lh test_archive.tar.gz

As opções -lh mostrarão o tamanho do arquivo em um formato legível por humanos (como KB, MB, etc.).

Vale notar que, embora a extensão .tar.gz seja comum, você também pode encontrar .tgz, que é equivalente.

Entendendo a Diferença Entre Empacotamento e Compactação

Agora que realizamos tanto o empacotamento quanto a compactação, vamos entender a diferença entre essas operações e comparar os tamanhos dos arquivos.

  1. Empacotamento (Arquivamento):

    • Finalidade: Combinar vários arquivos e diretórios em um único arquivo.
    • O que faz: Agrupa arquivos, adicionando alguns metadados.
    • Exemplo de ferramenta: tar (Tape Archive)
    • Resultado: O tamanho total do pacote costuma ser ligeiramente maior do que a soma dos tamanhos de todos os arquivos contidos nele.
  2. Compactação:

    • Finalidade: Reduzir o tamanho de um arquivo ou de um pacote.
    • O que faz: Aplica algoritmos para remover redundâncias nos dados, tornando o arquivo menor.
    • Exemplos de ferramentas: gzip, bzip2, xz
    • Resultado: O arquivo compactado é menor que o original, mas requer descompactação antes do uso.

Vamos comparar os tamanhos do nosso diretório original, do pacote tar e do arquivo tar.gz compactado:

## Tamanho do diretório original (tamanho real do conteúdo do arquivo)
echo "Size of the original directory (file content):"
find test_dir -type f -exec ls -l {} \; | awk '{total += $5} END {print total " bytes"}'

## Tamanho do pacote tar (vamos recriá-lo para esta comparação)
tar -cvf test_archive_compare.tar test_dir
echo "Size of the tar archive:"
ls -lh test_archive_compare.tar

## Tamanho do arquivo tar.gz compactado
echo "Size of the compressed tar.gz file:"
ls -lh test_archive.tar.gz

## Para referência, uso de disco (que inclui preenchimento de bloco/setor)
echo "Disk usage of the original directory:"
du -sh test_dir

Você notará que:

  1. O pacote tar é ligeiramente maior que a soma dos tamanhos originais do conteúdo dos arquivos. Isso ocorre porque o tar adiciona metadados ao pacote, como nomes de arquivos, permissões, carimbos de data/hora e estruturas de diretórios.
  2. O arquivo tar.gz compactado é significativamente menor que os arquivos originais e o pacote tar.
  3. O uso de disco (du) pode mostrar valores diferentes dos tamanhos reais dos arquivos porque inclui a sobrecarga de alocação de blocos do sistema de arquivos.

O aumento no tamanho após o empacotamento é normal e esperado. O formato tar adiciona uma pequena quantidade de sobrecarga para armazenar metadados de arquivos, o que é necessário para reconstruir corretamente a estrutura de diretórios ao desempacotar. Essa sobrecarga geralmente é insignificante para diretórios maiores, mas pode ser perceptível para arquivos ou diretórios muito pequenos.

A compactação, por outro lado, reduz significativamente o tamanho do arquivo ao identificar e eliminar redundâncias nos dados. Isso é particularmente eficaz para arquivos de texto ou arquivos com conteúdo repetitivo.

Criando um Pacote Compactado em uma Única Etapa

Embora seja útil entender as etapas separadas de criação de um pacote tar e sua posterior compactação, na prática, essas etapas costumam ser combinadas. O comando tar possui uma opção integrada para compactar o pacote usando gzip enquanto ele está sendo criado.

Vamos criar um pacote tar compactado do nosso test_dir em uma única etapa:

cd ~/project
tar -czvf test_combined.tar.gz test_dir

Este comando é semelhante ao que usamos antes, com uma adição importante:

  • -z: Esta opção instrui o tar a compactar o pacote usando gzip.

O arquivo test_combined.tar.gz resultante é equivalente ao que criamos nas duas etapas anteriores, mas fizemos tudo de uma vez.

Para visualizar o conteúdo deste pacote compactado sem extraí-lo:

tar -tzvf test_combined.tar.gz

A opção -z aqui informa ao tar que estamos lidando com um arquivo compactado com gzip.

Extraindo Arquivos de um Pacote Compactado

Agora que criamos pacotes compactados, é importante saber como extrair arquivos deles. Vamos extrair o conteúdo do nosso arquivo test_combined.tar.gz:

mkdir extracted
tar -xzvf test_combined.tar.gz -C extracted

Vamos detalhar este comando:

  • mkdir extracted: Cria um novo diretório chamado extracted onde colocaremos o conteúdo do nosso pacote.
  • tar: O comando que estamos usando para extrair o pacote.
  • -x: Esta opção instrui o tar a extrair arquivos de um pacote.
  • -z: Esta opção é necessária porque estamos lidando com um arquivo compactado com gzip.
  • -v: Torna a operação detalhada, mostrando cada arquivo conforme ele é extraído.
  • -f: Seguido pelo nome do arquivo de pacote do qual queremos extrair.
  • -C extracted: Esta opção instrui o tar a mudar para o diretório extracted antes de extrair os arquivos.

Após executar este comando, você deverá ver uma lista de arquivos sendo extraídos.

Para verificar a extração, você pode usar:

tree extracted

Ou se o tree não estiver disponível:

ls -R extracted

Isso mostrará a estrutura de diretórios e os arquivos que estavam no pacote.

Usando zip para Compatibilidade Entre Plataformas

Embora o tar e o gzip sejam comuns em sistemas Linux e do tipo Unix, o formato zip é frequentemente usado para melhor compatibilidade com sistemas Windows. Vamos criar um arquivo zip do nosso test_dir:

cd ~/project
zip -r test_archive.zip test_dir

Aqui está o que este comando faz:

  • zip: O comando para criar um arquivo zip.
  • -r: Esta opção instrui o zip a trabalhar de forma recursiva, incluindo todos os arquivos e subdiretórios.
  • test_archive.zip: Este é o nome que estamos dando ao nosso arquivo zip.
  • test_dir: Este é o diretório que estamos adicionando ao arquivo zip.

Para descompactar este arquivo, você pode usar:

unzip -d unzipped_files test_archive.zip

A opção -d especifica o diretório onde descompactar. Se unzipped_files não existir, o unzip o criará.

Arquivos zip têm a vantagem de serem facilmente reconhecidos e utilizáveis em praticamente todos os sistemas operacionais, tornando-os uma boa escolha para compartilhar arquivos com usuários em diferentes plataformas.

Resumo

Neste laboratório, aprendemos várias técnicas importantes de empacotamento e compactação de arquivos comumente usadas no Linux:

  1. Criamos uma estrutura de diretórios de exemplo para trabalhar, demonstrando como organizar arquivos e diretórios.
  2. Usamos o tar para empacotar arquivos sem compactação, o que é útil para agrupar vários arquivos e diretórios.
  3. Aprendemos como extrair arquivos de um pacote tar, uma habilidade essencial ao lidar com arquivos empacotados.
  4. Usamos o gzip para compactar arquivos, o que pode reduzir significativamente o tamanho dos arquivos para armazenamento ou transferência.
  5. Aprendemos a diferença entre empacotamento e compactação, compreendendo seus propósitos e casos de uso distintos.
  6. Aprendemos como combinar tar e gzip para criar pacotes compactados em uma única etapa, uma operação comum em sistemas Linux.
  7. Praticamos a extração de arquivos de pacotes compactados, outra habilidade crucial ao trabalhar com arquivos empacotados e compactados.
  8. Por fim, usamos o zip para criar arquivos com melhor compatibilidade entre plataformas, particularmente útil ao compartilhar arquivos com usuários de Windows.

Essas habilidades são essenciais para o gerenciamento eficiente de arquivos no Linux, especialmente ao lidar com grandes quantidades de dados ou ao transferir arquivos entre sistemas. Lembre-se de que a compactação pode reduzir significativamente o tamanho dos arquivos, tornando o armazenamento e a transferência muito mais eficientes.

À medida que você continuar trabalhando com Linux, descobrirá que esses comandos são inestimáveis para gerenciar seus arquivos e diretórios. Pratique essas operações para se tornar proficiente em técnicas de empacotamento e compactação de arquivos.