Невозможно создать символическую ссылку внутри / usr / bin, даже если sudo

101

Когда я пытаюсь создать символическую ссылку на двоичный файл в моей папке / usr / bin, я получаю сообщение об ошибке Operation not allowed:

 sudo ln -s /usr/bin/python2.7 /usr/bin/python2
ln: /usr/bin/python2: Operation not permitted

Даже как sudo я получаю эту ошибку.

egidra
источник
Какая у вас 1.OS 2. Распространение 3. Файловая система, пожалуйста?
Rany Albeg Wein
Mac OSX El Capitan 10.11.4
egidra
1
Вы пробовали следующее: stackoverflow.com/questions/32659348/… ?
Rany Albeg Wein

Ответы:

157

Почему я не могу создать символическую ссылку /usr/bin?

Новая функция защиты целостности системы El Capitan предотвращает внесение изменений в несколько основных частей OS X, включая большую часть /usr/, даже с правами root.

Как я могу добавить исполняемые файлы в свой путь?

/usr/localВместо этого нужны локальные настройки, например то, что вы делаете . Путь /usr/local/binне существует по умолчанию, но вы можете создать его и поместить в него пользовательские двоичные файлы (и символические ссылки):

sudo mkdir -p /usr/local/bin
sudo ln -s /usr/bin/python2.7 /usr/local/bin/python2

Обратите внимание, что, хотя /usr/local/binпо умолчанию он не существует, он находится в PATH по умолчанию, поэтому, как только вы его создадите, он будет искать команды.

Отключение SIP

Также можно отключить защиту целостности системы, но обычно лучше оставить ее включенной и выполнить настройку в более подходящих местах. В вопросе Apple Stack Exchange есть более подробная информация об этом: что такое функция Rootless в El-Captain на самом деле? .

Гордон Дэвиссон
источник
18

Я создал символическую ссылку для Sublime Text 3 в Mac OS High Sierra как

sudo ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/

Я также пытался создать символическую ссылку в «/ usr / bin» и получал «Операция не разрешена».

Затем я создал символическую ссылку в «/ usr / local / bin», и ошибки не было. Символьная ссылка работает нормально. Просто убедитесь, что "/ usr / local / bin" находится в пути.

Итак, похоже, что доступ к «/ usr / bin» ограничен.

Винит Шарма
источник
7

Перезагрузка системы -> длинное нажатие CMD + R . выберите терминал в меню утилит, введите следующую команду csrutil disable close terminal and restart system.

Джеймс
источник
9
Это отключает защиту целостности системы. Наверное, лучше было бы найти другое, более безопасное решение.
MattSidor
9
Лично я считаю это правильным решением. Я не вижу причин для того, чтобы ОС запрещала мне создавать символические ссылки в этом каталоге или любом другом каталоге как sudo.
rjhilgefort
0
  1. Create a symbolic link to psql in usr/bin (for mac only)
         command: sudo ln -s /Applications/Postgres.app/Contents/Versions/latest/bin/psql /usr/bin/psql 

если вы не можете создать символическую ссылку из-за проблем с разрешением, это будет из-за "csrutil". После отключения csrutil вы можете создать символическую ссылку. Чтобы отключить CSRU, выполните следующие действия:

Перезагрузите ваш Mac. Перед запуском OS X нажмите и удерживайте Command-R, пока не увидите значок Apple и индикатор выполнения. Релиз. Это загрузит вас в Recovery. В меню «Утилиты» (на верхней панели) выберите «Терминал». В командной строке введите точно следующее и нажмите Return: csrutil disable Терминал должен отобразить сообщение о том, что SIP отключен. В меню  выберите «Перезагрузить».

Шрима
источник
-4

Попробуйте sudo suсначала запустить, а затем выполните команду с корневым уровнем.

Dre
источник
2
Это не решит проблему OP. Проблема связана с защитой целостности системы в современных системах MacOS.
cgseller