web-dev-qa-db-fra.com

Impossible de créer un lien symbolique dans / usr / bin même en tant que sudo

Lorsque j'essaie de faire un lien symbolique vers un fichier binaire dans mon dossier/usr/bin, j'obtiens une erreur d'opération non autorisée:

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

Même en tant que Sudo, j'obtiens cette erreur.

72
egidra

Pourquoi ne puis-je pas créer de lien symbolique vers /usr/bin?

La nouvelle fonctionnalité de protection de l'intégrité du système d'El Capitan empêche toute modification de plusieurs composants centraux d'OS X, y compris la plupart des /usr/, même par root.

Comment puis-je toujours ajouter des fichiers exécutables à mon chemin?

Les personnalisations locales, telles que ce que vous faites, appartiennent plutôt à /usr/local. Le chemin /usr/local/bin n'existe pas par défaut, mais vous pouvez le créer et y placer des fichiers binaires personnalisés (et des liens symboliques):

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

Notez que bien que /usr/local/bin n'existe pas par défaut, il est dans dans le chemin PATH par défaut. Ainsi, dès que vous le créez, il ' On cherchera des commandes.

Désactiver SIP

Il est également possible de désactiver la protection de l'intégrité du système, mais il est généralement préférable de le laisser et de le personnaliser dans des emplacements plus appropriés. Une question Apple Stack Exchange contient plus de détails à ce sujet: Qu'est-ce que la fonctionnalité sans racines dans El-Captain, vraiment? .

117
Gordon Davisson

J'ai créé le lien symbolique pour Sublime Text 3 sous Mac OS High Sierra en tant que

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

J'essayais également de créer le lien symbolique dans "/ usr/bin" et obtenais Opération non autorisée.

Ensuite, j'ai créé le lien symbolique dans "/ usr/local/bin" et il n'y a pas eu d'erreur. Le lien symbolique fonctionne bien. Assurez-vous simplement que "/ usr/local/bin" est dans le chemin.

Il semble donc que l'accès à "/ usr/bin" soit restreint.

9
Vineet Sharma

Redémarrez le système -> appui long cmd + R. sélectionnez un terminal dans le menu Utilitaires tapez la commande suivante csrutil disable fermez le terminal et redémarrez le système.

4
James