Linux Essencial/Lição Compactando e descompactando arquivos
- Objetivo(s): Oferecer conhecimentos sobre os compactadores de arquivo e seu uso via linha de comando.
- Direitos autorais e licença: Veja notas de direitos autorais e licença no final da lição.
Compactadores
editarUma das formas mais importantes encontradas para o armazenamento e transporte das informações por um meio não ativo (disquete por exemplo) é a compactação, que nada mais é do que diminuir o seu tamanho físico sem que haja a perda do valor interno.
Um compactador ao receber um arquivo como entrada fará com que todos os dados iguais sejam armazenados num mesmo local, e ao descompactá-los eles serão depositados no local escolhido pelo usuário.
Inicialmente todas as ferramentas e formatos de compactação estão disponíveis em ambiente GNU/Linux. Os algoritmos de compactação empregados nas diferentes ferramentas possuem características bem singulares, com vantagens e desvantagens entre si. Enquanto um é melhor sobre arquivos do tipo texto, outro é melhor para figuras e assim por diante. Na hora da criação de novos arquivos compactados, a escolha por um formato fica a gosto do usuário. Ao receber arquivos em um determinado formato, só resta-nos utilizar a ferramenta correspondente.
Tipos de compactadores
editarbzip2
editarO compactador bzip2 é um dos mais comuns e eficientes dentre os compactadores existentes para o sistema GNU/Linux.
Sintaxe:
bzip2 [-opção] nome_arquivo
Opção:
k - mantém o arquivo original (backup)
q - compacta mesmo com erro
d - descompacta o arquivo do tipo .bz2
f - sobrescreve o arquivo já existente
help - chama ajuda
A opção "f " que sobrescreve um arquivo existente pode ser útil nos casos de alteração de arquivo corrompido dentro de um sistema, sem haver a necessidade de removê-lo primeiro, tal como funciona em cópias ou remoções de arquivos.
Um arquivo, ao ser compactado pela ferramenta bzip2, terá a sua extensão acrescida de .bz2.
Para a descompactação de um arquivo podem ser selecionados dois modos, um que é mais comum aos descompactadores, a colocação das letras un (usado para negação em inglês) na palavra, que para este caso seria:
bunzip2, conforme a sintaxe:
bunzip2 [-opção] nome_arquivo.bz2
Opção:
f - sobrescreve o arquivo se existente
Outra forma é passar a opção -d (descompacta arquivos do tipo .bz2) junto com o comando de compactação, ficando com o seguinte formato:
bzip2 -d nome_arquivo.bz2
possuindo o mesmo efeito que o bunzip2.
Exemplo de compactação de um arquivo qualquer:
$bzip2 teste $ls -l teste* -rw-r--r-- 1 aluno aluno 4147 Feb 21 11:01 teste.bz2
Exemplo de descompactação do arquivo anterior:
$bunzip2 teste.bz2 $ls -l teste* -rw-r--r-- 1 aluno aluno 25223 Dec 21 11:01 teste
gzip
editarGzip é um compactador muito conhecido no sistema Linux, tendo uma boa aceitação por parte dos usuários que realizam testes com ele. A sua compactação é melhor vista em arquivos dos tipos texto ou figura, sobre o ponto de vista de alguns outros compactadores. Este compactador também é muito utilizado no término de um novo programa, que junto com os scripts (programas gerenciadores), que são passados para os usuários, para maiores detalhes vide tópico sobre gerenciamento de arquivos.
Um arquivo quando é compactado com o gzip não deixa uma cópia do arquivo original. É recomendado fazer uma cópia de segurança antes de passar o compactador.
A extensão gerada com esta ferramenta é o .gz, mantendo todas as informações originais, tais como o proprietário, as permissões e a data de criação.
-rw-rw---- 1 cleberjr cleberjr 556 Nov 18 10:01 margem.swf [cleberjr@saproad cleberjr]$ chmod 666 margem.swf [cleberjr@saproad cleberjr]$ gzip margem.swf [cleberjr@saproad cleberjr]$ ls -l margem.swf.gz -rw-rw-rw- 1 cleberjr cleberjr 590 Nov 18 10:01 margem.swf.gz [cleberjr@saproad cleberjr]$ chmod 660 margem.swf.gz [cleberjr@saproad cleberjr]$ gunzip margem.swf.gz [cleberjr@saproad cleberjr]$ ls -l margem.swf -rw-rw---- 1 cleberjr cleberjr 556 Nov 18 10:01 margem.swf
Sintaxe:
gzip [-opção] nome_arquivo/diretório
Opção:
f - força a descompactação sobre arquivos existentes e compactação sobre links simbólicos;
r - trabalha de forma recursiva sob diretórios;
t - testa a integridade do arquivo compactado;
d - descompacta o arquivo do tipo .gz;
h - chama a ajuda.
Uma vantagem desta ferramenta é a possibilidade de compactar diretórios também, e a principal desvantagem é de não existir opção para manter o arquivo original e criar outro compactado.
Exemplo:
$ gzip teste $ ls -l -rw-r--r-- 1 aluno aluno 4926 Feb 21 11:01 teste.gz
Para a descompactação existem duas formas:
gunzip nome_arquivo.gz ou gzip -d nome_arquivo.gz
Exemplo:
$ gunzip teste.gz $ ls -l teste* -rw-r--r-- 1 aluno aluno 25223 Feb 21 11:01 teste
zip
editarO compactador zip além de um utilitário para a compactação serve também como empacotador (para melhor entendimento sobre empacotadores veja tópico sobre a ferramenta tar), tendo como principal função a sua portabilidade, ou seja, esta ferramenta é compatível com outros sistemas de compactação do tipo pkzip e similares.
Quando for desejado a compactação de vários arquivos em um só arquivo, o zip é muito útil, pois em sua própria sintaxe é solicitado um nome para ser o arquivo principal (não pode ser um arquivo existente) evitando assim a perda do arquivo originário.
Sintaxe:
zip [-opção] arquivo.zip arquivo1 arquivo2 ... arquivoN
Para esse caso o arquivo arquivo.zip será criado no momento da compactação e ele não precisa necessariamente possuir a extensão .zip, ela é colocada para facilitar a sua identificação.
Opções:
r - trabalha de forma recursiva sobre diretórios;
T - testa a integridade do arquivo de zip;
h - apresenta a ajuda;
D - não adiciona diretórios quando solicitado uma pasta inteira.
A opção D pode ser utilizada quando for necessário copiar somente os arquivos que estão dentro de uma pasta, mas que exista além dos arquivos um diretório, sendo este não necessário, excluindo assim este diretório.
Para a descompactação e desempacotamento é utilizado o seguinte comando:
unzip nome_arquivo.zip
Exemplo:
$ zip arquivo.zip teste teste1 updating: teste (deflated 81%) updating: teste1(deflated 75%) $ ls l arquivo* -rw-r--r-- 1 aluno aluno 10046 Feb 21 11:15 arquivo.zip
Exemplo de descompactação
$ unzip arquivo.zip Archive: arquivo.zip [aluno@lab20 aluno]$ ls -l -rw-r--r-- 1 aluno aluno 25223 Feb 21 11:01 teste -rw-r--r-- 1 aluno aluno 20046 Feb 21 11:13 teste1 -rw-r--r-- 1 aluno aluno 1121 Feb 21 11:15 arquivo.zip
Note que o arquivo original (compactado) não é perdido após a sua descompactação.
tar
editarO TAR é um empacotador, que permite o armazenamento de vários arquivos e até mesmo diretórios dentro de um único arquivo, para diversas utilidades, entre elas estão o backup do sistema e para transporte.
Quando é dito que vários arquivos podem ser empacotados, não indica que o mesmo será compactado, pois são duas operações distintas. No caso do compactador, os arquivos serão comprimidos tendo assim o seu tamanho de alocação em disco diminuído, enquanto que o empacotador estará preocupado em juntar vários arquivos ou diretórios dentro de um único arquivo.
As chamadas “tarballs”, ou arquivos “.tar.gz”, são na realidade, um pacote tar (contendo diversos arquivos), compactado com a ferramenta gzip. Resultados semelhantes são obtidos através do uso do tar em conjunto com o bzip2 (estes geralmente possuem terminação “.tar.bz2”).
Sobre um arquivo empacotado pode ser realizado várias tarefas, entre elas estão: criar, retirar os arquivos, acrescentar novos arquivos, ler o seu conteúdo, entre outros.
Sintaxe:
tar [-opção][argumentos] nome_do_arquivo.tar arquivo1 ... arquivon
Opção:
c - cria um novo arquivo empacotado;
p - retira os arquivos empacotados mantendo suas informações originais;
r - inserir um novo arquivo aos empacotados;
x - retira os arquivos empacotados dentro do diretório corrente;
t - lista todo o conteúdo do arquivo empacotado.
Argumentos:
C - diretório - indica para o sistema que será especificado um diretório para a desempacotação dos arquivos;
f - arquivo - indica para o sistema que será especificado um arquivo;
h - não copia links simbólicos, e sim os arquivos para os quais elas apontam;
v - indica para o sistema informar o processamento de empacotamento conforme ele vai sendo realizado;
z - compacta os arquivos empacotados após o processo com a ferramenta de compactação gzip;
j - compacta os arquivos empacotados após o processo com a ferramenta de compactação bzip2.
Sobre os argumentos os mais utilizados são “v”, para a visualização do que está ocorrendo, o “z”, para a compactação do pacote e o “f” para a informação do arquivo geral (a ordem das letras utilizadas não influencia no resultado assim como em outros casos de comandos com opções)
Exemplo:
$ tar cvf zteste.tar zlogin zlogout zprofile zshenv zshrc $ ls zlogin zlogout zprofile zshenv zshrc zteste.tar
Os arquivos originais não foram apagados, e sim criado uma cópia para dentro de zteste.tar.
Para confirmar se tudo deu certo, deve ser gerada uma lista sobre os arquivos que estão dentro do pacote:
$ tar tvf zteste.tar zlogin zlogout zprofile zshenv zshrc
Se nenhum erro for retornado o pacote está perfeito.
Empacotando e compactando ao mesmo tempo com a ferramenta de compactação gzip:
$ tar cvfz zteste.tar.gz zlogin zlogout zprofile zshenv zshrc $ ls zlogin zlogout zprofile zshenv zshrc zteste.tar.gz
A extensão “gz” informa que o pacote também foi compactado.
O desempacotamento é muito simples, sendo que deverá ser informado para o sistema a opção “x”:
$cp zteste.tar /tmp/ $cd /tmp $tar xvf zteste.tar $ls zlogin zlogout zprofile zshenv zshrc zteste.tar
O arquivo original zteste.tar irá permanecer no sistema, para servir como backup se caso ocorra alguma coisa com os arquivos descompactados, devendo ser apagado manualmente do sistema, se o usuário assim o preferir.
Caso o pacote esteja compactado deverá ser informado, junto com as demais opções, o argumento sobre a ferramenta de compactação, sendo, “z” para o gzip (gz) e “j” para o bzip2 (bz2).
Comparativo entre os compactadores
editarAqui está um comparativo dos compactadores vistos utilizando um arquivo relativamente pequeno( um arquivo em PDF).
compactador | tamanho original do arquivo | tamanho novo | taxa de compressão |
bzip2 | 11.1 MB (11631660 bytes) | 10.4 MB (10856335 bytes) | 6,665643597% |
gzip | 11.1 MB (11631660 bytes) | 10.3 MB (10813183 bytes) | 7,036631057% |
zip | 11.1 MB (11631660 bytes) | 10.3 MB (10813347 bytes) | 7,035221112 % |
Agora um comparativo com um arquivo maior (um arquivo de vídeo):
compactador | tamanho original do arquivo | tamanho novo | taxa de compressão |
bzip2 | 238,8 MB (250437044 bytes) | 236,8 MB (248319817 bytes) | 0,84541287 % |
gzip | 238,8 MB (250437044 bytes) | 236,1 MB (247617747 bytes) | 1,125750789 % |
zip | 238,8 MB (250437044 bytes) | 236,1 MB (247617868 bytes) | 1,125702474 % |
Terminologia Utilizada
editar- Superusuário
- usuário responsável pelo sistema, possui todos os direitos sobre o sistema.
- Sistema
- o computador em si, com as funcionalidades de hardware e software.
- Login
- acesso ao sistema utilizando um usuário conhecido e uma senha válida
- Logout
- finalizar a sessão de acesso do usuário que efetuou login no sistema
- Compactador
- ferramenta que auxilia a reduzir o tamanho de um arquivo ou diretório
- Empacotador
- ferramenta que aglutina (junta) vários arquivos ou diretórios em um único arquivo
- Raiz
- designação dada para o /, simboliza o ponto de inicio para todo o sistema
Exercícios de Revisão
editar1. É possível empacotar diretórios?
2. Apresente os passos para gerar um arquivo empacotado e compactado, depois listar o seu conteúdo, mover para o diretório /tpm e desempacotar lá.
3. Como seria a leitura do arquivo mensagem.gz, primeiramente descompactando e depois sem descompactar?