Wie erstelle ich symbolische Links in / usr / bin auf einem Mac?

11

Umgebung: OSX Sierra, Darwin Kernel Version 16.3.0

Grundproblem: Ich möchte eine Reihe von Shell-Skripten in einem zentralen Repository verwenden, die ein #! / Usr / bin / zsh haben. Auf meinem Mac befindet sich das zsh in / bin / zsh.

Lösungsversuch: Ich möchte eine symbolische Verknüpfung erstellen

ln -s /bin/zsh /usr/bin/zsh

Mein Benutzerkonto hat Administratorrechte, aber ich bin kein Root und möchte den Root-Benutzer auf diesem Mac nicht aktivieren. Deshalb habe ich zuerst eine gemacht

sudo su

um eine Shell mit Root-Rechten zu erhalten und dann den Befehl ln auszuführen. Ich erhalte jedoch immer noch die Fehlermeldung ln: / usr / bin / zsh: Operation nicht erlaubt .

Fragen:

  • Warum erhalte ich diese Fehlermeldung?

  • Was müsste ich tun, um den Link zu erstellen?

  • Gibt es einen besseren Weg, um mein ursprüngliches Ziel zu erreichen? Beachten Sie, dass das #! Linien ist keine Option.

user1934428
quelle
Warum kopierst du nicht einfach /usr/bin/zshnach /bin/zsh?
Lenniey
1
@Lenniey Auf diese Weise erstellen Sie eine lose Kopie, die nicht zusammen mit dem Original aktualisiert wird.
Mario
@Mario Welpe ... natürlich hast du recht. OP: Tu das niemals! ;)
Lenniey
1
@ Lenniey - Die Kopie muss in die andere Richtung gehen! Und wenn Sie kopieren können, können Sie verlinken.
AFH
@ AFH ja mein Kommentar ist ein komplettes Durcheinander ...
Lenniey

Antworten:

15

Sie erhalten diese Meldung aufgrund des Systemintegritätsschutzes von Apple . Der Systemintegritätsschutz umfasst den Schutz für diese Teile des Systems:

/System
/usr
/bin
/sbin
Apps that are pre-installed with OS X

Pfade und Apps, die Apps und Installationsprogramme von Drittanbietern weiterhin schreiben können, umfassen:

/Applications
/Library
/usr/local

Dies bedeutet, dass Sie einfach einen symbolischen Link in erstellen können /usr/local/bin(er befindet sich immer noch in Ihrem $ PATH).

ABER es scheint, dass Sie speziell die symbolische Verknüpfung in erstellen müssen /usr/bin. Sie können dies erreichen, indem Sie den Systemintegritätsschutz deaktivieren (bitte tun Sie es nicht, bearbeiten Sie einfach die Skripte ..). Sie können es deaktivieren durch (ich habe es nicht selbst getestet !!!):

Click the  menu.
Select Restart...
Hold down command-R to boot into the Recovery System.
Click the Utilities menu and select Terminal.
Type csrutil disable and press return.
Close the Terminal app.
Click the  menu and select Restart....
13dimitar
quelle
2
Sie haben den Punkt verpasst: Der Fragesteller verfügt über Skripte, die #!/usr/bin/zhals Shell angeben. Die Lösung, die er sucht, besteht darin, diesen Speicherort mit dem Ort zu verknüpfen, an dem sich die Shell tatsächlich befindet. Wie Sie sagen, ist er jedoch davor geschützt. Wenn der Schutz nicht umgangen wird, scheint die einzige Lösung eine Stapelbearbeitung der Skripte zu sein.
AFH
Nun ja, Sie haben Recht, er muss die Skripte bearbeiten (was mit einem einzigen Befehl geschehen kann).
13dimitar
@ Dimitar schauen Sie sich die Frage an: Gibt es einen besseren Weg, um mein ursprüngliches Ziel zu erreichen? Beachten Sie, dass das #! Linien ist keine Option.
Lenniey
1
Notiz genommen, ich habe meine Antwort geändert
13dimitar