As permissões de pasta com cp --parents não permitem copiar outro arquivo

1

cenário: com um script executado por um usuário normal, quero copiar vários arquivos e replicar a estrutura do diretório. Por exemplo:

cp --parents /lib/libacl.so /tmp/my_root/
cp --parents /lib/libc.so.6 /tmp/my_root/

Resultado esperado: primeiro cp , cria / tmp / my_root / lib e coloca libacl.so lá. Segundo cp coloca libc.so.6 em / tmp / my_root / lib.

O problema é que o primeiro cp cria / tmp / my_root / lib com as seguintes permissões: dr-xr-xr-x. , então o segundo cp falha com Permissão negada.

Claro, se eu executar o script como root, tudo funcionará bem.

Uma solução poderia ser criar o diretório primeiro e depois copiar o arquivo, para que o diretório tivesse as permissões adequadas, mas eu queria saber se havia uma maneira melhor de fazer isso, talvez algum sinalizador de cp ? Eu chequei o homem mas não encontrei nada.

    
por Nico 31.08.2015 / 16:02

1 resposta

1

Não consigo ver uma solução com cp . Você pode usar rsync para fazer o mesmo tipo de cópias, e também cria um lib dir não gravável, mas é capaz de adicionar novos arquivos ao diretório. Seus comandos se tornam:

rsync -LR /lib/libacl.so /tmp/my_root/
rsync -LR /lib/libc.so.6 /tmp/my_root/

O -R preserva a estrutura do diretório. Eu adicionei -L para que simbólico os links são seguidos, já que isso parece ser o que o cp faz, embora não é o que é desejado. Você pode adicionar -a para preservar permissões e carimbos de data e hora (e proprietário / grupo se root).

O rsync é freqüentemente usado para copiar arquivos pela rede, mas é um comando muito versátil.

Se você não tem rsync, alguns outros comandos que copiam arquivos, mas crie um diretório gravável , são tar e cpio :

tar cf - /lib/libc.so.6 | tar -C /tmp/my_root/ -xf -

Ou use chf para seguir os links. Para cpio:

ls /lib/libc.so.6 | cpio -pd /tmp/my_root/

com -L para seguir os links.

    
por 31.08.2015 / 19:07