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ą.


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....

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.