Beim Versuch, einen Ordner Music
über zu verschieben, wird mir die Berechtigung verweigert, mv
obwohl der Verzeichnisbesitzer auf meinen Benutzer und die Benutzerberechtigungen auf 7 festgelegt sind. Was ist los?
(Ich weiß, dass ich Sudo verwenden könnte, aber ich möchte herausfinden, was los ist. Hier riecht etwas nach Fisch). Ps: Ich bin auf Mac OS X El Capitan.
Antworten:
Zu beachten ist, dass, wenn in Ordnern
a
, bewegenb
zuc
, die Ordner - Berechtigungen vona
bestimmen , was Sie tun können.In diesem Fall sind die Berechtigungen
.
für am wichtigsten.Beachten Sie, dass die Berechtigungen komplexer sind als nur
rwx
. Ihrmusic
Ordner hat ein@
am Ende, der.
Ordner hat ein+
am Ende.xattr -h
diese Option , um die komplexen Berechtigungen für das @ -Symbol zu bestimmen.getfacl
diese , um die ACL für das Symbol + zu bestimmen.quelle
man xattr
könnte ein guter Ausgangspunkt sein.ls -la@e
. Höchstwahrscheinlich gab es hierdeny delete
ACLs, die auch das Umbenennen verhindern.Ich habe Windows Subsystem für Linux verwendet. Ich hatte das Verzeichnis in einer anderen Bash-Instanz geöffnet. Wenn ich es schließe, kann ich das Verzeichnis verschieben.
quelle
Es scheint, als ob sich irgendwo tief in diesem Verzeichnis mindestens eine Datei befand, die nicht über die richtigen Berechtigungen verfügte.
Also, was ich getan habe war:
Jetzt gehts.
quelle
chmod 755
die speziellen '@' Berechtigungen für den Musikordner entfernt wurden?chmod -a 'everyone deny delete' Music
. In El Capitan könnte es anders sein.Das Problem hier hat wahrscheinlich mit der Zugriffssteuerungsliste (Access Control List, ACL) des Musikordners zu tun. Die ACL ist ein separates Berechtigungssystem zu den regulären POSIX-Berechtigungssystemen, die normalerweise von aufgelistet werden
ls -l
. Einige andere Verzeichnisse im Home-Ordner und anderswo haben ebenfalls ACLs.Verwenden Sie Folgendes, um die ACLs im Home-Verzeichnis anzuzeigen:
Sie werden wahrscheinlich eine Regel wie
0: group:everyone deny delete
für das Musikverzeichnis sehen. Wie Sie bemerkt haben, können Sie das Problem mit überschreibensudo
. Wenn Sie dies nicht möchten (oder nicht können), haben Sie andere Optionen, da Sie der Eigentümer der Datei sind. Sie können den fehlerhaften Eintrag basierend auf seinem Index aus der ACL des Musikverzeichnisses entfernen (0 in dem oben angegebenen Beispiel):Oder Sie können alle Einträge in der ACL entfernen:
Jetzt können Sie das Verzeichnis verschieben (vorbehaltlich der regulären POSIX-Berechtigungen). Wenn Sie die ACL nach dem Verschieben zurücksetzen möchten, können Sie Folgendes verwenden:
Und verwenden Sie
/bin/ls -le
erneut, um zu bestätigen, dass die ACL Ihren Wünschen entspricht.man chmod
Weitere Informationen finden Sie in den ACL-Beispielen . Insbesondere ist dieses Intro hilfreich:ACL-Reihenfolge
Ich glaube nicht, dass diese Manpage die Regeln für die Bestellung erklärt , aber diese Seite erklärt die Bestellregeln für ACLs klar. Insbesondere wird eine explizite
deny
Regel vor einer explizitenallow
Regel angewendet . Solange dergroup:everyone deny delete
Eintrag vorhanden ist, kann Ihrem Benutzer keine Berechtigung zum Löschen mit einerallow
Regel erteilt werden . Dies liegt daran, dass dereveryone
Gruppe, zu der Sie gehören, die Berechtigung verweigert wird und diese Regel zuerst angewendet wird.quelle
everyone deny delete
ACL-Eintrag in den Standardverzeichnissen von macOS ist der eigentliche Grund, warum die Verzeichnisse weder verschoben noch gelöscht werden können. (Beachten Sie auch, dass das Betriebssystem sie jederzeit neu erstellen kann.)Ich hatte dieses Problem, als eine Reihe von Programmen in einem Verzeichnis ausgeführt wurde, das ich entfernen wollte. Um das Verzeichnis zu verschieben, musste ich zuerst alle laufenden Programme aus diesem Verzeichnis beenden.
Seien Sie in den folgenden Befehlen sehr vorsichtig, wie Sie den Namen Ihres Programms auswählen. Ich habe die folgenden Befehle als Referenz verwendet:
Das allgemeine Verfahren ist:
kill -9
mit großer Vorsicht ) aller Programme aus dem Verzeichnisquelle
grep
Schritt sehr sorgfältig auswählen und überprüfen. Was auch immer Sie zuerstgrep
kill
Dies kann auch passieren, wenn eine der darin enthaltenen Dateien schreibgeschützt ist. Ich hatte heute den Randfall, als ich
access.log
in Apache schreibgeschützt war, was bereits gestoppt wurde. Ich habe diese Datei gerade entfernt, sodass ich das übergeordnete Verzeichnis weiter verschieben konnte.quelle