¿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.

usuario1934428
fuente
¿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....
13dimitar
fuente
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