¿Qué es / usr / local / bin?

85

Antes de hoy, he usado el terminal hasta cierto punto para moverme dentro y fuera de los directorios y cambiar las fechas de los archivos usando el touchcomando. Me di cuenta de la extensión completa de la terminal después de instalar un script divertido en Mac y de tener chmod 755que hacer que el archivo fuera ejecutable después.

Sin /usr/local/binembargo, me gustaría saber qué es. /usr/, Supongo, es el usuario de la computadora. Sin /local/embargo, no estoy seguro de por qué está allí. Obviamente significa la computadora local, pero dado que está en la computadora (o en un servidor), ¿sería realmente necesario? ¿No /usr/binestaría bien?

Y lo que es /bin? ¿Por qué esta área se usa generalmente para instalar scripts en el terminal?

JFW
fuente

Respuestas:

77

/usr/local/bin es para programas que puede ejecutar un usuario normal.

  • La /usr/localjerarquía es para uso del administrador del sistema al instalar software localmente.
  • Es necesario evitar que se sobrescriba cuando se actualiza el software del sistema.
  • Se puede usar para programas y datos que se pueden compartir entre un grupo de hosts, pero que no se encuentran en /usr.
  • El software instalado localmente debe colocarse en /usr/locallugar de / usr a menos que se instale para reemplazar o actualizar el software /usr.

Esta fuente ayuda a explicar el estándar de jerarquía del sistema de archivos en un nivel más profundo.

Puede encontrar este artículo sobre el uso y abuso de/usr/local/bin interesantes también.

iamsid
fuente
"" "a menos que se esté instalando para reemplazar o actualizar el software en" usr "" ¿lo que significa?
Pacerier
63

/ usr /, supongo que es el usuario de la computadora.

Cerrar.

Unix comenzó como un sistema operativo multiusuario, por lo que no es "el usuario", es "los usuarios ", en plural.

Antes de que AT&T Unix System V Release 4 (SVR4) saliera en 1988 con sus herramientas de administración de usuarios predeterminadas para crear directorios de inicio de usuarios /home, la ubicación convencional era /usr.¹ Su $HOMEdirectorio podría haber estado /usr/jfwen un cuadro de System III .

/usrtambién contenía, entonces como ahora, /usr/bin, /usr/lib, etc. La experiencia mostró que la segregación de los directorios de inicio era una buena práctica de gestión del sistema, por lo que con el /homecambio de política en SVR4, dejó atrás todo lo que ahora consideramos como pertenecientes a /usr.

/usrtodavía tenía una buena razón para conservar el nombre: lo que quedó atrás fueron los archivos que no necesitaban estar disponibles hasta que el sistema se arrancó lo suficiente como para admitir el uso interactivo normal. Es decir, lo que quedó atrás fueron las partes del sistema operativo centradas en el usuario . Esto significaba que /usrpodría estar en un volumen físico diferente, lo que era bueno en los días de las unidades de disco duro de 92 MB del tamaño de las lavadoras .

Los primeros sistemas Unix tuvieron cuidado de mantener los archivos principales del sistema operativo fuera de /usrmodo que aún pudiera arrancar en modo de usuario único² incluso si el /usrvolumen no se podía montar por alguna razón. El volumen raíz contenía herramientas suficientes para volver a poner el /usrvolumen en línea.

Varias versiones de Unix ahora caso omiso de este principio constructivo de edad, ya que incluso pequeños sistemas embebidos tienen suficiente espacio tanto para los archivos de volumen de raíz tradicional y todas /usren una sola volume.³ de Red Hat Enterprise Linux, Solaris y Cygwin enlace simbólico /bina /usr/biny /liba /usr/libfin de que no hay Ya no hay diferencia entre estos directorios.

... / local / ... obviamente significa la computadora local ...

Si. Se refiere al hecho de que los archivos debajo /usr/localse supone que son particulares de ese sistema único. Los archivos que son genéricos deben vivir en otro lugar.

Esto también tiene raíces en la forma en que los sistemas Unix se usaban comúnmente hace décadas cuando todo esto estaba estandarizado. Una vez más, los discos duros de la época eran voluminosos, realmente caros y se almacenaban poco para los estándares actuales. Para ahorrar dinero y espacio en los discos, un laboratorio de computación lleno de cajas de Unix a menudo compartía la mayor parte de /usrNFS o algún otro protocolo de red para compartir archivos, por lo que cada caja no tenía que tener su propia copia redundante. Archivos específicos de una sola la caja iría debajo /usr/local, que sería un volumen separado de /usr.

Esta herencia histórica es la razón por la cual sigue siendo el valor predeterminado para la mayoría de los software de Unix de terceros para instalar /usr/localcuando se instala a mano. La mayoría de estos programas le permitirán instalar el paquete en otro lugar, pero al no elegir, obtiene el valor predeterminado seguro, que no interfiere con otras ubicaciones de instalación comunes con propósitos más específicos.

Hay buenas razones para hacer que el software se instale en otro lugar. El equipo macOS de Apple hace esto cuando construyen, digamos, a bashpartir del código fuente de GNU Bash . Se usan /como prefijo de instalación, anulando el /usr/localpredeterminado, de modo que Bash termine en /bin.

Otro ejemplo es la forma en que los sistemas Linux más antiguos segregaron su software GUI /usr/X11R6, para mantenerlo separado de la línea de comandos tradicional y el cursessoftware basado en. Esto se hizo simplemente anulando el /usr/localprefijo predeterminado con /usr/X11R6.⁵

¿Y qué es / bin?

Es la abreviatura de "binario", que en este contexto significa "un archivo que no es texto sin formato". La mayoría de estos archivos son ejecutables en un cuadro de Unix, por lo que estos dos términos se han convertido en sinónimos en algunos círculos. ("Por favor, constrúyeme un binario para RHEL 7, Fred").

Los archivos de texto en una máquina Unix viven en otro lugar: /etc, /usr/include, /usr/share, etc.

Érase una vez, incluso los scripts de shell, que son archivos de texto sin formato, se mantuvieron fuera de los bindirectorios, pero esta línea también se ha desdibujado. Hoy en día, los bindirectorios suelen contener cualquier tipo de archivo ejecutable, ya sea estrictamente "binario" o no.


Notas al pie y digresiones :

  1. La naturaleza primitiva de las herramientas de administración de usuarios antes de SVR4 significaba que el HOME=/usr/$NAMEesquema se documentaba simplemente como una convención, en lugar de que las herramientas de software lo aplicaran como predeterminado.

    Puede ver esto en la página 4-8 de la " Guía del administrador del sistema AT&T Unix System V versión 3.2 : aquí puede ver que AT&T recomienda el /usr/$NAMEesquema anterior en la última versión principal de Unix antes de que saliera SVR4.

    Era bastante común en los sistemas Unix más antiguos que los administradores de sistemas eligieran un esquema diferente que tuviera más sentido para ellos. Ser personas, eso significaba que se inventaron muchos esquemas diferentes.

    Un esquema que encontré antes se /home/$NAMEconvirtió en el estándar /u/$NAME.

    Otro sistema utilicé a principios de 1990 tenía tantos usuarios que no podían caber todos los directorios de inicio en un solo volumen físico, por lo que utiliza un esquema como /u1/$NAME, /u2/$NAMEy así sucesivamente, por lo que recuerdo. El disco en el que terminó su directorio de inicio fue simplemente una cuestión de cuál tenía espacio en el momento en que se creó su cuenta.

  2. Puede iniciar un cuadro de macOS en modo de usuario único manteniendo presionado Cmd-Smientras se inicia. Suelta una vez que la pantalla se vuelva negra y veas aparecer un texto gris claro. Es como correr bajo la Terminal, pero ocupa toda la pantalla porque la GUI aún no ha comenzado.

    Ten cuidado, estás corriendo como root.

    Escriba "salir" en el indicador de raíz de usuario único para salir del modo de usuario único y continuar arrancando en modo GUI multiusuario.

  3. Los sistemas operativos Unixy que aún parecen mantener los archivos críticos de modo de usuario único fuera /usr, de hecho, pueden no hacerlo en estos días. Una vez hice que un cuadro de FreeBSD 9 no se /usrpueda iniciar moviéndome a un volumen ZFS. Olvidé que las características de ZFS en la raíz no llegaron hasta FreeBSD 10, creando un Catch 22 : ¡el sistema operativo necesitaba archivos /usrpara poder montar /usr!

    Eso fue lo suficientemente malo, pero si FreeBSD 9 aún mantuviera sus cosas de arranque de un solo usuario fuera /usr, podría haberlo arreglado en su lugar. Como no arrancaría ni siquiera en modo de usuario único por /usrser imposible de montar, claramente esa tradición se había violado de alguna manera. Tuve que arrancar desde un CD de rescate para que el sistema volviera a funcionar.

  4. Aquí también es donde obtenemos /usr/share: segrega los archivos que podrían compartirse incluso entre cajas Unix con diferentes tipos de procesadores. Típicamente, archivos de texto: páginas man, el diccionario, etc.

  5. "X11R6" se refería a la versión del sistema X Window que sustentaba las GUI de Linux en el momento en que prevalecía esta convención. Los sistemas Linux generalmente dejaron de segregar el software GUI cuando X11R6 fue reemplazado por X.Org .

  6. Los sistemas Unix originales mantuvieron sus scripts de shell principales /etcpara evitar mezclarlos con los verdaderos binarios /bin.

Warren Young
fuente
3
Me encantó esa foto de lavadora!
pide el
@ Warren, ¿Cuáles son los sistemas operativos notables antes del Sistema III?
Pacerier
@Pacerier: UNIX Versiones 1 a 7, UNIX / 32V, 1BSD a 4BSD sin incluir los lanzamientos de puntos de 4BSD (4.1BSD era más o menos contemporáneo con AT&T Unix System III) y PWB Unix. Fuente . ¿Por qué preguntas y qué tiene que ver con esta pregunta?
Warren Young
@Warren, bueno, podrían haber afectado de alguna manera el defacto "sistema de nombres de directorio"
Pacerier
@Pacerier: mantendré mi reclamo: no había un "estándar" antes del Sistema V, solo convenciones y prácticas locales.
Warren Young
9

Recomendaría consultar Wikipedia para preguntas relacionadas con la estructura en general, cubrirá los conceptos básicos.

Sin embargo, para responder su pregunta directamente:

  • / usr es, en términos generales, bibliotecas y ejecutables del sistema no críticos
  • / usr / local es, de nuevo en términos generales, para bibliotecas y ejecutables que no son del sistema

Es por eso que tiendes a encontrar una estructura similar entre los dos; / usr / {, local /} {bin, sbin, lib}. Al ser nuevo en el shell, ese bit con los {} es una expansión del shell. Intenta ejecutar

ls -ld /usr/{,local/}{bin,sbin,lib}

desde su shell local para ver cómo funciona.

Tok
fuente
9

/usr/local/bin muestra las raíces de UNIX-esque del último Mac OS (su BSD basado allí).

  • "usr" significa Recursos del sistema UNIX. Esta es la ubicación donde se almacenan los programas y bibliotecas del sistema.
  • "local" representa los recursos que no se enviaron con la distribución estándar y, por lo general, se compilaron y mantuvieron por sitio.
  • "bin" representa ejecutables compilados binarios.

Esto se ha transformado desde las primeras implementaciones de UNIX para Linux y BSD, pero la convención se ha mantenido. Ahora, /usr/binsería para programas y bibliotecas "principales" o centrales, donde /usr/local/binsería para programas y bibliotecas complementarias y no críticas.

nzwulfin
fuente
12
He estado usando Unix desde poco después de la caída del Muro de Berlín, y nunca había escuchado la expansión "Recursos del sistema Unix" para "usr" hasta hoy; Es un backronym. "usr" recibió su nombre porque es donde se ubicaron originalmente los directorios principales de los usuarios. Es decir, si tenía un inicio de sesión en un cuadro antiguo del Sistema III, su directorio de trabajo inicial sería /usr/nzwulfinpor defecto. Otro esquema común. antes de que el /homeesquema SVR4 se hiciera cargo, era /u. Un sistema que utilicé al principio tenía tantos usuarios que necesitaban múltiples discos físicos para el almacenamiento de archivos de usuarios, por lo que tenían cosas como /u/d5/tangent.
Warren Young
3
@Warren Yo tampoco lo había escuchado y estuve hurgando en Google por un tiempo; parece que hay bastantes backronyms
Michael Mrozek
4

/usr/local/bin es la ubicación predeterminada más popular para archivos ejecutables, especialmente los de código abierto.

Sin embargo, podría decirse que esta es una mala elección ya que, en los sistemas Unix, /usrse ha estandarizado a principios de los noventa para contener una jerarquía de archivos que pertenecen al sistema operativo y, por lo tanto, pueden ser compartidos por múltiples sistemas que utilizan ese sistema operativo.

Como estos archivos son estáticos, el /usrsistema de archivos se puede montar de solo lectura. /usr/localestá derrotando este estándar, ya que es por diseño local, por lo tanto no compartido, por lo que debe ser de lectura y escritura para permitir la compilación local y no es parte del sistema operativo. Lástima que algo así /opt/localno haya sido elegido ...

jlliagre
fuente
1

Le recomiendo que utilice /usr/localpara programas comerciales que pueda instalar, como Mathematica. Colóquelo en su propia partición cuando configure. Cuando actualice su sistema operativo, esta partición no se verá afectada y no tendrá que volver a instalar su contenido. Así que úsalo para cosas que quieras mantener entre las actualizaciones del sistema operativo.

Por separado, asegúrese de dar /homesu propia partición por este motivo también.

ncmathsadist
fuente
0

Esta respuesta también puede ser útil.

/ usr / local

La idea original detrás /usr/localera tener un directorio separado ('local') '/ usr' en cada máquina además /usr, que podría montarse solo lectura desde otro lugar. Copia la estructura de /usr.

En estos días, /usr/locales ampliamente considerado como un buen lugar para mantener programas autocompilados o de terceros. La /usr/localjerarquía es para uso del administrador del sistema al instalar software localmente. Es necesario evitar que se sobrescriba cuando se actualiza el software del sistema.

Se puede usar para programas y datos que se comparten entre un grupo de hosts, pero que no se encuentran en /usr. El software instalado localmente debe colocarse en /usr/locallugar de a /usrmenos que se esté instalando para reemplazar o actualizar el software /usr.

Vishwanath gowda k
fuente