
Этот вопрос также был заданздесь.
Когда я рекурсивно копирую какой-либо каталог (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