Этот вопрос также был задан Вот ,
Когда я копирую некоторый каталог (dir) рекурсивно с помощью sudo в bash, он копирует только первый уровень иерархии dir, но при использовании без 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
Ответы:
Когда вы делаете
sudo cp -r /a/b /c/d
папка копируется в/c/d/
как root с root как владелец, поэтому вы получите Доступ запрещен так как вам нужно разрешение root, чтобы открыть каталог, попробуйте открыть/c/d/
в корневом терминале; В качестве альтернативы вам нужно изменить владельца файла или исправить разрешение, используяchown
/chmod
так что ваш текущий пользователь сможет получить доступ к папке.Замечания:
sudo cd
не будет работать сcd
это команда оболочки, а не программы.источник
Может быть, / c / d имел разрешения 700 с другим владельцем. Пытаться
sudo chmod -R 755 /c/d
,источник
sudo chown -R me /c/d
».Я бы лучше использовал
cp -a
вместоcp -r
, Последний может не сохранить некоторые атрибуты файла.источник
Вместо изменения
cp
команда, вы могли бы запуститьsudo
как конкретный пользователь делает что-то вродеТем не менее, это будет работать только в том случае, если
thisUser
имеет разрешения для/a/b
источник