¿Cuál es la razón para el directorio `/ usr`?

107

¿Cuál es la razón para los "recursos del sistema unix", o /usrdirectorio, como se describe aquí , que duplica muchos de los nombres de directorio en el directorio raíz /?

Mi propósito: estoy instalando Oracle JDK por enésima vez y decidí esta vez simplemente ponerlo debajo /home/usery solo estoy leyendo un poco para ver si es una mala idea en una máquina de un solo usuario.

H2ONaCl
fuente
1
Su directorio de inicio es un lugar perfecto para instalar software de terceros como no root.
Lekensteyn
10
... la triste comprensión porque pensaste que /usrsignificaba un directorio oculto de "usuarios" durante tantos años ...
Govind Rai
8
En serio pensé que era "usuario" todo este tiempo. Como binarios de usuario
Tanner Babcock
@TannerBabcock, creo que sí. Al menos creo que / usr / bin está destinado a estar donde se instalan binarios de todo el sistema que no se consideran esenciales para el sistema.
David A. French hace

Respuestas:

169

Están la versión corta y la versión larga de su respuesta ...

Version corta:

A medida que su enlace ya se ha dicho, /usres un lugar para todo el sistema , de sólo lectura de archivos. Entonces todo su software instalado va allí. No duplica ningún nombre de /excepto /biny /lib, pero, originalmente, con un propósito diferente: /bin, /libes solo para los archivos binarios y bibliotecas necesarios para el arranque , mientras que /usr/bin, /usr/libes para todos los demás archivos ejecutables y bibliotecas. (ahora sé un buen chico y no preguntes /sbin, esta es la versión corta después de todo)

Hoy en día, la distinción entre "requerido para arrancar" y no ha disminuido, ya que la mayoría de las distribuciones modernas, incluida Ubuntu, no pueden arrancar correctamente sin varios archivos de /usr. Y es por eso que hay un fuerte movimiento hacia la fusión /usr/biny /bin, probablemente en un futuro cercano (¿Ubuntu 12.10 quizás?) /binSerá un enlace simbólico /usr/bin.

Pero tal vez eres confuso /usry /usr/local? Porque sí, hay (y debería haber) muchos nombres de directorio duplicados. Más sobre eso más tarde ...

Versión larga:

En los años 70, en Unix (sí, Unix, mucho antes de Linux), los disquetes tenían poco espacio (sin HD, ¿recuerdas?), Y en un punto dado los binarios del sistema crecieron demasiado en número y tamaño hasta un punto que no tendrían cabe en un solo disco, y los desarrolladores tuvieron que dividirlos en varios medios y así crear nuevos puntos de montaje para ellos. /binsistema de archivos estaba lleno, así que instala los nuevos binarios en ... /usr/bin. Y /usrera, en ese momento, su ... directorio de usuarios !

Después de la división (casi vergonzosa y a menudo contada como una broma / tradición), comenzaron a crear justificaciones (y criterios) "artificiales" para decidir a qué iría /biny a qué iría /usr/bin. La regla informal era: las cosas "esenciales" van a /bin"el resto" van a /usr/bin. Lo mismo con /lib. No pasó mucho tiempo antes de que /usrse llenara de directorios relacionados con el sistema, mezclados con directorios de usuario. Así /homenació, para mantener todos los directorios relacionados con el usuario y mantenerse /usrlimpio solo para "cosas" del sistema.

Esto fue mucho antes de que existiera FHS. Cuando se creó, abrazó (y formalizó) la tradición actual y mantuvo el nombre /usr, aunque en ese momento ya no tenía nada que ver con "usuario". Así que sí, los nombres de fantasía " U NIX s ource r epository" o " U NIX s istema r ecursos" son todos los nombres inventados, y es demasiado tarde para cambiar el nombre de todos modos. (pero no demasiado tarde para fusionarse /bin)

"Ok, ¿qué pasa /usr/sbin?" , usted pregunta. Maldición, esperaba que lo hubieras olvidado. Ok ... /usr/sbines para comandos que solo pueden ser (o solo son significativos cuando) ejecutados por el rootusuario, como mounty fdisk.

"¿Pero no es eso casi lo mismo que /bin?" . Sí, claro, pero ...

"Espera, ¿entonces por qué hay una /sbin? ¡No tiene ningún sentido!" . Bueno, eso es por ... err ... humm ...

¡Mira, un mono de 3 cabezas detrás de ti!

Ok, espero que te hayas distraído lo suficiente. Hacia adelante...

(si crees que estoy haciendo trampa, sí, estás en lo correcto. Pero también lo son los comandos esenciales de "respuesta oficial" que solo pueden ejecutarse desde la raíz y deben estar disponibles incluso antes de montar /"). La verdad es que la línea es borrosa, y hay muchos nombres heredados que simplemente se "atascaron" y ahora es bastante difícil deshacerse de ellos.

Más sobre el caso de la /usrfusión , de systemddocumentos:

La justificación histórica para a / bin, / sbin y / lib separadas de / usr ya no se aplica hoy. Se dividieron para tener herramientas seleccionadas en un disco duro más rápido (que era pequeño, porque era más caro) y para contener todas las herramientas necesarias para montar la partición más lenta / usr. Hoy, una partición separada / usr ya debe ser montada por initramfs durante el arranque temprano, lo que justifica una discusión dividida. Además, muchas herramientas en / bin y / sbin en el status quo ya perdieron la capacidad de ejecutarse sin un / usr premontado. Ya no hay una razón válida para que el sistema operativo se distribuya en varias jerarquías, perdió su propósito.

Y una lectura asombrosa sobre la /usrdivisión y su justificación, por Rob Landley:

Comprender la división bin, sbin, usr / bin, usr / sbin

Hoy en día

Actualmente, con respecto a los directorios de instalación, su mejor manera de entender es pensar de esta manera:

  • /usr - todos los archivos de solo lectura de todo el sistema instalados (o proporcionados por) el sistema operativo

  • /usr/local- archivos de solo lectura de todo el sistema instalados por el administrador local (generalmente, usted). Y es por eso que la mayoría de los nombres de directorio /usrse duplican aquí.

  • /opt- una atrocidad destinada a todo el sistema, software de solo lectura y autónomo . Es decir, software que no divide sus archivos a través de bin, lib, share, includecomo el buen comportamiento del software debería.

  • ~/.local- la contraparte por usuario de /usr/local, es decir: software instalado por (y para) cada usuario

  • ~/.local/opt - la contraparte por usuario de /opt

Entonces, ¿dónde instalar el software?

La lista anterior ya es la mitad de la respuesta de su pregunta de Oracle JDK, al menos da varias pistas. La lista de verificación para "¿Dónde debo instalar el software X?" va por:

  • ¿Es un software de directorio único completamente autónomo, como Eclipse IDE y otras aplicaciones Java descargadas, y desea que esté disponible para todos los usuarios? Luego instalar en/opt

  • Igual que el anterior, pero no le importan otros usuarios y quiero instalarlo solo para su usuario. Luego instalar en~/.local/opt

  • Sus archivos se dividen en múltiples directorios, como biny share, como el software tradicional compilado e instalado ./configure && make && sudo make install, y deberían estar disponibles para todos los usuarios. Luego instalar en/usr/local

  • ¿Igual que el anterior, pero solo para su usuario? Luego instalar en~/.local

  • Software instalado por el sistema operativo, o mediante administradores de paquetes (como Software Center) y, lo más importante, ¿ qué modificación local podría sobrescribirse cuando el administrador de actualizaciones lo actualice a una nueva versión ? Va a/usr

Notas:

  • Esto explica por qué es el prefijo de instalación predeterminado para el software compilado /usr/local, y por qué debe cambiarlo ./configure --prefix=$HOME/.localal instalar software solo para su propio usuario

  • Es posible que haya notado que todos los directorios anteriores son de solo lectura (excepto, por supuesto, cuando instala / elimina software). Los archivos de escritura (como los archivos de configuración) suelen ir a /etc(para el software de todo el sistema) y ~/.config(para la configuración por usuario). Aunque muchos de los programas heredados (y, desafortunadamente, algunos también modernos) usan ~/.<software-name>, abarrotando su carpeta de inicio con miles de millones de directorios y archivos.

  • ~/.localy ~/.configno son parte de la especificación FHS. FHS no se ocupa de la carpeta de inicio del usuario. Son un intento de XDG, otra organización estándar orientada a entornos de escritorio (como Gnome, KDE y Unity), para tratar de establecer algunas convenciones con respecto a una estructura del hogar del usuario. No todo el software se adhiere a él (por ejemplo, ~/.local/binno está en el valor predeterminado del usuario $PATH, mientras que por lógica debería hacerlo) , y ningún usuario está obligado a seguirlo, pero ambos obtienen muchos beneficios de interoperabilidad si lo hacen.

Espero que esto ayude a aclarar un poco las cosas. ¡No dudes en preguntar cualquier cosa para que pueda mejorar la respuesta!

(y también espero que los puristas no me maten por un lenguaje y una explicación tan extremadamente informales. Fue intencional y seguramente tiene muchas imprecisiones, pero creo que es una buena forma de hacer que un recién llegado tenga una breve descripción general sobre la instalación fundamentos de directorios)

MestreLion
fuente
1
Lo resumiste de manera muy concisa y sí, es cierto: ¡la respuesta completa es una historia mucho más larga que la anterior!
papashou
Por qué no? Se aplica la misma lógica: un atacante puede crear un ejecutable bajo el inicio o un subdirectorio del mismo, llamado así por un comando del sistema.
ignis
3
@ignis: si un atacante tiene acceso para crear y modificar archivos en el hogar de un usuario, ese usuario ya está completamente comprometido y $PATHes irrelevante. El atacante incluso puede cambiar eso a través ~/.profile, por lo que su punto es discutible. ~/.local/bines tan seguro (o inseguro, si lo desea) como ~/bin, lo cual es una práctica común en la mayoría de las distribuciones. La idea de que un usuario no debería tener ningún directorio para guardar y ejecutar scripts personales $PATHes absurda.
MestreLion 01 de
Por lo tanto, ~/bines tan seguro como ~/.profiley $PATHno me protege del malware ejecutado por mí (que tiene el permiso para escribir en mi propia casa). No conocía este archivo, lo siento. Gracias por la aclaración, perdón por mi comentario anterior.
ignis
Cuanto más larga sea la historia, más mejoras / desorden habrá.
smwikipedia