Mac OS X: lugares convencionales donde deberían vivir los archivos binarios

61

He descargado una aplicación que es una aplicación de línea de comandos, y quiero ponerla en algún lugar donde pueda ejecutarla desde la línea de comandos sin tener que escribir la ruta explícitamente.

  1. ¿Cuáles son los caminos convencionales utilizados para algo como esto? /usr/bin? ¿Existen diferentes opciones, una si la quiero para todos los usuarios y otra si solo la quiero para un usuario en particular, como mi cuenta de administrador?

  2. ¿O debería ponerlo en su propio directorio bajo el directorio de Aplicaciones y agregarlo a la ruta? Si es así, ¿qué archivo controla dónde se establece la ruta?

Jason S
fuente

Respuestas:

53

Respuesta central: probablemente quieras /usr/local/bin. Dependiendo de qué tan reciente sea su macOS, es posible que deba actualizar su valor predeterminado $PATH. Ver abajo para más detalles.

ACTUALIZACIÓN 12-01-2018 En algún momento desde que escribí mi respuesta original, Apple cambió su valor predeterminado $PATH. Como resultado, mucho de lo que digo a continuación es irrelevante para las Macs recientes. Si escribe echo $PATHun terminal, y /usr/local/bines el primero, puede ignorar todo lo que se indica a continuación sobre cómo cambiar su $PATH.

Respuesta original

Las Mac son inusuales a este respecto. La $PATHvariable predeterminada para un usuario normal se ve así:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

Al poner /usr/local/bin después /usr/bin y /bin, Mac cambia el sistema habitual. Normalmente, puede poner algo en /usr/local/bin(digamos un segundo intérprete de Perl, compilado de una manera no estándar), y luego un usuario normal golpeará primero al personalizado en lugar del de todo el sistema. Esto es bueno. Los usuarios pueden obtener variantes, pero el sistema se mantiene puro. $PATHSin embargo, dado el valor predeterminado de Apple , los elementos que se encuentran /usr/bino /binse encontrarán antes que nada /usr/local/bin. (Esto básicamente anula el propósito de instalar, por ejemplo, el Perl personalizado en /usr/local/bin).

Para solucionar esto, puede cambiar el usuario normal $PATHeditando el .profilearchivo en el directorio de inicio del usuario. (Ese archivo puede no existir, si tiene una instalación completamente nueva. En ese caso, créelo).

Semi-relacionado: Homebrew proporciona una excelente gestión de paquetes para Mac. De manera predeterminada, Homebrew instala el software /usr/local, pero lo hace de una manera que hace que sea muy fácil eliminar cosas y volver a un estado normal más adelante.

Telémaco
fuente
1
En mi OsX 10.13.6 (High Sierra) recién instalado, la ruta contiene / usr / local / bin primero (aunque la carpeta ni siquiera existe) de forma predeterminada.
Legolas
1
@Legolas Apple parece haber cambiado la forma en que manejan esto. Editaré la publicación.
Telémaco el
9

/usr/local/biny /usr/local/sbinvale la pena agregar a su ruta, ya que muchos archivos MAKE para las compilaciones de origen se instalan por defecto.

Si utiliza MacPorts , vale la pena añadir /opt/local/biny /opt/local/sbinasí.

La mejor manera de hacer esto es agregar

export PATH=/usr/local/bin:/usr/local/sbin:/opt/local/bin:/opt/local/sbin:$PATH

al .bashrcarchivo en su directorio de inicio (que está oculto, por lo que la CLI es la mejor manera de hacerlo) o, si desea cambiar la ruta de acceso del sistema, agregue la misma línea /etc/bashrc(no oculta), pero lo hará Necesito sudohacer esto.

Si no tiene un .bashrcen el hogar de ningún usuario, puede hacer uno y agregarle esta línea, pero recuerde cambiar los permisos en el archivo que cree para que el usuario en cuestión lo pueda leer (obviamente no es relevante si usted ' lo estás haciendo para tu propio perfil).

Al $PATHfinal se agrega la ruta predeterminada del sistema a lo que haya puesto antes. Tenga en cuenta que el sistema busca archivos binarios en el orden de las rutas dadas, por lo que si instala un archivo binario /usr/localo /opt/localque también está instalado de forma predeterminada en el sistema, las versiones que instale se encontrarán primero, lo que puede (aunque rara vez) alterar las cosas. Vale la pena tener cuidado.

Buena información está aquí .

Debo señalar que lo anterior supone que está utilizando Bash para el shell, que es el predeterminado en Mac OS X v10.4 (Tiger) y Mac OS X v10.5 (Leopard), pero no en sistemas anteriores, que en su tcshlugar utilizaron que tiene una sintaxis diferente.

Espero que eso ayude...

avstrallen
fuente
1
/usr/local/binya está en un OS X predeterminado $PATH(aunque es demasiado tarde, vea mi respuesta). Si usa MacPorts, su instalador debería editar su ruta según sea necesario, al menos siempre lo ha hecho en mi experiencia. Dicho esto, es bueno que los usuarios sepan qué está haciendo (y por qué).
Telemachus
@Telemachus bien visto: cada vez que construyo una Mac para mí, lo primero que hago es personalizar el camino, ¡para que nunca pueda recordar lo que es estándar y lo que es mío!
avstrallen
1
Sé lo que estás esperando sobre el instalador de MacPorts que personaliza las rutas en .profile, pero he tenido una ocasión en el pasado en que, por alguna razón, no sé qué, esto no se pudo (lo que me confundió muchísimo) ! bastante tiempo) ... así que desde entonces tiendo a cablear en la mano ...
avstrallen
"que está oculto, por lo que la CLI es la mejor manera de hacer esto": pregunta tonta, ¿cómo ejecuta TextEdit en un archivo desde el símbolo del sistema?
Jason S
No existe una pregunta tonta: use el opencomando con el nombre del archivo como argumento y debería abrirse con lo que esté configurado como el editor de texto predeterminado (TextEdit como estándar).
avstrallen
7

Que tienden a ir con /usr/local. Aquí hay una buena explicación de por qué , que se refiere al Estándar de Jerarquía del Sistema de Archivos (FHS) .⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢, que en a su vez dice acerca de /usr/local:

Jerarquía terciaria para datos locales, específicos de este host. Por lo general, tiene más subdirectorios, por ejemplo, bin, lib, share.

John Topley
fuente
Sí, es casi lo mismo que otros sistemas operativos * nix en ese sentido.
jtbandes
2
Cite las partes esenciales de la respuesta de los enlaces de referencia, ya que la respuesta puede volverse inválida si las páginas enlazadas cambian.
DavidPostill