Ich bin ein "admin"-Benutzer auf einem Mac, auf dem Big Sur läuft. Ich versuche, einen Symlink zu entfernen:
$ ls -al /usr/bin/python
lrwxr-xr-x 1 root wheel 75 Jan 1 2020 /usr/bin/python -> ../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
Jetzt habe ich versucht, es mit zu entfernen, sudo
aber ich bekomme die Erlaubnis verweigert:
$ sudo rm /usr/bin/python
rm: /usr/bin/python: Operation not permitted
Wie übernehme ich die tatsächliche Administratorbefugnis auf meinem Mac? Muss ich der Gruppe „Rad“ hinzugefügt werden?
Bitte beachten Sie, dass mir die hier beschriebenen Problemumgehungen mit Shell-Aliassen bekannt sind:
Upgrade auf Python 3.6 von Python 2.7 nicht möglich
Aber das wäre nur eine Umgehung. Ich möchte wissen, was die Ursache ist und was ich dagegen tun kann.
Die Hauptursache hier ist, dass das Verzeichnis /usr/bin durch SIP (System Integrity Protection) geschützt ist. Daher kann niemand, nicht einmal Admin-Benutzer, den Inhalt des Verzeichnisses ändern, während SIP aktiv ist.
Die Systemordner auf Big Sur sind tatsächlich in einem separaten, kryptografisch signierten Dateisystem (Systemvolume) enthalten, das beim Booten schreibgeschützt gemountet wird. Sein Inhalt wird durch die Verwendung sogenannter Firmlinks in Ihr normales gemountetes Dateisystem mit Lese- und Schreibzugriff gemischt. Das bedeutet, dass es aussieht und sich anfühlt wie früher auf älteren macOS-Versionen – alles ist sozusagen an der richtigen Stelle – aber tatsächlich können die Systemdateien während des normalen Systembetriebs nicht geändert werden.
Theoretisch könnten Sie SIP deaktivieren, das Systemvolume als beschreibbar bereitstellen, den Python-Link ändern und das Ganze neu signieren. Ich würde jedoch dringend davon abraten, da Sie riskieren würden, von Apple bereitgestellte Tools zu beschädigen, die von der jeweiligen Python-Version abhängen - und Sie müssten wahrscheinlich einen endlosen Kampf führen, bei dem der Link während macOS-Upgrades wiederhergestellt wird.
Stattdessen würde ich Ihnen raten, entweder einen anderen Namen für das Programm zu verwenden (dh zum Beispiel python3 statt python) - oder einen Alias in Ihrer Shell zu verwenden, damit "python" wirklich ein anders benanntes Programm ausführt.
PATH
(was es standardmäßig ist).PATH
findet , bevor es . (Wie @Gordon auch empfiehlt)
python
/usr/bin/python
Lesen Sie die Kommentare, die Antwort auf die größere, nicht explizit gestellte Frage „Was hat Apple getan, um das Betriebssystem zu sichern und Entwicklern zu ermöglichen, Versionen von Befehlszeilentools zu überlagern, um ihre Arbeit zu erledigen?“
Wenn Sie diese Frage haben: Das beste Schreiben in der Entwicklung der kommandozeilenrelevanten Änderungen von Mojave über Catalina bis Big Sur ist hier:
Das erste halbe Dutzend Absätze legt klar dar, was los ist, und wird jedem, der ein modernes macOS-System anpassen möchte, sehr helfen.
Das signierte und schreibgeschützte Systemvolumen wird viele alte Anleitungen und Antworten zerstören, da einige traditionelle Unix-Annahmen nicht mehr gültig sind (wie die Notwendigkeit, root zu sein oder was ein Administrator tun könnte, um Systemdateien im Allgemeinen zu ändern).
sudo rm /usr/bin/whatever
hätte es trotz Nur-Lese-Berechtigungen auf dem Dateisystem funktioniert. Aber das war, bevor Python erfunden wurde, also stimmt unsere Definition von traditionellem Unix vielleicht nicht?Sie können Folgendes ausgeben:
csrutil disable
Befehl zum Deaktivieren des Systemintegritätsmodus (SIM).
dann, während im Wiederherstellungsmodus noch:
sudo rm -rf /target
Das Deaktivieren der SIM-Karte ist im Allgemeinen verpönt, und ich empfehle, sich darüber zu informieren, bevor Sie diese Strategie weiterverfolgen. Ich habe mich dafür entschieden und bin mit dem Ergebnis zufrieden.
mmmmmm
Glücklich
Gilby
python3
. Der Befehlpython
sollte der eingebaute V2.x bleiben.Fahrrad