Quando você estiver instalando ou atualizando softwares em sistemas Unix, as primeiras ferramentas com as quais se deve estar familiarizado são as de compressão e arquivamento. Existem dúzias de tais utilitários disponíveis. Alguns desses (tar e compress) datam dos primórdios do Unix, outros (gzip) são relativamente novos. O objetivo principal destes utilitários é colocar muitos arquivos juntos em um único arquivo, facilitando o transporte ou backup e comprimir os mesmos (reduzir a quantidade de espaço em disco necessário para armazenar um arquivo ou um conjunto de arquivos).
Iremos agora discutir os formatos de arquivo mais comuns e os utilitários que você provavelmente irá encontrar. Por exemplo, uma convenção quase universal no mundo Unix é transportar arquivos ou softwares como um arquivo tar, comprimido usando compress ou gzip. De forma a poder criar ou desempacotar esses arquivos você mesmo, é necessário conhecer as ferramentas.
Usando gzip
Gzip é um programa rápido e eficiente para compressão distribuído pelo projeto GNU. A função básica do gzip é pegar um arquivo, comprimí-lo, salvar a versão comprimida como arquivo.gz e remover o original. O arquivo original somente é removido se a operação de compressão é bem sucedida. É muito difícil acidentalmente apagar um arquivo dessa forma. É claro, sendo um software GNU, gzip tem mais opções do que você pode imaginar, e muitos aspectos de seu comportamento podem ser modificados usando essas opções.
Primeiramente, digamos que temos um grande arquivo chamado lixo.txt:
$ ls -l lixo.txt
-rw-r--r-- 1 mdw hack 312996 Nov 17 21:44 lixo.txt
Para comprimir esse arquivo, simplesmente usamos o comando:
$ gzip lixo.txt
Isto substitui o arquivo lixo.txt pela versão comprimida lixo.txt.gz. Dessa forma:
$ ls -l lixo.txt.gz
-rw-r--r-- 1 mdw hack 103441 Nov 17 21:44 lixo.txt.gz
Perceba que lixo.txt é removido ao final da execução do gzip.
Você pode dar ao gzip uma lista de nomes de arquivos; ele irá comprimir cada arquivo listado, armazenando cada um com um extensão ".gz". A eficiência da compressão do arquivo depende de seu formato e conteúdo. Por exemplo, muitos formatos de arquivos gráficos (tais como GIF e JPEG) já são bem comprimidos, e o gzip terá pouco ou nenhum efeito neles. Arquivos que comprimem bem geralmente incluem arquivos de texto puro e arquivos binários tais como executáveis e bibliotecas. Você pode obter informações sobre um arquivo "gzipado" usando gzip -l. Por exemplo:
$ gzip -l lixo.txt.gz
compressed uncompr. ratio uncompressed_name
103115 312996 67.0% lixo.txt
Para obter o arquivo original a partir da versão comprimida, usamos gunzip:
$ gunzip lixo.txt.gz
$ ls -l lixo.txt
-rw-r--r-- 1 mdw hack 312996 Nov 17 21:44 lixo.txt
O qual é idêntico ao arquivo original. Note que quando você utiliza o gunzip em um arquivo, a versão comprimida é removida uma vez que a descompressão está completa.
O gzip armazena o nome do arquivo original juntamente com a versão comprimida, para poder restaurá-lo durante a descompressão. Para isso utilizamos a opção -N juntamente com gunzip. Considere a seguinte seqüência de comandos:
$ gzip lixo.txt
$ mv lixo.txt.gz rubbish.txt.gz
Se utilizássemos gunzip rubbish.txt.gz nesse ponto, o arquivo descomprimido iria ser nomeado rubbish.txt. Entretanto com a opção -N obtemos:
$ gunzip -N rubbish.txt.gz
$ ls -l lixo.txt
-rw-r--r-- 1 mdw hack 312996 Nov 17 21:44 lixo.txt
Usando o tar
O comando tar é um utilitário capaz de empacotar diversos arquivos dentro de um só, mantendo todas as informações, como permissões e propriedade. O nome "tar" vem tape archive, porque essa ferramenta foi desenvolvida originalmente para gerar backups em fitas. Atualmente, o uso do tar está bastante difundido, como veremos.
Voltando ao exemplo do arquivo de lixo, suponhamos agora que há, não um, mas vários arquivos de lixo, todos chamados lixo<n>.txt. Antes de compactá-los, um a um, podemos juntá-los em um só arquivo, usando o comando tar, assim:
$ tar -cvf lixo.tar lixo?.txt
Isto faz com que todos os arquivos que correspondem à máscara "lixo?.txt" sejam empacotados - juntados - em um só arquivo, intitulado lixo.tar.
As opções mais comuns para o comando tar são:
- -c, --create = Criar um novo arquivo;
- -t, --list = Listar o conteúdo de um arquivo tar;
- -x, --extract, --get = Extrair o conteúdo de um arquivo tar;
- -v, --verbose = Utilizar modo "verbose".
Dessa forma, para extrair os arquivos empacotados pelo comando tar, pode-se utilizar:
$ tar -xvf lixo.tar
Usando o tar com o gzip
O comando tar não compacta os dados armazenados no arquivo. Se você estiver criando um arquivo tar, a partir de três arquivos de 200KB, o seu arquivo resultante terá em torno de 600KB. Para a compactação, pode ser utilizado o gzip (ou qualquer outro programa de compactação). Exemplo:
$ tar -cvf lixo.tar lixo?.txt
$ gzip lixo.tar
Como resultado da execução desses dois comandos é apresentado um arquivo "empacotado" e "compactado" (lixo.tar.gz). A utilização em conjunto, dos comandos tar e gzip, se tornou bastante comum, o que levou ao desenvolvimento de uma forma de uní-los. Assim, por meio de parâmetros passados ao comando tar, é possível empacotar e compactar os dados de uma só vez. Com isso, os dois comandos acima podem ser resumidos da seguinte forma:
$ tar -czvf lixo.tar.gz lixo?.txt
ou
$ tar -czvf lixo.tgz lixo?.txt
Para descompactar um arquivo com extensões .tar.gz, ou extensão .tgz, pode-se utilizar:
$ gunzip lixo.tar.gz
e depois:
$ tar -xvf lixo.tar
Pode-se também utilizar os comandos em conjunto:
$ tar -xzvf lixo.tgz