/ usr / bin vs / usr / local / bin en Linux

445

¿Por qué hay tantos lugares para poner un binario en Linux? Hay al menos estos cinco:

  1. /bin/
  2. /sbin/
  3. /usr/bin/
  4. /usr/local/bin/
  5. /usr/local/sbin/

Y en mi apartado de oficina, no tengo permisos de escritura para algunos de estos.

¿Qué tipo de binario entra en cuál de estos bins?

Lazer
fuente
28
Se le olvidó /usr/sbin/.
Hola71
15
Y ~/bin/para cosas personales.
Calmarius
1
Hay menos lugares hoy en día, ya que /binse fusionó con /usr/biny /sbinse fusionó con /usr/sbin- vea The Case for the / usr Merge .
Piotr Dobrogost
Pregunta relacionada: askubuntu.com/questions/308045/…
Gabriel Staples
@ Calmarius, ¿qué? no deberías usar /usr/local/bin?
Pacerier

Respuestas:

558
  1. /bin(y /sbin) estaban destinados a programas que debían estar en una /partición pequeña antes de que /usrse montaran las particiones más grandes , etc. En la actualidad, sirve principalmente como una ubicación estándar para programas clave como /bin/sh, aunque la intención original aún puede ser relevante, por ejemplo, para instalaciones en pequeños dispositivos integrados.

  2. /sbin, a diferencia de /bin, es para los programas de administración del sistema (que normalmente no usan los usuarios comunes) necesarios antes de /usrmontarlos.

  3. /usr/bin es para programas de usuario normal gestionados por distribución.

  4. Hay una /usr/sbincon la misma relación /usr/binque /sbintiene que /bin.

  5. /usr/local/bines para programas de usuario normales no administrados por el administrador de paquetes de distribución, por ejemplo, paquetes compilados localmente. No debe instalarlos /usr/binporque las futuras actualizaciones de distribución pueden modificarlos o eliminarlos sin previo aviso.

  6. /usr/local/sbin, como probablemente puedas adivinar en este momento, es /usr/local/bincomo /usr/sbinhacerlo /usr/bin.

Además, también /opthay opciones para paquetes monolíticos sin distribución, aunque antes de que se integraran adecuadamente, varias distribuciones pusieron allí a Gnome y KDE. En general, debe reservarlo para paquetes de terceros grandes y de mal comportamiento, como Oracle.

geekosaur
fuente
37
Creo que esta respuesta hace un gran trabajo al aclarar un conjunto común de convenciones, pero esta publicación de Rob Landley es una lectura realmente genial si quieres una idea de las tonterías ... lists.busybox.net/pipermail/busybox/2010-December /074114.html
Subfuzion
3
refspecs.linuxfoundation.org/fhs.shtml para la referencia canónica actual. El enlace de @kojiro está desactualizado y no tiene la nueva especificación.
Didier A.
2
¿Dónde pongo un contenedor que descargué de Internet? Según su descripción, parece que debería ir en / usr / local / bin o / usr / bin. ¿Es / usr / bin algo que nunca debería tocar manualmente y dejar que solo juegue el administrador de paquetes?
Didier A.
3
@DidierA. póngalo ~/biny agregue ese directorio a su RUTA como usuario ... Gracias por la nota, eliminé mi comentario seriamente desactualizado.
kojiro
3
Encontré la respuesta a la primera parte de mi pregunta aquí: superuser.com/a/238993/425838 . La precedencia se basa en el orden en la PATHvariable del sistema , y echo $PATHpara mí muestra /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games, lo que significa que los ejecutables /usr/local/bintienen prioridad sobre los /usr/binque tienen prioridad sobre los que están en /bin.
Gabriel Staples
65

Recomiendo echar un vistazo a la página del manual de jerarquía del sistema de archivos:

man hier

Que también está disponible en línea, por ejemplo: http://linux.die.net/man/7/hier

davitenio
fuente
1
Esto no responde la pregunta del usuario.
Billy ONeal
14
La página de manual contiene una entrada para cada uno de los directorios bin, explicando qué entra en ellos, que fue una de las preguntas.
davitenio
34

La entrada Estándar de jerarquía del sistema de archivos en Wikipedia me ayudó a responder la misma pregunta cuando la tuve, además tiene una tabla muy explicativa.

Extracto de esa página 1 :

/bin        Essential command binaries that need to be available in single user mode; for all users, e.g., cat, ls, cp.
/usr/bin    Non-essential command binaries (not needed in single user mode); for all users.
/usr/local  Tertiary hierarchy for local data, specific to this host. Typically has further subdirectories, e.g., bin, lib, share
/usr/sbin   Non-essential system binaries, e.g., daemons for various network-services.
/sbin       Essential system binaries, e.g., fsck, init, route.

1 Recuperado el 19 de junio de 2019; Enlace permanente .

Humphrey Bogart
fuente
17

Los sbindirectorios contienen programas que generalmente son solo de administración del sistema. Los programas para usuarios habituales nunca deberían entrar en ellos.

Se necesitan algunos programas durante el inicio y terminan en /bin/o /sbin/. Deben estar disponibles antes de montar los sistemas de archivos. Cosas como mounty fsckque se requieren para verificar y montar sistemas de archivos deben estar allí.

La mayoría de los programas empaquetados terminan en /usr/bin/y /usr/sbin/. Estos pueden estar en un sistema de archivos que no sea el sistema de archivos raíz. En algunos casos, pueden estar en una unidad montada en red.

Programas locales y scripts pertenecen a /usr/local/bin/y /usr/local/sbin/. Esto los identifica como claramente no estándar, y posiblemente solo disponibles en el sitio.

Para obtener más información, intente ejecutar el comando man hierque debe proporcionar una descripción de la jerarquía del sistema de archivos recomendada para su distribución. Es posible que también desee leer sobre la Jerarquía del sistema de archivos en Wikipedia

BillThor
fuente
1
+1 Una explicación realmente concisa si top es demasiado.
CppLearner
"Los programas locales y las secuencias de comandos pertenecen a / usr / local / bin / y / usr / local / sbin /" - Te refieres a los programas locales como "no forman parte del sistema operativo, pero decidí instalarlos y quiero usarlos "?
Jim Aho el
11

En la década de 1970, UNIXtenía todos los ejecutables oficiales /biny /usr/binestaba debajo de los directorios de inicio de los usuarios (por ejemplo /usr/dmr), que estaba disponible para que cualquier usuario almacenara sus propios archivos binarios que también podrían haber sido de interés para otros.

El resultado de esta apertura /usr/binfue un depósito de basura de software indocumentado y, por lo tanto, Stephen Bourneescribió un cron scriptque buscaba nuevos archivos binarios todas las noches y eliminaba todos los archivos binarios que no tenían documentación o que se habían actualizado sin actualizar su documentación también.

A fines de la década de 1970, /usr/binse integró en la distribución base del sistema operativo y la gente comenzó a usar /usr/local/binpara el propósito de la apertura anterior /usr/bin.

Después de un tiempo, los administradores de sistemas solían /usr/local/binalmacenar non-localsoftware importado de la red (por ejemplo, USENET) y, como las empresas de UNIX no querían repetir el mismo error que antes /usr/bin, hubo una conferencia sobre la jerarquía del sistema de archivos alrededor de 1987 donde todas las empresas de UNIX acordaron renunciar /usr/local/biny usar /opt/<vendor>/binen su lugar.

Desafortunadamente, las distribuciones de Linux no siguieron esta decisión ...

astuto
fuente
Si bien es muy interesante, nada de esto incluso intenta responder a la pregunta que no se /opttrataba sobre UNIX y no sobre UNIX sino sobre Linux. Esto es como responder "¿Por qué los automóviles tienen 4 ruedas?" con "¡Las bicicletas tienen 2! Lamentablemente, los autos no". lo que no ayuda al OP a entender por qué los automóviles tienen 4.
terdon
2
Si no puede utilizar la explicación dada como una explicación de los antecedentes de Linux y el hecho de que a Linux le gusta imitar UNIX, es posible que le falte el fondo necesario.
schily
1
Interesante, pero algo en lo que me confundo y que tal vez también es solo histórico. Hoy, descargar un contenedor en línea y un contenedor de la empresa no es muy diferente. Si Joe Blow hace un programa y lo descargo, ¿por qué no ponerlo en / opt / JowBlow / bin en lugar de / usr / local / bin. ¿Es una cuestión de proveedor confiable versus no confiable? No parece tener sentido para mí.
Didier A.
1
Desearía haber conocido esta historia 'exacta' hace unos años. a) Me preguntaba por qué AIX evitó / usr / local, utiliza / opt / IBM y / opt / ibm y bullfreeware / opt / freeware, y por qué DEBO haber utilizado una ruta diferente (no solo / opt / * sbin). En cuanto a la semi-relevancia con Linux - mejores herramientas GNU - el prefijo predeterminado - en auto-tools es / usr / local. Lástima que las herramientas automáticas (automake, autoconf, etc.) no sigan ... Pero todos sobrevivimos y aprendemos dónde los distribuidores || ponen sus programas.
Michael Felt
¿Podríamos tener otra de estas conferencias? Justo esta vez, ¡TODOS ESCUCHAN!
MemphiZ