Estações de trabalho on-line OnWorks Linux e Windows

Logotipo

Hospedagem online grátis para estações de trabalho

<Anterior | Conteúdo | Próxima>

alcatrão

No mundo do software semelhante ao Unix, o alcatrão programa é a ferramenta clássica para arquivamento de arquivos.


Seu nome, abreviação de arquivo de fita, revela suas raízes como uma ferramenta para fazer fitas de backup. Embora ainda seja usado para essa tarefa tradicional, é igualmente adequado para outros dispositivos de armazenamento. Muitas vezes vemos nomes de arquivos que terminam com a extensão .alcatrão or . Tgz, que indicam um arquivo tar “simples” e um arquivo compactado com gzip, respectivamente. Um arquivo tar pode consistir em um grupo de arquivos separados, uma ou mais hierarquias de diretório ou uma mistura de ambos. A sintaxe do comando funciona assim:

alcatrão modo[opções] pathname...

onde modo é um dos seguintes modos de operação (apenas uma lista parcial é mostrada aqui; consulte o alcatrão página do manual para uma lista completa):


Tabela 18-2: Modos de alcatrão


Descrição do Modo

Descrição do Modo

c Crie um arquivo a partir de uma lista de arquivos e / ou diretórios.


imagem

x Extraia um arquivo.


imagem

r Anexa os nomes de caminho especificados ao final de um arquivo.


imagem

t Liste o conteúdo de um arquivo.


imagem


O tar usa uma forma um pouco estranha de expressar opções, então precisaremos de alguns exemplos para mostrar como funciona. Primeiro, vamos recriar nosso playground do capítulo anterior:



[me @ linuxbox ~] $ mkdir -p playground / dir- {001..100}

[me @ linuxbox ~] $ touch playground / dir- {001..100} / file- {A..Z}

[me @ linuxbox ~] $ mkdir -p playground / dir- {001..100}

[me @ linuxbox ~] $ touch playground / dir- {001..100} / file- {A..Z}


A seguir, vamos criar um arquivo tar de todo o playground:



[me @ linuxbox ~] $ tar cf playground.tar playground

[me @ linuxbox ~] $ tar cf playground.tar playground


Este comando cria um arquivo tar chamado playground.tar que contém toda a hierarquia de diretórios do playground. Podemos ver que o modo e o f opção, que é usada para especificar o nome do alcatrão arquivo, podem ser agrupados e não requerem um travessão inicial. Observe, no entanto, que o modo deve sempre ser especificado primeiro, antes de qualquer outra opção.

Para listar o conteúdo do arquivo, podemos fazer o seguinte:


[me @ linuxbox ~] $ tar tf playground.tar

[me @ linuxbox ~] $ tar tf playground.tar


Para uma lista mais detalhada, podemos adicionar o v opção (detalhada):


[me @ linuxbox ~] $ tar tvf playground.tar

[me @ linuxbox ~] $ tar tvf playground.tar


Agora, vamos extrair o playground em um novo local. Faremos isso criando um novo diretório chamado Foo, alterando o diretório e extraindo o arquivo tar:


[me @ linuxbox ~] $ mkdir foo

[me @ linuxbox ~] $ cd foo

[me @ linuxbox foo] $ tar xf ../playground.tar

[me @ linuxbox foo] $ ls

recreio

[me @ linuxbox ~] $ mkdir foo

[me @ linuxbox ~] $ cd foo

[me @ linuxbox foo] $ tar xf ../playground.tar

[me @ linuxbox foo] $ ls

recreio


Se examinarmos o conteúdo de ~ / foo / playground, vemos que o arquivo foi instalado com sucesso, gerando uma reprodução precisa dos arquivos originais. Porém, há uma advertência: a menos que você esteja operando como superusuário, os arquivos e diretórios extraídos dos arquivos passam a ser propriedade do usuário que executa a restauração, e não do proprietário original.

Outro comportamento interessante de alcatrão é a forma como ele lida com nomes de caminhos em arquivos. O padrão para nomes de caminho é relativo, ao invés de absoluto. alcatrão faz isso simplesmente removendo qualquer barra inicial do nome do caminho ao criar o arquivo. Para demonstrar, vamos recriar nosso arquivo, desta vez especificando um nome de caminho absoluto:



[me @ linuxbox foo] $ cd

[me @ linuxbox ~] $ tar cf playground2.tar ~ / playground

[me @ linuxbox foo] $ cd

[me @ linuxbox ~] $ tar cf playground2.tar ~ / playground


Lembre-se, ~ / playground irá expandir em / home / me / playground quando pressionamos a tecla Enter, obteremos um caminho absoluto para nossa demonstração. A seguir, extrairemos o arquivo como antes e veremos o que acontece:



[me @ linuxbox ~] $ cd foo

[me @ linuxbox foo] $ tar xf ../playground2.tar

[me @ linuxbox foo] $ ls

playground doméstico [me @ linuxbox foo] $ está em casa

[me @ linuxbox ~] $ cd foo

[me @ linuxbox foo] $ tar xf ../playground2.tar

[me @ linuxbox foo] $ ls

playground doméstico [me @ linuxbox foo] $ está em casa


me

[me @ linuxbox foo] $ estou em casa / eu

recreio

me

[me @ linuxbox foo] $ estou em casa / eu

recreio


Aqui podemos ver que quando extraímos nosso segundo arquivo, ele recriou o diretório casa / eu / playground em relação ao nosso diretório de trabalho atual, ~ / foo, não em relação ao diretório raiz, como seria o caso com um nome de caminho absoluto. Pode parecer uma maneira estranha de funcionar, mas na verdade é mais útil dessa forma, pois nos permite extrair arquivos para qualquer local, em vez de sermos forçados a extraí-los para seus locais originais. Repetir o exercício com a inclusão da opção detalhada (v) dará uma imagem mais clara do que está acontecendo.

Vamos considerar um exemplo hipotético, mas prático, de alcatrão em ação. Imagine que queremos copiar o diretório inicial e seu conteúdo de um sistema para outro e temos um grande disco rígido USB que podemos usar para a transferência. Em nosso sistema Linux moderno, a unidade é montada "automagicamente" no /metade diretório. Vamos imaginar também que o disco tem um nome de volume de BigDisk quando o anexamos. Para fazer o arquivo tar, podemos fazer o seguinte:



[me @ linuxbox ~] $ sudo tar cf /media/BigDisk/home.tar / home

[me @ linuxbox ~] $ sudo tar cf /media/BigDisk/home.tar / home


Depois que o arquivo tar é gravado, desmontamos a unidade e a anexamos ao segundo computador. Novamente, ele é montado em / media / BigDisk. Para extrair o arquivo, fazemos o seguinte:


[me @ linuxbox2 ~] $ cd /

[me @ linuxbox2 /] $ sudo tar xf /media/BigDisk/home.tar

[me @ linuxbox2 ~] $ cd /

[me @ linuxbox2 /] $ sudo tar xf /media/BigDisk/home.tar


O que é importante ver aqui é que primeiro devemos mudar o diretório para /, de forma que a extração seja relativa ao diretório raiz, uma vez que todos os nomes de caminho dentro do arquivo são relativos.

Ao extrair um arquivo, é possível limitar o que é extraído do arquivo. Por exemplo, se quisermos extrair um único arquivo de um arquivo, isso pode ser feito assim:



alcatrão xf caminho do arquivo.tar

alcatrão xf caminho do arquivo.tar


Adicionando o pathname ao comando, alcatrão irá apenas restaurar o arquivo especificado. Vários nomes de caminho podem ser especificados. Observe que o nome do caminho deve ser a relação completa e exata


meu caminho de acesso, conforme armazenado no arquivo. Ao especificar nomes de caminhos, normalmente não há suporte para curingas; no entanto, a versão GNU do alcatrão (que é a versão mais freqüentemente encontrada em distribuições Linux) oferece suporte a eles com o --curingas opção. Aqui está um exemplo usando nosso anterior playground.tar arquivo:


[me @ linuxbox ~] $ cd foo

[me @ linuxbox foo] $ tar xf ../playground2.tar --wildcards 'home / me / pla yground / dir - * / file-A'

[me @ linuxbox ~] $ cd foo

[me @ linuxbox foo] $ tar xf ../playground2.tar --wildcards 'home / me / pla yground / dir - * / file-A'


Este comando irá extrair apenas os arquivos que correspondem ao caminho especificado, incluindo o curinga dir- *.

tar é freqüentemente usado em conjunto com find para produzir arquivos. Neste exemplo, usaremos find para produzir um conjunto de arquivos para incluir em um arquivo:


[me @ linuxbox ~] $ localizar playground -nome 'arquivo-A' -exec tar rf playground.tar '{}' '+'

[me @ linuxbox ~] $ localizar playground -nome 'arquivo-A' -exec tar rf playground.tar '{}' '+'


Aqui usamos find para combinar todos os arquivos em recreio nomeado arquivo-A e então, usando o -Exec ação, nós invocamos alcatrão no modo anexar (r) para adicionar os arquivos correspondentes ao arquivo playground.tar.

utilização alcatrão com find é uma boa maneira de criar backups incrementais de uma árvore de diretório ou de um sistema inteiro. Usando find para corresponder a arquivos mais novos do que um arquivo de carimbo de data / hora, poderíamos criar um arquivo que contenha apenas arquivos mais recentes que o último, assumindo que o arquivo de carimbo de data / hora seja atualizado logo após a criação de cada arquivo.

O tar também pode usar tanto a entrada quanto a saída padrão. Aqui está um exemplo abrangente:



[me @ linuxbox foo] $ cd

[me @ linuxbox ~] $ localizar playground -nome 'arquivo-A' | tar cf - --files- from = - | gzip> playground.tgz

[me @ linuxbox foo] $ cd

[me @ linuxbox ~] $ localizar playground -nome 'arquivo-A' | tar cf - --files- from = - | gzip> playground.tgz


Neste exemplo, usamos o find programa para produzir uma lista de arquivos correspondentes e canalizá-los para alcatrão. Se o nome do arquivo “-” for especificado, significa a entrada ou saída padrão, conforme necessário. (A propósito, esta convenção de usar “-” para representar a entrada / saída padrão é usada por vários outros programas também). o --arquivos-de opção (que também pode ser especificada como -T) causas alcatrão para ler sua lista de nomes de caminhos de um arquivo, em vez


do que a linha de comando. Por último, o arquivo produzido por alcatrão é canalizado para gzip para criar o arquivo compactado playground.tgz. O . Tgz extensão é a extensão convencional fornecida aos arquivos tar compactados com gzip. A extensão .tar.gz também é usado às vezes.

Enquanto usamos o gzip programa externamente para produzir nosso arquivo compactado, versões modernas do GNU alcatrão suporta compressão gzip e bzip2 diretamente com o uso do z e j opções, respectivamente. Usando nosso exemplo anterior como base, podemos simplificá-lo desta forma:



[me @ linuxbox ~] $ localizar playground -nome 'arquivo-A' | tar czf playground.tgz -T -

[me @ linuxbox ~] $ localizar playground -nome 'arquivo-A' | tar czf playground.tgz -T -


Se quiséssemos criar um arquivo compactado bzip2, poderíamos ter feito isso:



[me @ linuxbox ~] $ localizar playground -nome 'arquivo-A' | tar cjf playground.tbz -T -

[me @ linuxbox ~] $ localizar playground -nome 'arquivo-A' | tar cjf playground.tbz -T -


Simplesmente mudando a opção de compressão de z para j (e alterando a extensão do arquivo de saída para .tbz para indicar um arquivo compactado bzip2) habilitamos a compactação bzip2.

Outro uso interessante de entrada e saída padrão com o alcatrão comando envolve a transferência de arquivos entre sistemas em uma rede. Imagine que tivéssemos duas máquinas rodando um sistema semelhante ao Unix equipado com alcatrão e ssh. Nesse cenário, poderíamos transferir um diretório de um sistema remoto (denominado sistema remoto para este exemplo) ao nosso sistema local:



[me @ linuxbox ~] $ coisas remotas mkdir

[me @ linuxbox ~] $ CD remoto-coisas

[me @ linuxbox remote-stuff] $ ssh remote-sys 'tar cf - Documentos' | tar xf -

senha me @ remote-sys: [me @ linuxbox remote-stuff] $ ls Documentos

[me @ linuxbox ~] $ coisas remotas mkdir

[me @ linuxbox ~] $ CD remoto-coisas

[me @ linuxbox remote-stuff] $ ssh remote-sys 'tar cf - Documentos' | tar xf -

senha me @ remote-sys: [me @ linuxbox remote-stuff] $ ls Documentos


Aqui, conseguimos copiar um diretório chamado Documentos do sistema remoto sistema remoto para um diretório dentro do diretório chamado coisa remota no sistema local. Como fizemos isso? Primeiro, lançamos o alcatrão programa no sistema remoto usando ssh. Você vai se lembrar disso ssh nos permite executar um programa remotamente em um computador em rede e “ver” os resultados no sistema local-a saída padrão pro


produzido no sistema remoto é enviado ao sistema local para visualização. Podemos tirar proveito disso, tendo alcatrão criar um arquivo (o c modo) e enviá-lo para a saída padrão, em vez de um arquivo (o f opção com o argumento do traço), transportando assim o arquivo através do túnel criptografado fornecido por ssh para o sistema local. No sistema local, executamos alcatrão e fazer com que ele expanda um arquivo (o x modo) fornecido a partir da entrada padrão (novamente, o f opção com o argumento do traço).


Top OS Cloud Computing na OnWorks: