O que esses comandos ('tar') realmente fazem? Existe uma maneira melhor?

5

Estou passando por uma documentação relacionada à criação de um repositório de distro. No entanto, não consigo entender exatamente o que esses comandos realizam:

# cd /mnt/
# ls
centos-1  centos-2  centos-3
# for i in 1 2 3 
> do
> cd /mnt/centos-$i
> tar cpf - . | ( cd /var/ftp/ks/centos/; tar xpf - )
> done

Meu resumo (obviamente incorreto) é: Fazer um loop em cada CD montado ( /mnt/centos-<index> ) e criar um tar da pasta que preserva as permissões. Em seguida, extraia esse arquivo tar para outra pasta, novamente, preservando as permissões.

Se for esse o caso, por que gosta disso? Existe realmente não um caminho melhor? Ou talvez eu esteja sentindo falta da ideia toda.

    
por Belmin Fernandez 30.08.2011 / 23:35

2 respostas

8

A razão pela qual o tar (ou cpio) é recomendado sobre o cp para este procedimento é por causa de como as ferramentas operam.

cp opera em cada objeto de arquivo, lendo-o do disco e gravando-o em seu novo local. Como os locais da origem e do destino podem não estar próximos no disco, isso resulta em muita procura entre os locais.

tar e cpio lêem o máximo possível de uma só vez, e depois escrevem no arquivo. Isso significa que os arquivos de origem serão lidos um após o outro e os arquivos de destino serão gravados um após o outro (permitindo a troca de processos, é claro), resultando em muito menos procura e, portanto, menos tempo.

    
por 30.08.2011 / 23:44
2

O comando executa uma cópia exata do tipo arquivo morto de uma subárvore de diretórios (ou seja, onde as permissões de preservadores de tar, permissões de proprietário, links, etc.).

Primeiro, é o comando

tar cpf - . | ( cd /var/ftp/ks/centos/; tar xpf - )

é equivalente a

tar cpf - . | tar -C /var/ftp/ks/centos -x -p -f -

onde -C especifica que o diretório de trabalho tar deve ser alterado antes de começar a extrair os arquivos.

Provavelmente, o colega não estava ciente da opção -C .

Também é equivalente:

cp -a * /var/ftp/ks/centos/

(onde -a ou --archive significa -r --preserve = all --no-dereference --preserve = links, ou seja, cp preserva as permissões, copia recursivamente, etc. como se espera ao fazer um arquivo exato cópia semelhante)

Não é equivalente porque o padrão do shell correspondente a * não captura os arquivos de ponto no diretório de trabalho atual. Com um padrão de origem diferente, o motivo para escolher tar over cp -a é que cp -a é uma extensão GNU e não POSIX, ou seja, uma solução tar seria mais portátil.

Não há motivos de desempenho para escolher tar over cp.

    
por 31.08.2011 / 09:35

Tags