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.