Como compactar e descompactar arquivos com Gzip no Linux

Publicados: 2022-06-28
Terminal Linux em um fundo vermelho.
fatmawati achmad zaenuri/Shutterstock.com

Existem muitos utilitários de compactação de arquivos, mas o que você certamente encontrará em todas as distribuições Linux é o gzip . Se você aprender a usar apenas uma ferramenta de compactação, deve ser gzip .

RELACIONADO: Como funciona a compactação de arquivos?

Algoritmos e árvores

A ferramenta de compactação de dados gzip foi escrita no início dos anos 90 e ainda é encontrada em todas as distribuições Linux. Existem outras ferramentas de compactação disponíveis, mas não importa em qual computador Linux você precise trabalhar, você encontrará o gzip nele. Então, se você sabe como usar gzip , está pronto para ir sem a necessidade de instalar nada.

gzip é uma implementação do algoritmo DEFLATE que foi inventado - e patenteado - por Phil Katz do famoso PKZIP. O algoritmo DEFLATE melhorou os algoritmos de compressão anteriores que operavam em variações de um tema. Os dados a serem compactados são verificados e as strings exclusivas são identificadas e adicionadas a uma árvore binária.

As strings exclusivas recebem um token de ID exclusivo em virtude de sua posição na árvore . Os tokens são usados ​​para substituir as strings nos dados e, como os tokens são menores do que os dados que substituíram, o arquivo é compactado. Substituir os tokens pelas strings originais re-infla os dados de volta ao seu estado descompactado.

Benchmarked: Qual é o melhor formato de compactação de arquivo?
RELACIONADO Benchmarked: Qual é o melhor formato de compactação de arquivo?

O algoritmo DEFLATE adicionou a reviravolta de que as strings encontradas com mais frequência receberam os menores tokens e as strings encontradas com menos frequência receberam as maiores. O algoritmo DEFLATE também incorporou ideias de dois métodos de compressão anteriores, codificação Huffman e compressão LZ77.

No momento da escrita, o algoritmo DEFLATE tem quase três décadas. Três décadas atrás, os custos de armazenamento de dados eram altos e as velocidades de transmissão eram lentas. A compactação de dados era de vital importância.

4 maneiras de liberar espaço em disco no Linux
RELACIONADO 4 maneiras de liberar espaço em disco no Linux

O armazenamento de dados é muito mais barato hoje e as velocidades de transmissão são muito mais rápidas. Mas temos muito mais dados para armazenar, e as pessoas em todo o mundo estão acessando armazenamento em nuvem e serviços de streaming. A compactação de dados ainda é de vital importância, mesmo que tudo o que você esteja fazendo seja encolher algo que precise carregar ou transmitir, ou esteja tentando recuperar algum espaço em um disco rígido local.

O comando gzip

Quanto maior for um arquivo, melhor será a compactação. Isto é devido a duas razões. Uma é que haverá muitas sequências de bytes repetidas e idênticas em um arquivo grande. A segunda razão é que a lista de strings e tokens precisa ser armazenada no arquivo compactado para que a descompactação possa ocorrer. Com um arquivo muito pequeno, essa sobrecarga pode eliminar os benefícios da compactação. Mas mesmo com um arquivo relativamente pequeno, é provável que haja alguma redução no tamanho.

Compactando um arquivo

Para compactar um arquivo, tudo o que você precisa fazer é passar o nome do arquivo para o comando gzip . Vamos verificar o tamanho original do arquivo, compactá-lo e, em seguida, verificar o tamanho do arquivo compactado.

 ls -lh calc-sheet.ods
 gzip calc-sheet.ods
 ls -lh cal-* 

Compactando uma planilha

O arquivo original, uma planilha chamada “calc-sheet.ods”, tem 11 KB, e o arquivo compactado, também conhecido como arquivo morto, tem 9,3 KB. Observe que o nome do arquivo é o nome do arquivo original com “.gz” anexado a ele.

O primeiro uso do comando ls tem como alvo um arquivo específico, a planilha. O segundo uso de ls procura todos os arquivos que começam com “calc-”, mas encontra apenas o arquivo compactado. Isso porque, por padrão, o gzip cria o arquivo morto e exclui o arquivo original.

Isso não é um problema. Se você precisar do arquivo original, poderá recuperá-lo do arquivo morto. Mas se preferir manter o arquivo original, você pode usar a opção -k (manter).

 gzip -k calc-sheet.ods
 ls -lh calc-sheet.* 

Compactando um arquivo e mantendo o arquivo original

Desta vez, o arquivo ODS original é mantido.

Descompactando um arquivo

Para descompactar um arquivo GZ, use a opção -d (descompactar). Isso extrairá o arquivo compactado do arquivo e o descompactará para que seja indistinguível do arquivo original.

 ls calc-sheet.*
 gzip -d calc-sheet.ods.gz
 ls calc-sheet.* 

Descompactando um arquivo com gzip

Desta vez, podemos ver que o gzip excluiu o arquivo compactado após extrair o arquivo original. Para reter o arquivo, precisamos usar a opção -k (manter) novamente, bem como a opção -d (descompactar).

 ls calc-sheet.*
 gzip -d calc-sheet.ods.gz
 ls calc-sheet.* 

Descompactando um arquivo e retendo o arquivo morto

Desta vez, o gzip não exclui o arquivo compactado.

RELACIONADO: Por que os arquivos excluídos podem ser recuperados e como você pode evitá-lo

Descompactando e sobrescrevendo

Se você tentar extrair um arquivo em um diretório onde o arquivo original — ou um arquivo diferente com o mesmo — existe, o gzip solicitará que você opte por abandonar a extração ou substituir o arquivo existente.

 gzip -d arquivo-texto.txt.gz 

Substituir o prompt do gzip quando o arquivo no arquivo já existe no diretório

Se você sabe de antemão que está feliz em ter o arquivo no diretório substituído pelo arquivo do arquivo morto, use a opção -f (forçar).

 gzip -df arquivo-texto.txt.gz 

Forçando a substituição de um arquivo existente

O arquivo é substituído e você retorna silenciosamente à linha de comando.

Compactando Árvores de Diretórios

A opção -r (recursiva) faz com que o gzip comprima os arquivos em uma árvore de diretórios inteira. Mas o resultado pode não ser o que você espera.

Aqui está a árvore de diretórios que vamos usar neste exemplo. Cada diretório contém um arquivo de texto.

 nível de árvore1 

Testar a estrutura da árvore de diretórios

Vamos usar gzip na árvore de diretórios e ver o que acontece.

 gzip -r nível1/
 nível de árvore1 

Estrutura de diretórios depois de executar o gzip nele

O resultado é que o gzip criou um arquivo para cada arquivo de texto na estrutura de diretórios. Ele não criou um arquivo de toda a árvore de diretórios. Na verdade, o gzip só pode colocar um único arquivo em um arquivo.

Podemos criar um arquivo que contenha uma árvore de diretórios e todos os seus arquivos, mas precisamos colocar outro comando em ação. O programa tar é usado para criar arquivos de muitos arquivos, mas não possui suas próprias rotinas de compactação. Mas usando as opções apropriadas com tar , podemos fazer com que o tar envie o arquivo morto por meio do gzip . Dessa forma, obtemos um arquivo compactado e um arquivo multi-arquivo ou multi-diretório.

 tar -czvf level1.tar.gz level1

As opções tar são:

  • c : Crie um arquivo.
  • z : Envie os arquivos através do gzip .
  • v : Modo detalhado. Imprima na janela do terminal o que o tar está fazendo.
  • f level1.tar.gz : Nome do arquivo a ser usado para o arquivo morto.

Saída do tar trabalhando na árvore de diretórios

Isso arquiva a estrutura da árvore de diretórios e todos os arquivos dentro da árvore de diretórios.

RELACIONADO: Como compactar e extrair arquivos usando o comando tar no Linux

Obtendo informações sobre arquivos

A opção -l (lista) fornece algumas informações sobre um arquivo morto. Ele mostra os tamanhos compactados e não compactados do arquivo no arquivo morto, a taxa de compactação e o nome do arquivo.

 gzip -l level1.tar.gz
 gzip -l arquivo-texto.txt.gz 

Usando a opção -l list para ver as estatísticas de compactação de um arquivo

Você pode verificar a integridade de um arquivo morto com a opção -t (teste).

 gzip -t level1.tar.gz 

Testando um arquivo com a opção -t

Se tudo estiver bem, você retornará silenciosamente à linha de comando. Nenhuma notícia é boa notícia.

Se o arquivo estiver corrompido ou não for um arquivo, você será informado sobre isso.

 gzip -t not-an-archive.gz 

Usando a opção -t para testar um arquivo que não é um arquivo

Velocidade versus compressão

Você pode optar por priorizar a velocidade de criação do arquivo ou o grau de compactação. Você faz isso fornecendo um número como opção, de -1 a top -9 . A opção -1 fornece a velocidade mais rápida com o sacrifício da compressão e -9 fornece a compressão mais alta com o sacrifício da velocidade.

A menos que você forneça uma dessas opções, o gzip usa -6 .

 gzip -1 calc-sheet.ods
 ls -lh calc-sheet.ods.gz
 gzip -9 calc-sheet.ods
 ls -lh calc-sheet.ods.gz
 gzip -6 calc-sheet.ods
 ls -lh calc-sheet.ods.gz 

Usando gzip com diferentes prioridades para velocidade e compressão

Com um arquivo tão pequeno como esse, não vimos nenhuma diferença significativa na velocidade de execução, mas houve uma pequena diferença na compactação.

Curiosamente, não há diferença entre usar a compactação de nível 9 e a compactação de nível 6. Você só pode extrair tanta compactação de qualquer arquivo e, neste caso, esse limite foi atingido com a compactação de nível 6. Aumentar para 9 não trouxe redução adicional no tamanho do arquivo. Com arquivos maiores, a diferença entre o nível 6 e o ​​nível 9 seria mais pronunciada.

Comprimido, Não Protegido

Não confunda compactação com criptografia ou qualquer forma de proteção. A compactação de um arquivo não oferece segurança ou privacidade aprimorada. Qualquer pessoa com acesso ao seu arquivo pode usar o gzip para descompactá-lo.

RELACIONADO: Liste os 10 maiores arquivos ou diretórios no Linux