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

283

Tengo seis directorios con archivos de comando. Estos son /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/biny /usr/local/sbin.

¿Cuáles son las diferencias entre estos? Si estoy escribiendo mis propios guiones, ¿dónde debo agregarlos?


Relacionado:


fuente
1
Pregunta relacionada: unix.stackexchange.com/questions/8656/…
Gabriel Staples
@Keelan Su pregunta está cerca de una pregunta que publiqué
WinEunuuchs2Unix

Respuestas:

349

Consulte el estándar de jerarquía del sistema de archivos (FHS) para Linux para esto.

  • /bin: Para binarios que se pueden usar antes de /usrmontar la partición. Esto se utiliza para archivos binarios triviales utilizados en la etapa de inicio muy temprana o los que necesita tener disponibles en el modo de inicio de usuario único. Piense en los binarios como cat, ls, etc.

  • /sbin : Igual, pero para binarios con privilegios de superusuario (root) requeridos .

  • /usr/bin: Igual que el primero, pero para binarios generales de todo el sistema .

  • /usr/sbin : Igual que el anterior, pero para binarios con privilegios de superusuario (root) requeridos.


si estoy escribiendo mis propios scripts, ¿dónde debo agregarlos?

Ninguna de las anteriores. Debe usar /usr/local/bino /usr/local/sbinpara scripts disponibles en todo el sistema. La localruta significa que no está gestionada por los paquetes del sistema (esto es un error para los paquetes Debian / Ubuntu).

Para secuencias de comandos con ámbito de usuario , use ~/bin(una carpeta bin personal en su directorio de inicio).

La FHS dice para /usr/local:

Jerarquía terciaria para datos locales, específicos de este host . Típicamente tiene, además, subdirectorios, por ejemplo, bin/, lib/, share/.

gertvdijk
fuente
entonces / bin es donde están instalados todos los archivos principales. como ls, cat, pwd, etc. Entonces, / usr / bin es donde están las aplicaciones instaladas por el usuario. ¿Cuáles son algunos ejemplos de lo que debería estar en / usr / bin?
Patoshi パ ト シ
1
¿Colocar scripts en /bincausa algún problema? He movido mis guiones de acuerdo con su respuesta, pero todavía tengo curiosidad
Rumesh
55
@RumeshSudhaharan no deberías hacer eso, porque es administrado por la administración de paquetes. Si algún otro paquete también quiere usar esa ruta, sobrescribirá su archivo. Los archivos en paquetes nunca pueden superponerse (al menos para los repositorios oficiales), por lo que estará más seguro al instalar en la ruta local. Además, es solo para su propia conveniencia y seguridad. En una ruta local, no puede estropear el sistema de una manera tan mala y no puede reemplazar accidentalmente un sistema binario.
gertvdijk
8
Me gusta la explicación en la página de error:Severity:Serious Certainty:Certain
cutrightjm
1
He puesto algunos archivos en / usr / local / bin y puedo ejecutarlos, sin embargo no puedo editarlos, ls -lano muestra nada
M. Reza Nasirloo
6

Tuve una pregunta similar hace más de un año: ¿El mejor directorio para colocar mis scripts de bash?

Directorios del sistema para binarios

man hier(jerarquía) enumera todos los directorios. Para obtener solo los binarios, use:

$ 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 guiones?

Para que todos los usuarios accedan a sus scripts, puede incluirlos /usr/local/bin. Tenga en cuenta que necesita sudoacceso para agregar / cambiar archivos aquí. Ver: ¿Existe un lugar estándar para colocar scripts de Linux personalizados?

Para sus propios scripts de ID de usuario, póngalos /home/YOUR_NAME/bin. Tenga en cuenta que primero debe crear este directorio y reiniciar el terminal para que la ruta se configure automáticamente ~/.profile. Ver: ¿Cómo agregar / home / username / bin a $ PATH?


Lo que sé no lo sé

Estoy pensando en tomar algunos de mis scripts de bash más complejos en Ask Ubuntu y configurarlos con scripts de instalación github. Aquí hay algunos ejemplos:

Creo que los scripts deberían instalarse en /usr/binel $ PATH, pero todavía no estoy seguro del lugar apropiado.

WinEunuuchs2Unix
fuente
1
Aprecio su esfuerzo, pero, excepto la parte "Lo que sé, no sé", repitió la respuesta de gertvdijk.
danzel
1
@danzel Creo que la parte clave es la man hiersección que no respondió la respuesta de gertvdijk. es decir, puede obtener la estructura jerárquica del directorio en la línea de comandos sin tener que recurrir a leerla en la web (es decir, aquí).
WinEunuuchs2Unix
1
esa es información interesante, estoy de acuerdo. Pero gertvdijk ya mencionó el Estándar de Jerarquía del Sistema de Archivos (que man hieres un extracto informativamente insuficiente de la OMI). Sin embargo, esta puede ser mi opinión personal.
danzel
@danzel Estoy de acuerdo en que los sitios web tienen un análisis mucho más profundo que el contenido de nuestros discos duros. Solo estoy tratando de señalar que la información está en nuestros discos duros sin recurrir a Internet. Además, falta el enlace de Wikipedia citado /usr/X11R6/biny /usr/local/binque se incluye en man heir.
WinEunuuchs2Unix
@ WinEunuuchs2Unix, re último para; ¿Por qué no /usr/local/binya que no eres el administrador de paquetes?
Pacerier