¿Cuál es la razón para los "recursos del sistema unix", o /usr
directorio, 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/user
y solo estoy leyendo un poco para ver si es una mala idea en una máquina de un solo usuario.
filesystem
history-of-ubuntu
H2ONaCl
fuente
fuente
/usr
significaba un directorio oculto de "usuarios" durante tantos años ...Respuestas:
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,
/usr
es 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/bin
y/lib
, pero, originalmente, con un propósito diferente:/bin, /lib
es solo para los archivos binarios y bibliotecas necesarios para el arranque , mientras que/usr/bin, /usr/lib
es 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/bin
y/bin
, probablemente en un futuro cercano (¿Ubuntu 12.10 quizás?)/bin
Será un enlace simbólico/usr/bin
.Pero tal vez eres confuso
/usr
y/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.
/bin
sistema de archivos estaba lleno, así que instala los nuevos binarios en .../usr/bin
. Y/usr
era, 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
/bin
y 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/usr
se llenara de directorios relacionados con el sistema, mezclados con directorios de usuario. Así/home
nació, para mantener todos los directorios relacionados con el usuario y mantenerse/usr
limpio 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/sbin
es para comandos que solo pueden ser (o solo son significativos cuando) ejecutados por elroot
usuario, comomount
yfdisk
."¿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
/usr
fusión , desystemd
documentos:Y una lectura asombrosa sobre la
/usr
divisió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/usr
se 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 debin
,lib
,share
,include
como 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
bin
yshare
, 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/.local
al instalar software solo para su propio usuarioEs 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.~/.local
y~/.config
no 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/bin
no 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)
fuente
$PATH
es irrelevante. El atacante incluso puede cambiar eso a través~/.profile
, por lo que su punto es discutible.~/.local/bin
es 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$PATH
es absurda.~/bin
es tan seguro como~/.profile
y$PATH
no 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.