Як створити символьні посилання в / 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.