De acuerdo con el Estándar de jerarquía del sistema de archivos , /opt
es para "la instalación de paquetes de software de aplicación complementarios". /usr/local
es "para uso del administrador del sistema al instalar software localmente". Estos casos de uso parecen bastante similares. El software que no se incluye con las distribuciones generalmente está configurado de manera predeterminada para instalarse en cualquiera /usr/local
o /opt
sin una rima o razón en particular que elijan.
¿Hay alguna diferencia que me falta, o ambos hacen lo mismo, pero existen por razones históricas?
directory-structure
fhs
Parches
fuente
fuente
/usr/local
es una versión local del/usr
sistema de archivos, mientras que/opt
es un marcador de posición para cosas misceláneas.Respuestas:
Si bien ambos están diseñados para contener archivos que no pertenecen al sistema operativo,
/opt
y/usr/local
no están destinados a contener el mismo conjunto de archivos./usr/local
es un lugar para instalar archivos creados por el administrador, generalmente mediante elmake
comando (por ejemplo,./configure; make; make install
). La idea es evitar conflictos con los archivos que forman parte del sistema operativo, que de lo contrario se sobrescribirían o sobrescribirían los locales (por ejemplo,/usr/bin/foo
es parte del sistema operativo mientras que/usr/local/bin/foo
es una alternativa local).Todos los archivos debajo se
/usr
pueden compartir entre instancias del sistema operativo, aunque esto rara vez se hace con Linux. Esta es una parte en la que el FHS es ligeramente contradictorio, ya que/usr
se define como de solo lectura, pero/usr/local/bin
debe ser de lectura y escritura para que la instalación local de software tenga éxito. El estándar del sistema de archivos SVR4, que fue la principal fuente de inspiración del FHS, recomienda evitar/usr/local
y usar/opt/local
para superar este problema./usr/local
es un legado del BSD original. En ese momento, el código fuente de los/usr/bin
comandos del sistema operativo estaba en/usr/src/bin
y/usr/src/usr.bin
, mientras que la fuente de los comandos desarrollados localmente estaba en/usr/local/src
, y sus binarios en/usr/local/bin
. No había noción de empaque (fuera de las bolas de alquitrán).Por otro lado,
/opt
es un directorio para instalar paquetes desagregados (es decir, paquetes que no forman parte de la distribución del sistema operativo, sino que son proporcionados por una fuente independiente), cada uno en su propio subdirectorio. Ya están construidos paquetes completos proporcionados por un distribuidor de software independiente de terceros. A diferencia de las/usr/local
cosas, estos paquetes siguen las convenciones de directorio (o al menos deberían). Por ejemplo,someapp
se instalaría/opt/someapp
, con uno de sus comandos/opt/someapp/bin/foo
, su archivo de configuración/etc/opt/someapp/foo.conf
y sus archivos de registro/var/opt/someapp/logs/foo.access
.fuente
La diferencia básica es que
/usr/local
es para el software no administrado por el empaquetador del sistema, pero que sigue las reglas de implementación estándar de Unix.Es por eso que tienes
/usr/local/bin
,/usr/local/sbin
/usr/local/include
etc./opt
por otro lado es para software que no sigue esto y se implementa de manera monolítica. Esto generalmente incluye software comercial y / o multiplataforma que se empaqueta en el estilo "Windows".fuente
De hecho, son muy similares, y el uso de uno u otro es más una cuestión de opinión. La revista Linux tuvo esta discusión de punto / contrapunto sobre este tema exacto aquí .
fuente
Para mí, personalmente, es lo que dijo Bill en el enlace de @ philfr:
Desafortunadamente, la mayoría de los
make install
scripts empujan archivos en/usr/local
lugar de simplemente hacer un enlace simbólico allí: - /fuente
make install
objetivo al insertar archivos/usr/local
; esta funcionalidad es fácilmente cambiable pasando un--prefix=
parámetro de línea de comando para la./configure
escritura, o si no hay una./configure
secuencia de comandos, puede pasar un parámetro a lamake
meta de este modo:make --prefix=/usr install
./opt/foo-1.1
y/opt/foo-1.2
. Cuando actualizo,foo
enlace simbólico en/usr/local/bin
puntos a foo-1.2. Si por alguna razón necesito revertir, simplemente reemplazo el enlace simbólico con uno que apunte a foo-1.1. Si 1.2 está bien después de varias semanas, un rápidorm -rf /opt/foo-1.1
elimina la versión anterior de forma rápida y limpia.Primero, no creo que haya una respuesta estricta; diferentes administradores tendrán diferentes opiniones, de acuerdo con sus antecedentes. Históricamente,
/usr/local
vino primero; fue la convención en Berkley, IIRC. En un momento durante el desarrollo del Sistema V, si no me equivoco (todo esto fue hace mucho tiempo y no tomé notas), hubo una decisión o un deseo de poder montar/usr
solo lectura, lo que significaba que no podías agregarle un nuevo software; eso pudo haber sido por qué/opt
fue inventado. De hecho, había tanto software existente que escribió/usr
que esa idea nunca despegó.Mi preferencia personal es
/opt
, con un subdirectorio separado para cada producto; Esto hace que eliminar un producto sea un caso simplerm -fr
. Pero si todo su software se instala a través de un buen administrador de paquetes, no importa, y si el software que instala no obedece estrictamente estas convenciones, y escribe configuraciones y/usr
demás en algún lugar debajo , tampoco importa, aunque por las razones opuestasfuente
Tengo una opinión ligeramente diferente sobre este tema.
Si bien todo en la respuesta de jlliagre es correcto, la aplicación práctica para mí, al implementar software en un clúster, se reduce a las variables de entorno predeterminadas y la reutilización predeterminada de libs.
En pocas palabras,
/usr/local
y todos sus directorios secundarios están en los entornos apropiados, comoPATH
yMANPATH
, y/usr/local/lib{,64}
están en ldconfig's (/etc/ld.so.conf.d/
)./opt/
OTOH no lo es, lo cual es ventajoso cuando se requieren múltiples versiones o paquetes conflictivos para coexistir en el sistema, pero requiere algún tipo de gestión del entorno (por ejemplo, módulos de entorno o colecciones de software ), y es desventajoso porque potencialmente "desperdiciaría" "espacio de almacenamiento duplicando bibliotecas compartidas, ya que cada instalación/opt
puede ser completamente autónoma.Por la naturaleza compartida de
/usr/local
trabajar, se supone que, por ejemplo, los binarios se instalan directamente en/usr/local/bin
(y las páginas de manual según corresponda/usr/local/share/man/...
) en lugar de/usr/local/app/{bin,share/man,...}
etc.fuente