Ao copiar diretórios com sudo, copia apenas o primeiro nível de sua hierarquia

1

Também foi feita a pergunta aqui .

Quando eu copio um diretório (dir) recursivamente com sudo no bash ele copia apenas o primeiro nível da hierarquia dir, mas quando usado sem sudo ele copia o diretório com todos os seus subdiretórios, embora comandos na linha de comando tenham a diferença somente na presença de sudo.

Por que isso acontece?

Por exemplo:

k@l:/$ tree
.
|
|__a
|  |
|  |__b
|     | 
|     |__1.htm   
|
|__c
k@l:/$ sudo cp -r /a/b /c/d
k@l:/$ cd /c
k@l:/c$ ls
d
k@l:/c$ cd d
bash: cd: /c/d: Permission denied
k@l:/c$ tree
.
|__d [error opening dir]

1 directory, 0 files
    
por Oleksandr Bondarenko 26.07.2011 / 08:23

4 respostas

2

Quando você faz sudo cp -r /a/b /c/d , a pasta é copiada para /c/d/ como raiz com raiz como proprietário, portanto, você recebe uma Permissão negada porque precisa de permissão de raiz para abrir o diretório, tente abrir /c/d/ em um terminal raiz; Como alternativa, você precisa alterar o proprietário do arquivo ou corrigir a permissão usando chown / chmod para que o usuário atual possa acessar a pasta.

Nota: sudo cd não funciona, pois cd é um comando shell, não programas.

    
por 26.07.2011 / 09:05
2

Talvez / c / d tenha permissões 700 com um proprietário diferente. Experimente sudo chmod -R 755 /c/d .

    
por 26.07.2011 / 08:25
0

Eu prefiro usar cp -a em vez de cp -r . Este último pode não preservar alguns atributos de arquivo.

    
por 26.07.2011 / 15:03
0

Em vez de alterar o comando cp , você pode executar sudo como um usuário específico fazendo algo como

sudo -u thisUser cp -r /a/b /c/d

No entanto, isso funcionará somente se thisUser tiver permissões para /a/b

    
por 13.06.2015 / 12:03

Tags