Comment créer des liens symboliques dans / usr / bin sur un Mac?

11

Environnement: OSX Sierra, Darwin Kernel Version 16.3.0

Problème racine: je veux utiliser un tas de scripts shell dans un référentiel central, qui ont un #! / Usr / bin / zsh. Sur mon Mac, le zsh est dans / bin / zsh.

Solution tentée: je veux créer un lien symbolique

ln -s /bin/zsh /usr/bin/zsh

Mon compte d'utilisateur dispose de droits d'administrateur, mais je ne suis pas root et je préférerais ne pas activer l'utilisateur root sur ce Mac. J'ai donc d'abord fait

sudo su

pour obtenir un shell avec les privilèges root, puis exécuté la commande ln . Cependant, je reçois toujours le message d'erreur ln: / usr / bin / zsh: opération non autorisée .

Des questions:

  • Pourquoi ai-je ce message d'erreur?

  • Que dois-je faire pour créer le lien?

  • Existe-t-il une meilleure façon d'atteindre mon objectif initial? Notez que la correction du #! lignes n'est pas une option.

user1934428
la source
Pourquoi ne copiez-vous pas simplement /usr/bin/zshvers /bin/zsh?
Lenniey
1
@Lenniey De cette façon, vous créez une copie libre qui ne sera pas mise à jour avec l'original.
Mario
@Mario whelp ... bien sûr, vous avez raison. OP: ne fais jamais ça! ;)
Lenniey
1
@Lenniey - La copie doit aller dans l'autre sens! Et si vous pouvez copier, vous pouvez lier.
AFH
@AFH ouais mon commentaire est un gâchis complet ...
Lenniey

Réponses:

15

Vous obtenez ce message en raison de la protection de l'intégrité du système d'Apple . La protection de l'intégrité du système comprend la protection de ces parties du système:

/System
/usr
/bin
/sbin
Apps that are pre-installed with OS X

Chemins et applications que les applications et les installateurs tiers peuvent continuer à écrire pour inclure:

/Applications
/Library
/usr/local

Cela signifie que vous pouvez simplement créer un lien symbolique dans /usr/local/bin(il est toujours dans votre $ PATH).

MAIS, il semble que vous ayez spécifiquement besoin de créer le lien symbolique dans /usr/bin. Vous pouvez y parvenir en désactivant la protection de l'intégrité du système (veuillez ne pas le faire, modifiez simplement les scripts ..). Vous pouvez le désactiver par (je ne l'ai pas testé moi-même !!!):

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....
13dimitar
la source
2
Vous avez manqué le point: le questionneur a des scripts qui spécifient #!/usr/bin/zhcomme shell, donc la solution qu'il cherche est de lier cet emplacement à l'endroit où réside réellement le shell, mais comme vous le dites, il est protégé contre cela. À moins que la protection ne soit contournée, la seule solution semble être une modification par lots des scripts.
AFH
Eh bien oui, vous avez raison, il doit éditer les scripts (ce qui peut arriver avec une seule commande).
13dimitar du
@Dimitar examine la question: existe-t-il une meilleure façon d'atteindre mon objectif initial? Notez que la correction du #! lignes n'est pas une option.
Lenniey
1
note prise, j'ai modifié ma réponse
13dimitar