1

Этот вопрос также был задан здесь.

Когда я копирую некоторый каталог (dir) рекурсивно с помощью sudo в bash, он копирует только первый уровень иерархии dir, но при использовании без sudo он копирует каталог со всеми его подкаталогами, хотя команды в командной строке имеют разницу только в наличие sudo.

Почему это происходит?

Например:

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

4 ответа4

2

Когда вы выполняете sudo cp -r /a/b /c/d папка копируется в /c/d/ как пользователь root с правами root, поэтому вы получаете Permission Denied, так как вам нужно разрешение root для открытия каталога, попробуйте открытие /c/d/ в корневом терминале; альтернативно, вам нужно изменить владельца файла или исправить разрешение, используя команду chown /chmod чтобы ваш текущий пользователь мог получить доступ к папке.

Примечание: sudo cd не будет работать, так как cd - это команда оболочки, а не программы.

2

Может быть, /c /d имел разрешения 700 с другим владельцем. Попробуйте sudo chmod -R 755 /c/d .

0

Я бы предпочел использовать cp -a вместо cp -r . Последний может не сохранить некоторые атрибуты файла.

0

Вместо того, чтобы изменять команду cp , вы можете запустить sudo как определенный пользователь, выполняющий что-то вроде

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

Тем не менее, это будет работать, только если thisUser имеет разрешения для /a/b

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .