
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/d
kopiert , 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 cd
Funktioniert nicht, da cd
es 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 -a
anstelle von verwenden cp -r
. Bei Letzterem bleiben möglicherweise einige Dateiattribute nicht erhalten.
Antwort4
Anstatt den cp
Befehl zu ändern, können Sie ihn sudo
als bestimmter Benutzer ausführen und so etwas tun wie
sudo -u thisUser cp -r /a/b /c/d
Dies funktioniert jedoch nur, wenn thisUser
Sie über die Berechtigung verfügen für/a/b