segunda-feira, 4 de janeiro de 2010

Compactação e Descompactação

Umas das coisas mais comuns de se ver pela Internet são os arquivos compactados. Programas, textos, códigos, geralmente tudo vem em formato compactado. Este tutorial ensina os mecanismos básicos para compactar e descompactar arquivos no Linux.

 

tar – Agrupando arquivos

Compactar arquivos e directórios para o que chamamos de arquivo compactado tem na verdade duas fases: primeiro agrupa-se os arquivos e directórios em um só, depois compacta-se este arquivo agrupado.

O tar é um utilitário que faz o primeiro passo. Ele é um programa de arquivamento feito para armazenar e extrair arquivos e directórios do que chamamos de “arquivo tar” (ou tarball). Por padrão, o tar espera que os procedimentos de armazenamento e extração sejam feitos em uma fita DAT, mas graças ao parâmetro -f podemos utilizá-lo em arquivos comuns do sistema. Por enquanto, aqui trabalharemos apenas em arquivos.

Por agrupar todos os arquivos em um só, o tar é a ferramenta padrão para distribuição de arquivos. Provavelmente qualquer programa ou código-fonte para Linux que vermos disponível na Internet estará neste formato, acrescentado de uma compactação que veremos adiante.

Sintaxe: $ tar <ação> [opções] <tarball destino> <arquivos> [arquivos2] ...

Na ação, vamos ressaltar que podemos utilizar uma destas três: -c para criar (agrupar), -x para extrair (desagrupar) e -t para listar. Existem outras ações também, caso queira saber consulte a página de manual.

Criando um arquivo chamado backup-etc.tar:

# cd /

# tar -cvf backup-etc.tar etc/

...corte...

# ls -lh backup-etc.tar

-rw-r--r-- 1 root root 23M 2008-08-31 02:12 backup-etc.tar

Note que usamos a opção -v, que ativa o modo verbose, mostrando todos os arquivos que estão sendo processados.

Agora vamos listar o conteúdo do arquivo que criamos:

# tar -tf backup-etc.tar

...corte...

Como está tudo dentro do arquivo, vamos descompactá-lo dentro do diretório /tmp/backup-etc:

# mkdir -p /tmp/backup-etc

# cd /tmp/backup-etc

# tar -xvf /backup-etc.tar

...corte...

# ls

Pronto. Uma cópia do diretório /etc!

gzip, bzip2 – Compactando arquivos

Agora que temos todos os arquivos agrupados em um só, podemos utilizar o gzip ou bzip2 para compactar este arquivo. A diferença entre os dois é apenas em seu algoritmo, ou seja, o modo e a eficiência com que compactam. O gzip existe há muito mais tempo, é menos faminto em termos de processamento. O bzip2 tem uma compactação melhor (principalmente para arquivos texto), mas utiliza muito mais o processador.

A extensão de arquivos em gzip é .gz. A extensão de arquivos em bzip2 é bz2.

Sintaxe: $ gzip [-d] arquivo[.gz]

Sintaxe: $ bzip2 [-d] arquivo[.bz2]

Ao compactar um arquivo, o programa automaticamente adiciona a extensão correspondente ao seu nome. Exemplo:

$ ls -lh texto*

-rw-r--r-- 1 eitch eitch 89K 2008-06-20 02:26 texto

-rw-r--r-- 1 eitch eitch 89K 2008-06-20 02:26 texto2

$ gzip texto

$ bzip2 texto2

$ ls -lh texto*

-rw-r--r-- 1 eitch eitch 26K 2008-08-31 02:26 texto2.bz2

-rw-r--r-- 1 eitch eitch 30K 2008-08-31 02:26 texto.gz

Ao descompactar estes arquivos, o programa irá retirar automaticamente a sua extensão. Vamos descompactar os arquivos criados anteriormente:

$ gzip -d texto.gz

$ bzip2 -d texto2.bz2

$ ls -lh texto*

-rw-r--r-- 1 eitch eitch 89K 2008-08-31 02:26 texto

-rw-r--r-- 1 eitch eitch 89K 2008-08-31 02:26 texto2

Agora vamos compactar o arquivo backup-etc.tar criado com o comando tar:

# cd /

# ls -lh backup-etc.tar

-rw-r--r-- 1 root root 23M 2008-08-31 02:30 backup-etc.tar

# bzip2 backup-etc.tar

# ls -lh backup-etc.tar.bz2

-rw-r--r-- 1 root root 2.1M 2008-08-31 02:30 backup-etc.tar.bz2

O que era antes 23MB, agora 2.1MB.

Ao descompactar os arquivos, podemos utilizar também os comandos gunzip e bunzip2, que fazem exatamente a mesma coisa que a opção -d do gzip e bzip2. Por exemplo, isto seria o equivalente para descompactar o arquivo backup-etc.tar.bz2 recém-criado:

$ bunzip2 backup-etc.tar.bz2

Para facilitar as coisas e não precisar usar dois comandos para compactar e descompactar vários arquivos, o tar possui dois parâmetros que integram o gzip2 e bzip2: -z e -j respectivamente. Ao utilizar estes parâmetros no agrupamento ou na extração, ele vai utilizar o respectivo compactador. Por exemplo, para fazer o backup dos diretórios /boot e /etc apenas com o tar:

# cd /

# tar -cjvf backup2.tar.bz2 boot/ etc/

...corte...

# ls -lh backup2.tar.bz2

-rw-r--r-- 1 root root 18M 2008-08-31 02:43 backup2.tar.bz2

Desta vez já criamos o arquivo compactado. Para descompactar é a mesma coisa, basta apenas acrescentar o parâmetro do compactador ao comando tar:

# cd /tmp/backup

# tar -xjvf /backup2.tar.bz2

...corte...

zip, rar – Outros formatos de arquivos compactados

Além dos dois tradicionais formatos de arquivos compactados (gzip e bzip2), podemos encontrar arquivos em outros formatos bem populares, como o ZIP e RAR. O ZIP é talvez um dos formatos de compactação mais antigos para quem este trabalhando em plataformas que não sejam UNIX…

Para compactar um arquivo no formato zip, utilizamos o comando zip da seguinte forma:

$ zip -r lab.zip /home/eitch/lab/

...corte...

O comando acima irá jogar no arquivo lab.zip o diretório /home/eitch/lab. O parâmetro -r no comando indica o fator recursivo: o zip vai compactar o diretório e todos seus arquivos e sub-diretórios. Se o -r não fosse usado, teríamos apenas o diretório lab/, sem mais nada.

Para descompactar o mesmo arquivo utilizamos o comando unzip:

$ unzip lab.zip

...corte...

Isto descompactará o arquivo lab.zip dentro do diretório atual. Pode ser útil que ao invés de ir descompactando logo o arquivo, verificar o que tem nele primeiro. Para isso basta executar:

$ unzip -l lab.zip

...corte...

Já o formato RAR, um popular formato de arquivo que circula principalmente em comunidades Peer-to-Peer, geralmente não vem junto com as distribuições Linux devido à sua licença proprietária. Por esse motivo, não recomendamos que você o utilize. Caso seja preciso, os utilitáros do RAR podem ser encontrados no endereço:

Alguns repositórios de terceiros distribuem pacotes de distribuição com o nome unrar. O unrar é o responsável pela descompactação dos arquivos em formato RAR e pode ser usado da seguinte forma:

$ unrar e arquivo.rar

Isto irá descompactar todo o conteúdo do arquivo.rar para o diretório atual. Para listar o conteúdo do arquivo:

$ unrar l arquivo.rar

0 comentários :

Enviar um comentário