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


Si tengo un script de shell personalizado o programas, que he creado yo mismo o descargado de la web, y quiero ser capaz de ejecutar esto desde la CLI, ¿existe la ubicación estándar para poner esto en la estructura de directorios Linux/Unix?

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

Normalmente lo pongo debajo de mi carpeta ~/bin y lo pongo en PATH, pero no parece limpio. Y cada vez que descargué un nuevo programa, tengo que ponerlo en el CAMINO de nuevo.

Author: atedja, 2012-02-07

3 answers

/usr/local/bin existe precisamente para este propósito, para la instalación de todo el sistema. Para su propio uso privado, ~/bin es 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/

Siempre que $HOME/bin esté en tu PATH. (Hay herramientas como stow que hacen esto behind y mucho más behind entre bastidores para ti.)

 73
Author: tripleee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-28 04:10:13

Esto puede variar ligeramente dependiendo del sabor de Unix. Estoy asumiendo Linux aquí (aunque esto podría aplicarse a OSX). De acuerdo con el Filesystem Hierarchy Standard (FHS) (enlace obtenido del Linux Standard Base working group):

La jerarquía /usr/local es para uso del administrador del sistema cuando instalación de software localmente. Tiene que estar a salvo de ser sobrescrita cuando se actualiza el software del sistema. Puede utilizarse para programas y datos que se pueden compartir entre un grupo de anfitriones, pero no encuentra en /usr.

El software instalado localmente debe colocarse dentro de /usr/local en lugar que /usr a menos que se esté instalando para reemplazar o actualizar el software en /usr.

/usr/local/bin a menudo está en la ruta por defecto.

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

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

/opt está reservado para la instalación de software de aplicación adicional paquete.

Un paquete que se va a instalar en / opt debe ubicar sus archivos estáticos en un separe /opt/<package> o /opt/<provider> el árbol de directorios, donde <package> es un nombre que describe el paquete de software y <provider> es el nombre registrado LANANA del proveedor.

[...]

El directorio /opt/bin, /opt/doc /opt/include /opt/info, /opt/lib, y / opt / man están reservados para el sistema local uso del administrador. Paquete puede proporcionar archivos "front-end" destinados a ser colocados en (mediante enlaces o copiando) estos directorios reservados por el administrador del sistema local, pero debe funcionar normalmente en ausencia de estos reservados Directory.

(Puedes hacer tu propio enlace de /opt/your-package/bin/executable a /opt/bin, y poner /opt/bin en el PATH si no está ya allí.)

 16
Author: Bruno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-06 23:20:31

Bueno, usaría ~/bin (mientras no soy root), pero con respecto a $PATH siempre puedes hacer

export PATH=".:${PATH}"
# or 
export PATH="${PATH}:."

De esta manera el directorio de trabajo actual siempre estará en su $PATH. Aunque tiene algunos problemas de seguridad... especialmente con scripts descargados.

 -9
Author: Zsolt Botykai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-06 22:52:49