Como compactar e descompactar arquivos com Gzip no Linux
Publicados: 2022-06-28
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.
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.
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-*
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.*
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.*
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.*
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
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
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
Vamos usar gzip
na árvore de diretórios e ver o que acontece.
gzip -r nível1/
nível de árvore1
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.
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
Você pode verificar a integridade de um arquivo morto com a opção -t
(teste).
gzip -t level1.tar.gz
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
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
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