Die Datei kann unter OS X nicht von root verschoben werden

Ich habe versucht, ein paar Dateien in einen Unterordner unter OS X zu verschieben. Eine hat sich geweigert, sie zu verschieben. Es sagte Operation not permitted. Ich habe es nochmal als root probiert:

$ sudo mv file subfolder/
mv: rename file to subfolder/file: Operation not permitted
$ sudo mv file filex
mv: rename file to filex: Operation not permitted
$ lsattr file
lsattr: Inappropriate ioctl for device While reading flags on file

Ich habe lsattrandere Dateien ausprobiert; Alle Dateien, die ich ausprobiert habe, gaben mir die gleiche Meldung:Inappropriate ioctl for device While reading...

Da ich von Linux komme, wusste ich nichts über Flags, also ist hier die Ausgabe von ls -leO@ file:

$ ls -leO@ file otherfile
-rwxrwxrwx  1 eeytan  staff  uchg 79549 Nov 11  2010 file
-rw-r--r--  1 eeytan  staff  -     5071 Sep  7 02:37 otherfile

Ich habe das OS X-Festplattendienstprogramm ausprobiert; es sagte, dass es keine Fehler auf meiner Festplatte gab. Was ist denn hier los?

lsattrist kein Standard-OS-X-Befehl; versuchen Sie es ls -leO@stattdessen. Und auf welchem ​​Volume befindet sich die Datei? Versuchen Sie mountzu sehen, mit welchen Attributen das Volume gemountet ist.
@GordonDavisson, du scheinst auf dem richtigen Weg zu sein. ls -leo@ sagt, dass die Datei die einzige mit dem Attribut "uchg" ist, was für mich sehr nach "unveränderlich" klingt.
Willkommen bei Ask Different! Ich werde die Änderungen entfernen und daraus eine Frage machen und die Antwort für den Antwortabschnitt hinterlassen ...

Antworten (9)

Klingt so, als wäre die Datei für mich gesperrt, weshalb das uchg-Attribut angezeigt wird. Sie sollten in der Lage sein, den folgenden Befehl zu verwenden, um das gesperrte Attribut zu entfernen:

chflags nouchg file

oder klicken Sie mit der rechten Maustaste auf die Datei im Finder, klicken Sie auf „Informationen abrufen“ und deaktivieren Sie das Kontrollkästchen „Gesperrt“.

Ha! Es sieht so aus, als hätten Sie Ihre eigene Frage beantwortet, als ich diese Antwort gepostet habe!
Vielen Dank! Ich hatte das Schloss-Symbol nicht bemerkt! Ich muss manchmal den Finder verwenden, anstatt am Terminal zu bleiben: P

Für Leute, die in einer Ära von OS X 10.11+ (El Capitan oder neuer) darüber stolpern: Apple hat OS X eine ganz neue Sicherheitsebene hinzugefügt . Sie haben root einige Privilegien weggenommen. Die Datei, die Sie ändern möchten, hat ein restrictedFlag. Nur restrictedvon Apple signierte Prozesse können diese Dateien ändern. Sie können dieses Sicherheitssystem jedoch deaktivieren, indem Sie im Wiederherstellungsmodus booten und es in einem Terminal deaktivieren, indem Sie Folgendes tun: csrutil disable.

Alternativ können Sie Terminal auch einfach im Wiederherstellungsmodus starten und dort die Datei löschen. Oder versuchen Sie sogar, in einer Linux-Umgebung mit HFS+-Unterstützung zu booten (zumindest wenn Sie noch nicht auf APFS sind), um die Datei zu ändern.

Wofür steht csr in csrutil?
Ich glaube, es war Benjamin Franklin, der sagte: „Diejenigen, die die Benutzerfreundlichkeit für die Sicherheit opfern, verdienen weder das eine noch das andere“. Oder so.
Meinst du den Computer im Wiederherstellungsmodus starten?
Versuchen Sie zuerst die andere Antwort.
Zu Ihrer Information können Sie feststellen, ob eine Datei das restrictedFlag mit hat/bin/ls -lO
Aufgrund unklarer Vorstellungen (und Implementierungen) von Sicherheit bringen Menschen unangemessene Opfer, um unzureichende Sicherheit zu erhalten. Zum Beispiel gibt das Betriebssystem dem Code alle Fähigkeiten des Benutzers . Wenn sich also ein Virus in einem von Root verwendeten Dienstprogramm oder einer Bibliothek befindet, kann es alles tun ... also schränken sie die Möglichkeiten von Root ein.

Versuchen:

chflags -f -R nouchg directory

in einem Verzeichnis auf höherer Ebene, um dieses Problem zu beheben.

FWIW: Ich hatte dieses Problem zsh: locking failed for /Users/me/.zhistory: operation not permitted: reading anywayund das Ausführen dieses Befehls in meinem Home-Verzeichnis hat es behoben

Ich hatte eine Datei, die ich im Terminal nicht löschen konnte:

$ sudo ls -leO@ foo@example.com/Documents/.%cb_defense/cb.doc
-rw-rw-rw-  1 root  wheel  - 41984  1 Mar 11:20 foo@example.com/Documents/.%cb_defense/cb.doc

$ sudo rm -rf foo@example.com/Documents/.%cb_defense/cb.doc
rm: foo@example.com/Documents/.%cb_defense/cb.doc: Operation not permitted

Was für mich funktioniert hat, war das Öffnen des Finder und das Löschen des gesamten Verzeichnisses. So wie ich es verstehe, löscht Finder Verzeichnisse als Einheit, ohne deren Inhalt zu berücksichtigen, so dass es nicht den gleichen Einschränkungen unterliegt wie normale rm -rf.

Ich hatte dieses Problem auch und stellte fest, dass der Ordner, in dem sich die Datei befand, gesperrt war. Stellen Sie also sicher, dass das nicht stimmt. Führen Sie im Finder „Informationen“ zu dem Ordner aus und vergewissern Sie sich, dass das Kontrollkästchen „Gesperrt“ nicht aktiviert ist.

Unter OS 10.15 hat das bei mir funktioniert:

  1. Wiederherstellungsmodus: Befehl + R
  2. Dienstprogramme -> Terminal
  3. rm -r /path/to/file/or/dir/to/remove (Das -r allein hat bei mir funktioniert -- Wenn Sie es brauchen, rm -rf force mode)
  4. Neustart
-ferzwingt nichts, es beantwortet nur einige Berechtigungsfragen yautomatisch.

Eine frühere Antwort sagte zu verwenden:

chflags -f -R nouchg directory

Es gibt zwei verschiedene Attribute, die das Ändern einer Datei verhindern. "uchg" hindert den Benutzer daran, die Datei zu ändern; "schg" verhindert, dass das System eine Änderung vornimmt. Verwenden Sie ls -le0@, um zu sehen, was Ihr Problem ist, oder verwenden Sie apple-I: Wenn "locked" aktiviert, aber nicht ausgegraut ist, ist "uchg" gesetzt. Wenn "locked" angekreuzt UND ausgegraut ist, dann ist "schg" gesetzt.) Wenn "uchg" gesetzt ist, funktioniert die vorherige Antwort. Wenn "schg" gesetzt ist, dann mache stattdessen Folgendes:

chflags -f -R noschg directory

Bestätigen Sie Ihre Systemeinstellungen, bevor Sie geheimnisvolle Befehle verwenden

Das Terminal hat möglicherweise keine Berechtigung zum Zugriff auf Ihre present working directory.

  1. Notieren Sie sich Ihren Pfad (geben Sie z. B. im Terminal pwd) ein.
  2. BesuchSystem Preferences > Security & Privacy > Privacy > Files and Folders
  3. Bestätigen Sie, dass sich neben allen Volumes und Verzeichnissen, die in Ihrem Pfad erscheinen, ein Häkchen befindet.

Wenn Terminal über Berechtigungen verfügt und der Befehl immer noch einen Fehler erhält, überprüfen Sie die in anderen Antworten bereitgestellten Lösungen.

Das war mein Problem - danke! VSCode und das Terminal darin hatten keine Berechtigungen.
Mac OS 10.13.6 (High Sierra): keine „Dateien“ unter Datenschutz.

Mir ist klar, dass dies ein sehr altes Thema ist, aber ich sehe diesen Thread nicht, der sich mit meinem Symptom befasst, also dachte ich, ich würde eine andere Meinung posten.

Ich hatte das mit einem externen Laufwerk, das auf einem Snow Leopard iMac, der unterwegs auf El Capitan aktualisiert wurde, perfekt funktioniert hatte. Anfang dieses Jahres nahm ich dieses Laufwerk und steckte es in eine neue Windows 10-Box, auf der Paragon HFS für Windows lief. Ich habe Hunderte von GB an Dateien von Windows auf HFS + auf dieses Laufwerk kopiert und es wieder an den iMac angeschlossen. Alles funktionierte gut, mit Ausnahme eines Shell-Skripts, das ich hatte, bei dem für die Sicherung bereitgestellte Dateien auf dieses uchg-Problem stießen.

Kurz gesagt: Dateien und Ordner, die unter El Capitan oder Windows 10 mit Paragon HFS erstellt wurden, wenn sie zurück in eine Snow Leopard-Box verschoben werden, wird das "gesperrte" Optionskästchen NICHT aktiviert, wenn Sie Get Infoim Finder auswählen. Die Vorschläge anderer funktionierten jedoch gut für mich:

  • Überprüfen Sie, ob dies der Fall ist, indem Sie ls -leO@(das ist ein großes oh) auf eine verdächtige Datei ausführen
  • als root chflags -R nouchgim übergeordneten Verzeichnis ausführen (in Snow Leopard gibt es kein -f)

Es wird funktionieren, aber erwarten Sie nicht genau die gleichen visuellen Hinweise, wenn Ihr Laufwerk zwischen verschiedenen Betriebssystemen gewechselt hat oder wenn Sie Paragon HFS verwenden.

chflags -f -R nouchg Verzeichnis funktioniert danke