¿Cómo crear enlaces simbólicos en / usr / bin en una Mac?


11

Entorno: OSX Sierra, Darwin Kernel Versión 16.3.0

Problema raíz: quiero usar un montón de scripts de shell en un repositorio central, que tienen un #! / Usr / bin / zsh. En mi Mac, el zsh está en / bin / zsh.

Intento de solución: quiero crear un enlace simbólico

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

Mi cuenta de usuario tiene derechos de administrador, pero no soy root, y preferiría no habilitar al usuario root en esta Mac. Por lo tanto, primero hice un

sudo su

para obtener un shell con privilegios de root y luego ejecutar el comando ln . Sin embargo, sigo recibiendo el mensaje de error ln: / usr / bin / zsh: operación no permitida .

Preguntas:

  • ¿Por qué recibo este mensaje de error?

  • ¿Qué debería hacer para crear el enlace?

  • ¿Hay una mejor manera de lograr mi objetivo original? Tenga en cuenta que la fijación de la #! Las líneas no son una opción.


¿Por qué no acaba de copiar /usr/bin/zsha /bin/zsh?
— Lenniey

1
@Lenniey De esa manera, estás creando una copia suelta que no se actualizará junto con el original.
— Mario

@ Mario cachorro ... por supuesto que tienes razón. OP: ¡nunca hagas eso! ;)
— Lenniey

1
@Lenniey: ¡la copia debe ir en sentido contrario! Y si puede copiar, puede vincular.
— AFH

@AFH, sí, mi comentario es un completo desastre ...
— Lenniey

Respuestas:


15

Recibe este mensaje debido a la Protección de integridad del sistema de Apple . La Protección de integridad del sistema incluye protección para estas partes del sistema:

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

Las rutas y aplicaciones que las aplicaciones e instaladores de terceros pueden seguir escribiendo para incluir:

/Applications
/Library
/usr/local

Esto significa que simplemente puede crear un enlace simbólico en /usr/local/bin(todavía está en su $ PATH).

PERO, parece que específicamente necesitas crear el enlace simbólico /usr/bin. Puede lograrlo deshabilitando la Protección de integridad del sistema (por favor no lo haga, solo edite los scripts ...). Puede deshabilitarlo (¡no lo he probado yo mismo!):

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
Has perdido el punto: el interrogador tiene scripts que especifican #!/usr/bin/zhcomo el shell, por lo que la solución que busca es vincular esta ubicación a donde reside el shell, pero como dices, está protegido de hacerlo. A menos que se omita la protección, la única solución parecería ser una edición por lotes de los scripts.
— AFH

Bueno, sí, tienes razón, tiene que editar los scripts (lo que puede suceder con un solo comando).
— 13dimitar

@Dimitar mira la pregunta: ¿Hay una mejor manera de lograr mi objetivo original? Tenga en cuenta que la fijación de la #! Las líneas no son una opción.
— Lenniey

1
nota tomada, he modificado mi respuesta
— 13dimitar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.