Come creare collegamenti simbolici in / usr / bin su un Mac?


11

Ambiente: OSX Sierra, versione del kernel Darwin 16.3.0

Problema di root: Voglio usare un sacco di script di shell in un repository centrale, che hanno un #! / Usr / bin / zsh. Sul mio Mac, zsh è in / bin / zsh.

Tentata soluzione: voglio creare un collegamento simbolico

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

Il mio account utente ha i diritti di amministratore, ma io non sono root e preferirei non abilitare l'utente root su questo Mac. Pertanto ho prima fatto a

sudo su

per ottenere una shell con i privilegi di root e quindi eseguire il comando ln . Comunque ricevo ancora il messaggio di errore ln: / usr / bin / zsh: operazione non consentita .

Domande:

  • Perché visualizzo questo messaggio di errore?

  • Cosa dovrei fare per creare il link?

  • Esiste un modo migliore per raggiungere il mio obiettivo originale? Si noti che la correzione del #! linee non è un'opzione.


Perché non basta copiare /usr/bin/zsha /bin/zsh?
Lenniey,

1
@Lenniey In questo modo stai creando una copia libera che non verrà aggiornata insieme all'originale.
Mario,

@Mario whelp ... ovviamente hai ragione. OP: non farlo mai! ;)
Lenniey,

1
@Lenniey - La copia deve andare nell'altra direzione! E se riesci a copiare, puoi collegarti.
AFH,

@AFH sì, il mio commento è un disastro completo ...
Lenniey,

Risposte:


15

Questo messaggio viene visualizzato a causa della protezione dell'integrità del sistema di Apple . La protezione dell'integrità del sistema include la protezione per queste parti del sistema:

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

Percorsi e app che app e installatori di terze parti possono continuare a scrivere per includere:

/Applications
/Library
/usr/local

Questo significa che puoi semplicemente creare un link simbolico in /usr/local/bin(è ancora nel tuo $ PATH).

MA, sembra che tu abbia specificamente bisogno di creare il link simbolico in /usr/bin. Puoi ottenerlo disabilitando System Integrity Protection (per favore non farlo, basta modificare gli script ...). Puoi disabilitarlo da (non l'ho provato io stesso !!!):

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
Hai perso il punto: l'interrogante ha degli script che specificano #!/usr/bin/zhcome shell, quindi la soluzione che cerca è quella di collegare questa posizione a dove risiede effettivamente la shell, ma come dici che è protetto dal farlo. A meno che la protezione non venga ignorata, l'unica soluzione sembrerebbe essere una modifica in batch degli script.
AFH,

Bene sì, hai ragione, deve modificare gli script (cosa che può accadere con un singolo comando).
13dimitar,

@Dimitar guarda la domanda: esiste un modo migliore per raggiungere il mio obiettivo originale? Si noti che la correzione del #! linee non è un'opzione.
Lenniey,

1
preso nota, ho modificato la mia risposta
13
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.