При копировании каталогов с помощью sudo копируется только первый уровень их иерархии.

При копировании каталогов с помощью sudo копируется только первый уровень их иерархии.

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

Когда я рекурсивно копирую какой-либо каталог (dir) с помощью sudo в bash, копируется только первый уровень иерархии каталогов, но при использовании без 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

решение1

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

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

решение2

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

решение3

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

решение4

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

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

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

Связанный контент