Tengo seis directorios con archivos de comandos. Estos son /bin
, /sbin
, /usr/bin
, /usr/sbin
, /usr/local/bin
y /usr/local/sbin
.
¿Cuáles son las diferencias entre estos? Si escribo mis propios scripts, ¿dónde debo añadirlos?
Relacionado:
Para ello, consulte el Filesystem Hierarchy Standard (FHS) for Linux.
/bin
: Para binarios utilizables antes de montar la partición /usr
. Esto se utiliza para binarios triviales utilizados en la etapa de arranque muy temprana o aquellos que necesita tener disponibles en el arranque en modo monopuesto. Piensa en binarios como cat
, ls
, etc.
/sbin
: Lo mismo, pero para binarios con privilegios de superusuario (root) requeridos.
/usr/bin
: Igual que el primero, pero para binarios generales del sistema.
/usr/sbin
: Igual que el primero, pero para binarios con privilegios de superusuario (root) requeridos.
Si escribo mis propios scripts, ¿dónde debo añadirlos?
En ninguno de los anteriores. Debe utilizar /usr/local/bin
o /usr/local/sbin
para los scripts disponibles en todo el sistema. La ruta local
significa que no está gestionada por los paquetes del sistema (esto es un error para los paquetes de Debian/Ubuntu).
Para scripts de usuario, utilice ~/bin
(una carpeta bin personal en su directorio personal).
El FHS dice que para /usr/local
:
Jerarquía terciaria para datos locales, específicos de este host. Normalmente tiene otros subdirectorios, por ejemplo, bin/
, lib/
, share/
.
Yo mismo tuve una pregunta similar hace más de un año: https://askubuntu.com/questions/830074/best-directory-to-place-my-bash-scripts
man hier
(jerarquía) lista todos los directorios. Para obtener los que son solo para binarios usa:
$ man hier | grep -E 'bin$|sbin$|^.{7}(/bin)|^.{7}(/sbin)' -A2
/bin This directory contains executable programs which are needed in single user
mode and to bring the system up or repair it.
--
/sbin Like /bin, this directory holds commands needed to boot the system, but
which are usually not executed by normal users.
--
/usr/X11R6/bin
Binaries which belong to the X-Window system; often, there is a symbolic
link from the more traditional /usr/bin/X11 to here.
--
/usr/bin
This is the primary directory for executable programs. Most programs exe‐
cuted by normal users which are not needed for booting or for repairing the
--
/usr/local/bin
Binaries for programs local to the site.
--
/usr/local/sbin
Locally installed programs for system administration.
--
/usr/sbin
This directory contains program binaries for system administration which
are not essential for the boot process, for mounting /usr, or for system
Para que todos los usuarios puedan acceder a tus scripts puedes ponerlos en /usr/local/bin
. Ten en cuenta que necesitas acceso sudo
para añadir/cambiar archivos aquí. Ver: https://askubuntu.com/questions/195652/is-there-a-standard-place-for-placing-custom-linux-scripts
Para sus propios scripts de identificación de usuario póngalos en /home/su_nombre/bin
. Tenga en cuenta que tiene que crear este directorio primero y relanzar el terminal para obtener la ruta automáticamente configurada por ~/.profile
. Ver: https://askubuntu.com/questions/402353/how-to-add-home-username-bin-to-path?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
Estoy contemplando tomar algunos de mis scripts bash más complejos en Ask Ubuntu y configurarlos con scripts de instalación en github
. Aquí hay algunos ejemplos:
Creo que los scripts deberían ser instalados en /usr/bin
que está en el $PATH, pero no estoy seguro del lugar apropiado todavía.