Como compactar e descompactar arquivos com Gzip no Linux

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, ela deve ser gzip.

Algoritmos e árvores

A gzipferramenta de compressão de dados 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á gzipnele. Então, se você sabe como usar gzip, você 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  PKZIP  famoso. 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.

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.

Recomendado:  Por que o Windows 10 diz que sua rede Wi-Fi “não é segura”

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, basta passar o nome do arquivo para o gzipcomando. 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 lscomando tem como alvo um arquivo específico, a planilha. O segundo uso de lsprocura todos os arquivos que começam com “calc-”, mas encontra apenas o arquivo compactado. Isso porque, por padrão, gzipcria 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 -kopção (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 -dopção (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 gzipexcluiu o arquivo morto após extrair o arquivo original. Para reter o arquivo, precisamos usar a -kopção (manter) novamente, bem como a -dopção (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.

Recomendado:  Traga sua lista de Natal para o século 21 usando uma lista de desejos da Amazon

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,   gzip  será solicitado 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 -ropção (recursiva) faz gzipcom que os arquivos sejam compactados 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 gzipna á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 é gzipa criação de 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, gzipsó 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 tarprograma é usado para criar arquivos de muitos arquivos, mas não possui rotinas próprias de compactação. Mas usando as opções apropriadas com tar, podemos fazer  tar o push do arquivo morto  gzip. Dessa forma, obtemos um arquivo compactado e um arquivo multi-arquivo ou multi-diretório.

tar -czvf level1.tar.gz level1

As taropções são:

  • c : Crie um arquivo.
  • z : Transfira os arquivos gzip.
  • v : Modo detalhado. Imprima na janela do terminal o que tarestá acontecendo.
  • f level1.tar.gz : Nome do arquivo a ser usado para o arquivo morto.
Recomendado:  Como limpar seu histórico de pesquisa do Google

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.

Obtendo informações sobre arquivos

A -lopção (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 -topção (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 -1cima para baixo -9. A -1opção oferece a velocidade mais rápida com o sacrifício da compressão e -9a maior compressão 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 usá gzip-lo para descompactá-lo.