Ś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ą.
/usr/bin/zsh
do/bin/zsh
?Odpowiedzi:
Ten komunikat pojawia się z powodu ochrony integralności systemu Apple . Ochrona integralności systemu obejmuje ochronę tych części systemu:
Ścieżki i aplikacje, które aplikacje i instalatory innych firm mogą nadal pisać, obejmują:
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 !!!):źródło
#!/usr/bin/zh
jako 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.