Jak utworzyć dowiązania symboliczne w / usr / bin na komputerze Mac?

11

Środowisko: OSX Sierra, jądro Darwin w wersji 16.3.0

Problem root: Chcę użyć kilku skryptów powłoki w centralnym repozytorium, które mają #! / Usr / bin / zsh. Na moim komputerze Mac zsh znajduje się w / bin / zsh.

Próba rozwiązania: chcę utworzyć dowiązanie symboliczne

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

Moje konto użytkownika ma uprawnienia administratora, ale nie jestem rootem i wolałbym nie włączać użytkownika root na tym komputerze Mac. Dlatego najpierw zrobiłem

sudo su

aby uzyskać powłokę z uprawnieniami administratora, a następnie wykonać polecenie ln . Jednak nadal pojawia się komunikat o błędzie ln: / usr / bin / zsh: Operacja niedozwolona .

Pytania:

  • Dlaczego pojawia się ten komunikat o błędzie?

  • Co musiałbym zrobić, aby utworzyć link?

  • Czy jest lepszy sposób na osiągnięcie mojego pierwotnego celu? Zauważ, że naprawienie #! linie nie jest opcją.

użytkownik1934428
źródło
Dlaczego nie można po prostu skopiować /usr/bin/zshdo /bin/zsh?
Lenniey
1
@Lenniey W ten sposób tworzysz luźną kopię, która nie będzie aktualizowana razem z oryginałem.
Mario,
@Mario whelp ... oczywiście masz rację. OP: nigdy tego nie rób! ;)
Lenniey
1
@Lenniey - Kopia musi iść w drugą stronę! A jeśli możesz skopiować, możesz połączyć.
AFH
@AFH tak, mój komentarz jest kompletnym bałaganem ...
Lenniey

Odpowiedzi:

15

Ten komunikat pojawia się z powodu ochrony integralności systemu Apple . Ochrona integralności systemu obejmuje ochronę tych części systemu:

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

Ścieżki i aplikacje, które aplikacje i instalatory innych firm mogą nadal pisać, obejmują:

/Applications
/Library
/usr/local

Oznacza to, że możesz po prostu utworzyć dowiązanie symboliczne w /usr/local/bin(nadal znajduje się ono w $ PATH).

ALE wydaje się, że w szczególności musisz utworzyć łącze symboliczne /usr/bin. Możesz to osiągnąć, wyłączając Ochronę integralności systemu (nie rób tego, po prostu edytuj skrypty ...). Możesz to wyłączyć poprzez (sam tego nie testowałem !!!):

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
źródło
2
Pominąłeś punkt: pytający ma skrypty, które określają #!/usr/bin/zhjako powłokę, więc rozwiązaniem, którego szuka, jest połączenie tej lokalizacji z miejscem, w którym faktycznie znajduje się powłoka, ale jak mówisz, jest chroniony przed zrobieniem tego. Jeśli ochrona nie zostanie ominięta, jedynym rozwiązaniem wydaje się być edycja zbiorcza skryptów.
AFH
No tak, masz rację, on musi edytować skrypty (co może się zdarzyć za pomocą jednego polecenia).
13dimitar
@Dimitar spójrz na pytanie: Czy istnieje lepszy sposób na osiągnięcie mojego pierwotnego celu? Zauważ, że naprawienie #! linie nie jest opcją.
Lenniey
1
zauważono