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
.
Índice
Algoritmos e árvores
A gzip
ferramenta 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á gzip
nele. 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.
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 gzip
comando. 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 ls
comando 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, 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 -k
opção (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 -d
opçã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.*
Desta vez, podemos ver que gzip
excluiu o arquivo morto após extrair o arquivo original. Para reter o arquivo, precisamos usar a -k
opção (manter) novamente, bem como a -d
opção (descompactar).
ls calc-sheet.*
gzip -d calc-sheet.ods.gz
ls calc-sheet.*
Desta vez, o gzip não exclui o arquivo compactado.
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
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 -r
opção (recursiva) faz gzip
com 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
Vamos usar gzip
na árvore de diretórios e ver o que acontece.
gzip -r nível1/
nível de árvore1
O resultado é gzip
a 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, 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 tar
programa é 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 tar
opções são:
- c : Crie um arquivo.
- z : Transfira os arquivos
gzip
. - v : Modo detalhado. Imprima na janela do terminal o que
tar
está acontecendo. - 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.
Obtendo informações sobre arquivos
A -l
opçã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
Você pode verificar a integridade de um arquivo morto com a -t
opção (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
cima para baixo -9
. A -1
opção oferece a velocidade mais rápida com o sacrifício da compressão e -9
a 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
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.