Как создать символические ссылки в / 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.