Visão Geral
Entre os utilitários clássicos do ecossistema Linux, o utilitário bzip2 destaca-se pela excelente taxa de compressão gerada pelo algoritmo de ordenação por blocos de Burrows-Wheeler. Neste guia prático, exploraremos desde a retenção de dados de origem durante o empacotamento até a inspeção direta de arquivos comprimidos sem prévia extração. Acompanhe os passos no terminal para dominar as ferramentas complementares bzip2, bunzip2 e bzcat em suas tarefas diárias de administração de sistemas.
Verificação do Pacote e Compactação com Preservação do Arquivo (-k, -v)
Antes de iniciar os testes práticos, validamos se o utilitário bzip2 está presente no sistema operacional ou realizamos sua instalação via gerenciador de pacotes apt.

Para estruturar nosso laboratório, geramos uma massa de teste inicial denominada sample1.txt utilizando o utilitário echo.

O bzip2 processa arquivos aplicando agrupamento em blocos com codificação Huffman para reduzir o consumo de armazenamento.
Vale lembrar que o comportamento padrão da ferramenta substitui o item original pelo arquivo gerado com a extensão .bz2. O uso da flag -v enriquece a execução, exibindo métricas de compressão e status do processamento.
⚙️ [Parâmetros Principais]
-d : Descompacta arquivos com terminação .bz2.-k : Mantém intacto o arquivo de entrada (não remove o original após a operação).-v : Habilita a saída detalhada, informando a proporção de economia e progresso.-f : Força a gravação de arquivos de saída, sobrescrevendo eventuais duplicatas existentes.-t : Executa a checagem estrutural de integridade do arquivo compactado.-c : Encaminha o fluxo gerado para a saída padrão (stdout) em vez de gravar no disco diretamente.-1 a -9 : Define o tamanho dos blocos de compressão, balanceando velocidade e taxa de redução (o padrão é -9).

Para demonstrar a retenção de arquivos de origem durante a rotina, criamos um segundo arquivo de texto chamado sample2.txt.

Disparamos o comando bzip2 -vk sample2.txt, que nos fornece detalhes do procedimento e impede que o arquivo original seja descartado pelo sistema.
Ao aplicar o modificador -k, garantimos a convivência tanto do documento legível sample2.txt quanto da versão compactada sample2.txt.bz2.

A checagem dos diretórios por meio do comando ls -l sample* ilustra nitidamente a diferença: o primeiro caso manteve apenas sample1.txt.bz2, enquanto o uso de -k preservou sample2.txt ao lado de sample2.txt.bz2.

Extração de Dados e Teste de Integridade (-d, -t, bunzip2)
Antes de restaurar dados críticos, podemos avaliar se o arquivo não sofreu corrupção executando bzip2 -tv sample1.txt.bz2.
O parâmetro -t analisa a integridade dos dados sem gerar escrita no disco, enquanto -v expõe o resultado da verificação linha a linha.

Para descomprimir o arquivo observando o andamento das operações, executamos bzip2 -dv sample1.txt.bz2.
Como omitimos o parâmetro -k, o arquivo comprimido .bz2 é removido imediatamente após a descompressão bem-sucedida, restando unicamente o restaurado sample1.txt.

Como alternativa prática, executamos bunzip2 -vk sample2.txt.bz2 para efetuar a descompressão protegendo o arquivo compactado contra remoção.
O utilitário bunzip2 funciona como um atalho nativo para a instrução bzip2 -d; quando combinado ao argumento -k, mantém o pacote sample2.txt.bz2 disponível após a extração.

Inspecionamos a listagem com ls -l sample* para comprovar a coexistência pacífica dos arquivos compactados e descompactados em disco.

Leitura Direta sem Descompactar e Uso do stdout (-c, bzcat)
Para exercitar fluxos baseados na saída padrão (stdout) e visualização sem overhead de I/O, instanciamos o arquivo sample3.txt.

Executamos bzip2 -c sample3.txt > sample3.txt.bz2, redirecionando o fluxo de bits comprimidos para o arquivo de destino.
Essa abordagem com -c utiliza redirecionamento de shell (>), dispensando modificadores adicionais para proteger o arquivo-fonte contra exclusão.

Quando há necessidade imediata de conferir registros ou dados textuais dentro do arquivo compactado, utilizamos o comando bzcat sample3.txt.bz2.
O comando bzcat atua de forma equivalente a bzip2 -dc, exibindo o texto decodificado no terminal sem demandar espaço extra em disco para extração prévia.

Com a instrução ls -l sample3*, constatamos que o modelo com redirecionamento de stdout preservou tanto a fonte sample3.txt quanto o arquivo resultante sample3.txt.bz2.

Ajuste dos Níveis de Compressão (-1 a -9) e Comparativo de Tamanho
Para aferir a variação de compactação e tempo de processamento conforme a escala de parâmetros, construímos uma carga com seq 1 50000 > large_data.txt.

Rodamos bzip2 -1 -vk -c large_data.txt > large_fast.bz2 priorizando agilidade na execução com a chave -1.
O nível -1 opera com blocos reduzidos de 100 KB, economizando memória volátil e finalizando o processamento em menor tempo computacional.

Em seguida, empregamos a opção -9 via bzip2 -9 -vk -c large_data.txt > large_best.bz2 com o propósito de maximizar a compressão.
Esse modo reflete a configuração nativa do software, alocando blocos de 900 KB e consumindo mais processamento para entregar a menor pegada possível em disco.

Finalizamos avaliando a pegada de armazenamento dos artefatos por meio do comando ls -lh large*.
A partir do documento original de 283K, notamos os resultados de large_fast.bz2 (56K) e large_best.bz2 (67K), permitindo que você escolha o equilíbrio ideal entre uso de CPU e densidade de dados dependendo do cenário de trabalho.

Com estes exemplos práticos no Ubuntu, você conheceu as principais técnicas de compactação, descompressão, controle de fluxo e preservação de dados fornecidas pelo ecossistema bzip2.
Selecione as opções que melhor atendam à sua demanda e otimize o gerenciamento de espaço de seus servidores e ambientes de desenvolvimento.