Как создать символические ссылки в / usr / bin на Mac?


11

Среда: OSX Sierra, ядро ​​Darwin версии 16.3.0

Корневая проблема: я хочу использовать кучу сценариев оболочки в центральном хранилище, которые имеют #! / Usr / bin / zsh. На моем Mac zsh находится в / bin / zsh.

Попытка решения: хочу создать символическую ссылку

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

Моя учетная запись имеет права администратора, но я не root, и я бы предпочел не включать root на этом Mac. Поэтому я сначала сделал

sudo su

чтобы получить оболочку с привилегиями root и затем выполнить команду ln . Однако я все еще получаю сообщение об ошибке ln: / usr / bin / zsh: Операция не разрешена .

Вопросов:

  • Почему я получаю это сообщение об ошибке?

  • Что мне нужно сделать, чтобы создать ссылку?

  • Есть ли лучший способ достичь моей первоначальной цели? Обратите внимание, что исправление #! линии не вариант.


Почему бы вам не просто скопировать /usr/bin/zshв /bin/zsh?
Леннией

1
@Lenniey Таким образом, вы создаете свободную копию, которая не будет обновляться вместе с оригиналом.
Марио

@ Марио щенок ... конечно, ты прав. ОП: никогда не делай этого! ;)
Леннией

1
@Lenniey - копия должна идти другим путем! И если вы можете скопировать, то вы можете ссылку.
AFH

@AFH да, мой комментарий - полный беспорядок ...
Lenniey

Ответы:


15

Вы получаете это сообщение из-за защиты целостности системы Apple . Защита целостности системы включает защиту следующих частей системы:

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

Пути и приложения, которые сторонние приложения и установщики могут продолжать писать, включают:

/Applications
/Library
/usr/local

Это означает, что вы можете просто создать символическую ссылку в /usr/local/bin(она все еще находится в вашем $ PATH).

НО, похоже, вам специально нужно создать символическую ссылку в /usr/bin. Вы можете добиться этого, отключив защиту целостности системы (не делайте этого, просто отредактируйте сценарии ..). Вы можете отключить его (я сам не проверял !!!):

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
Вы упустили момент: у спрашивающего есть сценарии, которые указывают #!/usr/bin/zhв качестве оболочки, поэтому он ищет решение связать это место с тем местом, где на самом деле находится оболочка, но, как вы говорите, он защищен от этого. Если защита не будет обойдена, единственным решением может быть пакетное редактирование сценариев.
AFH

Ну да, вы правы, он должен редактировать сценарии (что может произойти с помощью одной команды).
13dimitar

@Dimitar посмотрите на вопрос: есть ли лучший способ достичь моей первоначальной цели? Обратите внимание, что исправление #! линии не вариант.
Леннией

1
записка принята, я изменил свой ответ
13dimitar
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.