Como criar links simbólicos no / usr / bin no Mac?


11

Ambiente: OSX Sierra, Darwin Kernel versão 16.3.0

Problema raiz: quero usar um monte de scripts de shell em um repositório central, que possui um #! / Usr / bin / zsh. No meu Mac, o zsh está em / bin / zsh.

Tentativa de solução: quero criar um link simbólico

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

Minha conta de usuário possui direitos de administrador, mas não sou root e prefiro não habilitar o usuário root neste Mac. Portanto, eu fiz primeiro

sudo su

para obter um shell com privilégios de root e, em seguida, executou o comando ln . No entanto, ainda recebo a mensagem de erro ln: / usr / bin / zsh: Operação não permitida .

Questões:

  • Por que recebo essa mensagem de erro?

  • O que eu devo fazer para criar o link?

  • Existe uma maneira melhor de alcançar meu objetivo original? Observe que a fixação do #! linhas não é uma opção.


Por que você não copia apenas /usr/bin/zshpara /bin/zsh?
Lenniey

11
@Lenniey Dessa forma, você cria uma cópia solta que não será atualizada junto com o original.
Mario

Mario whelp ... é claro que você está certo. OP: nunca faça isso! ;)
Lenniey 18/01/19

11
@Lenniey - A cópia precisa ir para o outro lado! E se você pode copiar, pode vincular.
AFH

@AFH sim o meu comentário é uma completa bagunça ...
Lenniey

Respostas:


15

Você recebe esta mensagem por causa da Proteção da integridade do sistema da Apple . A Proteção de Integridade do Sistema inclui proteção para essas partes do sistema:

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

Caminhos e aplicativos que aplicativos e instaladores de terceiros podem continuar escrevendo para incluir:

/Applications
/Library
/usr/local

Isso significa que você pode simplesmente criar um link simbólico no /usr/local/bin(ainda está no seu $ PATH).

MAS, parece que você precisa especificamente criar o link simbólico /usr/bin. Você pode conseguir isso desativando a Proteção de integridade do sistema (por favor, não faça isso, basta editar os scripts ..). Você pode desativá-lo (eu mesmo não testei !!!):

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
Você não entendeu: o questionador possui scripts que especificam #!/usr/bin/zhcomo shell, então a solução que ele procura é vincular esse local ao local onde o shell realmente reside, mas como você diz, ele está protegido contra isso. A menos que a proteção seja ignorada, a única solução parece ser uma edição em lote dos scripts.
AFH

Bem, sim, você está correto, ele tem que editar os scripts (o que pode acontecer com um único comando).
13dimitar

@Dimitar veja a pergunta: Existe uma maneira melhor de alcançar meu objetivo original? Observe que a fixação do #! linhas não é uma opção.
Lenniey

11
tomado nota, eu modifiquei a minha resposta
13dimitar
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.