Diferencias entre /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin

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:

Solución

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/.

Comentarios (6)

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

Directorios del sistema para los binarios

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

¿Dónde poner tus propios scripts?

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


Lo que sé que no sé

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.

Comentarios (5)