Як створити символьні посилання в / usr / bin на Mac?


11

Навколишнє середовище: OSX Sierra, Darwin Kernel Версія 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 Таким чином ви створюєте друковану копію, яка не оновлюватиметься разом із оригіналом.
— Маріо

@Mario whelp ... звичайно, ти маєш рацію. ОП: ніколи цього не роби! ;)
— Ленний

1
@Lenniey - копія повинна йти іншим шляхом! А якщо ви зможете скопіювати, то ви можете зв’язати.
— АФХ

@AFH так, мій коментар є повним безладом ...
— Ленні

Відповіді:


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як оболонку, тому рішення, яке він шукає, полягає в тому, щоб пов’язати цю локацію з тим, де фактично знаходиться оболонка, але, як ви кажете, він захищений від цього. Якщо захист не обійдений, єдиним рішенням, здавалося б, буде пакетне редагування сценаріїв.
— АФХ

Ну так, ви маєте рацію, він повинен редагувати сценарії (що може статися за допомогою однієї команди).
— 13димітар

@Dimitar подивіться на запитання: чи є кращий спосіб досягти своєї первісної мети? Зауважте, що виправлення #! рядки - це не варіант.
— Леннієв

1
Примітка зроблена, я змінив свою відповідь
— 13димітар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.