Beim Kopieren von Verzeichnissen mit sudo wird nur die erste Ebene der Hierarchie kopiert

Beim Kopieren von Verzeichnissen mit sudo wird nur die erste Ebene der Hierarchie kopiert

Diese Frage wurde auch gestelltHier.

Wenn ich in Bash ein Verzeichnis (Dir) rekursiv mit sudo kopiere, wird nur die erste Ebene der Verzeichnishierarchie kopiert. Wenn ich es jedoch ohne sudo verwende, wird das Verzeichnis mit allen seinen Unterverzeichnissen kopiert. Bei Befehlen in der Befehlszeile besteht jedoch nur bei Vorhandensein von sudo ein Unterschied.

Warum passiert das?

Zum Beispiel:

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

Antwort1

Wenn Sie dies tun, werden die Ordner als root mit root als Eigentümer sudo cp -r /a/b /c/dkopiert , daher erhalten Sie eine/c/d/Zugriff verweigertDa Sie zum Öffnen des Verzeichnisses Root-Berechtigungen benötigen, versuchen Sie, es /c/d/in einem Root-Terminal zu öffnen. Alternativ müssen Sie den Dateieigentümer ändern oder die Berechtigung mithilfe von chown/ korrigieren chmod, damit Ihr aktueller Benutzer auf den Ordner zugreifen kann.

Hinweis: sudo cdFunktioniert nicht, da cdes sich um einen Shell-Befehl und nicht um Programme handelt.

Antwort2

Möglicherweise hatte /c/d die Berechtigung 700 und ein anderer Besitzer. Versuchen Sie es sudo chmod -R 755 /c/d.

Antwort3

Ich würde lieber cp -aanstelle von verwenden cp -r. Bei Letzterem bleiben möglicherweise einige Dateiattribute nicht erhalten.

Antwort4

Anstatt den cpBefehl zu ändern, können Sie ihn sudoals bestimmter Benutzer ausführen und so etwas tun wie

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

Dies funktioniert jedoch nur, wenn thisUserSie über die Berechtigung verfügen für/a/b

verwandte Informationen