¿Dónde se debe colocar un ejecutable local?

63

Tengo un ejecutable para el cliente de control de versiones forzado ( p4). No puedo ubicarlo /opt/localporque no tengo privilegios de root. ¿Existe una ubicación estándar donde se debe colocar debajo $HOME?

¿La Jerarquía del sistema de archivos tiene una convención que dice que se deben colocar ejecutables / binarios locales $HOME/bin?

No pude encontrar tal convención mencionada en el artículo de Wikipedia para el FHS .

Además, si de hecho hay una convención, ¿tendría que incluir explícitamente la ruta al $HOME/bindirectorio o la ubicación del bindirectorio?

usuario640378
fuente

Respuestas:

65

En general, si un binario que no está instalado y mantenido por el sistema necesita ser accesible en todo el sistema para múltiples usuarios, un administrador debe colocarlo en /usr/local/bin. Existe una jerarquía completa /usr/localque generalmente se usa para paquetes de software compilados e instalados localmente.

Si usted es el único usuario de un binario, la instalación $HOME/bines la ubicación adecuada, ya que puede instalarlo usted mismo y será el único consumidor. Si compila un paquete de software desde la fuente, también es apropiado crear una jerarquía local parcial o completa en su $HOMEdirectorio. La jerarquía local completa se vería así.

  • $HOME/bin Binarios locales
  • $HOME/etc Configuración del sistema específica del host para binarios locales
  • $HOME/games Binarios locales del juego
  • $HOME/include Archivos de encabezado C locales
  • $HOME/lib Bibliotecas locales
  • $HOME/lib64 Bibliotecas locales de 64 bits.
  • $HOME/man Manuales locales en línea
  • $HOME/sbin Binarios del sistema local
  • $HOME/share Jerarquía local independiente de la arquitectura
  • $HOME/src Código fuente local

Al ejecutar configure, debe definir su jerarquía local para la instalación especificando $HOMEcomo prefijo los valores predeterminados de instalación.

./configure --prefix=$HOME

Ahora, cuando make && make installse ejecutan, los binarios compilados, los paquetes, las páginas de manual y las bibliotecas se instalarán en su $HOMEjerarquía local. Si no ha creado manualmente una $HOMEjerarquía local, make installcreará los directorios que necesita el paquete de software.

Una vez instalado $HOME/bin, puede agregar $HOME/bina su $PATHo llamar al binario usando el absoluto $PATH. Algunas distribuciones se incluirán $HOME/binen su $PATHpor defecto. Puede probar esto ya sea echo $PATHy ver si $HOME/binestá allí, o poner el binario $HOME/biny ejecutarlo which binaryname. Si vuelve con $HOME/bin/binaryname, entonces está en su $ PATH por defecto.

George M
fuente
55
siempre y cuando $ HOME no esté en un sistema de archivos montado noexec. / tmp / generalmente también se monta noexec.
ewanm89
3
Esto es correcto, es parte del Estándar de Jerarquía del Sistema de Archivos (FHS). pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHIERARCHY
Patrick
29
No recomendaría usarlo $HOME. Esto inunda su directorio de inicio con numerosos directorios que no le interesan en absoluto. ¿Quién quiere tener man, libetc. en el directorio de su hogar? Prefiero crear la jerarquía a continuación $HOME/bino $HOME/local. Eso agrega solo un subdirectorio a su directorio de inicio, en lugar de diez. Se PATHpueden adaptar fácilmente para incluir $HOME/bin/bino $HOME/local/bin.
Marco
18
Una opción es usar $ HOME / .local / {bin, lib, etc.}, Como se usa, por ejemplo, en la especificación basada en XDG ( standards.freedesktop.org/basedir-spec/basedir-spec-latest.html ) y python ( python.org/dev/peps/pep-0370 )
enero
44
@janneb La especificación del directorio base XDG a la que se refiere solo menciona $HOME/.local/share(Versión 0.7, 24 de noviembre de 2010)
Piotr Dobrogost
28

Como se mencionó anteriormente , /usr/localestá pensado como un prefijo para, esencialmente, el software instalado por el administrador del sistema, mientras que /usrdebe usarse para el software instalado desde los paquetes de la distribución.

La idea detrás de esto es evitar conflictos con el software distribuido (como rpmy debpaquetes) y darle al administrador un dominio completo sobre el prefijo "local".

Esto significa que un administrador puede instalar software compilado personalizado mientras usa una distribución como debian.

De la FHS

El software colocado en / o / usr puede sobrescribirse por las actualizaciones del sistema (aunque recomendamos que las distribuciones no sobrescriban los datos en / etc en estas circunstancias). Por esta razón, el software local no debe colocarse fuera de / usr / local sin una buena razón.

Al instalar un software específico para el usuario, se sugiere usarlo $HOMEcomo prefijo, ya que esto garantiza que tenga permisos de escritura. Personalmente, creo $HOME/.localque es una solución más elegante, ¡ya que evita abarrotar su (con suerte) directorio de inicio agradable y ordenado!

$HOME/.local/shareya se usa en la especificación del directorio base XDG de freedesktop.org , por lo que no hace falta mucho para imaginar agregar un $HOME/.local/bina $PATHy hacer un $HOME/.local/lib, etc., mientras lo hace.

Si realmente no desea que su prefijo sea un directorio oculto, también podría crear fácilmente un enlace simbólico, por ejemplo:

ln -s .local ~/local

Nota al margen

Vale la pena señalar que .config(no .local/etc) es el valor predeterminado $XDG_CONFIG_HOMEpara los archivos de configuración específicos del usuario. También debo señalar que, desafortunadamente, una gran parte del software ignora el XDG y crea archivos de configuración donde quieran (generalmente en la raíz de $HOME). También tenga en cuenta que $XDG_CONFIG_HOMEpuede desarmarse si $HOME/.configse desea el valor predeterminado .

Curiosamente, no hay un directorio reservado para los archivos de configuración predeterminados de una distribución, por lo que no hay forma de saber si un archivo /etcfue suministrado por la distribución o editado por el administrador del sistema.

MattSturgeon
fuente
1
No puedo encontrar ninguna mención .localen el FHS
Daniel Serodio
@DanielSerodio Está en la especificación del directorio XDG, un estándar más nuevo que está ganando protagonismo. Ver unix.stackexchange.com/questions/316765/... y superuser.com/questions/1170793/...
ivan_pozdeev
Esa nota al margen /etces realmente molesta cuando se administra un servidor con múltiples administradores: es bastante difícil hacer un seguimiento de las ediciones personalizadas para conf conf files.
naught101