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


1

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

Когда я копирую некоторый каталог (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

В вашем списке есть сообщения об ошибках. Возможно, вы хотите узнать их значение в первую очередь.
n.m.

Ответы:


2

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

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


2

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


2
+1: или ты можешь попробовать sudo chown -R me /c/d ».
Jonathan Leffler

Да, это тоже сработало бы.
jman

0

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


0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.