¿Directorio estándar de Unix para poner ejecutables o scripts personalizados? [cerrado]

79

Si tengo un script o programas de shell personalizados, que creé yo mismo o descargué de la web, y quiero poder ejecutarlo desde la CLI, ¿existe la ubicación estándar para poner esto en la estructura de directorios de Linux / Unix?

/usr/bin ?
/usr/local/bin ?
/usr/lib ?
/usr/sbin ?
/bin ?
/sbin ?
/var ?

Normalmente lo pongo en mi carpeta ~ / bin y lo pongo en PATH, pero no parece limpio. Y cada vez que descargo un nuevo programa, tengo que volver a ponerlo en el PATH.

atedja
fuente
17
Sugiero man hier.
Greg Hewgill
4
Si su ~ / bin está en la RUTA, entonces todos los programas que ponga en ~ / bin también deberían estar en su ruta ... ¿Qué quiere decir con que tiene que volver a ponerlo en la RUTA?
tpg2114
Estoy de acuerdo con @ tpg2114, ~/bines una buena ubicación para sus scripts de shell propiedad del usuario.
Niklas B.
Pongo los programas dentro de otra subcarpeta: ~ / bin / xyz, ~ / bin / abc. Así que tengo que poner cada uno de esos en PATH.
atedja
1
Tendrías que hacer lo mismo sin importar dónde lo pongas en ese momento. Si pones / usr / bin / xyz, tendrás que agregarlo también a la ruta.
tpg2114

Respuestas:

87

/usr/local/binexiste precisamente para este propósito, para la instalación en todo el sistema. Para su propio uso privado, ~/bines el estándar de facto.

Si desea mantener cada binario en su propio subdirectorio, puede hacerlo y agregar un enlace simbólico a un directorio que ya está en su PATH. Así por ejemplo

curl -o $HOME/downloads/fnord http://fnord.example.com/script.exe
ln -s $HOME/downloads/fnord $HOME/bin/

proporcionado $HOME/binestá en su PATH. (Hay herramientas como las stowque hacen esto, y mucho más, detrás de escena para usted).

tripleee
fuente
3
Como consejo para los usuarios de Mac: si eliges ´ ~ / bin´ y no quieres que este directorio aparezca en i Finder, puedes hacerlo invisible con SETFILE (1) : ´setfile -a V ~ / bin´ para hacer invisible y ´setfile -av ~ / bin´ para hacer visible nuevamente. Tenga en cuenta que esto requiere las herramientas Xcode .
Henrik
Gracias. También recuerde sbin para sudoers.
m3nda
@tripleee: ¿Existe un directorio estándar de facto para scripts (bash, perl, etc.)? Estoy pensando en, por ejemplo, ~ / etc? El punto es que no realiza una copia de seguridad / seguimiento con un cvs / .. de la misma manera que los scripts y los binarios.
phs
2
@phs bines para todo tipo de ejecutables, scripts o binarios adecuados. Si los quiere bajo control de versión directo, poner todo su bincontrol de versiones es sin duda una opción; aunque más comúnmente, tiene un proyecto separado para cada uno, o al menos cada grupo distinto. Cuando lance una nueva versión, instálela en la suya bin. O si te tomas en serio la comida para perros y / o tienes muy pocas sorpresas en tu vida, coloca un enlace simbólico a tu versión de desarrollo en tu bin.
tripleee
Gracias, hice un ln -s / usr / local / bin / root / para realizar un mejor seguimiento de los ejecutables y respetar ambos estándares;)
capitano666
17

Esto puede variar ligeramente según el tipo de Unix. Estoy asumiendo Linux aquí (aunque esto podría aplicarse a OSX). Según el estándar de jerarquía del sistema de archivos (FHS) (enlace obtenido del grupo de trabajo de la base estándar de Linux ):

La /usr/localjerarquía es para que la utilice el administrador del sistema al instalar software localmente. Debe estar a salvo de que se sobrescriba cuando se actualice el software del sistema. Se puede usar para programas y datos que se pueden compartir entre un grupo de hosts, pero que no se encuentran en /usr.

El software instalado localmente debe colocarse dentro en /usr/locallugar de a /usrmenos que se esté instalando para reemplazar o actualizar el software en formato /usr.

/usr/local/bin suele estar en la ruta de forma predeterminada.

Tenga en cuenta que solo debe colocar el ejecutable o un enlace a él /usr/local/bin, el resto puede tener que ingresar /usr/local/libo /usr/local/share.

El /optárbol también podría ser sensato:

/opt está reservado para la instalación de paquetes de software de aplicación complementarios.

Un paquete para ser instalado en / opt debe ubicar sus archivos estáticos en una separada /opt/<package>o/opt/<provider> árbol de directorio , donde <package>hay un nombre que describe el paquete de software y <provider> es el nombre registrado de LANANA del proveedor.

[...]

Los directorios / opt / bin, / opt / doc, / opt / include, / opt / info, / opt / lib y / opt / man están reservados para el uso del administrador del sistema local. Los paquetes pueden proporcionar archivos "front-end" destinados a ser colocados en (enlazando o copiando) estos directorios reservados por el administrador del sistema local, pero deben funcionar normalmente en ausencia de estos directorios reservados.

(Puede crear su propio enlace desde /opt/your-package/bin/executablehacia /opt/biny poner /opt/binel PATHsi aún no está allí).

Bruno
fuente