De acuerdo con el estándar de jerarquía del sistema de archivos, /opt
es para “la instalación de paquetes de software de aplicaciones complementarias”. /usr/local
es "para uso del administrador del sistema al instalar el software localmente". Estos casos de uso parecen bastante similares. El software que no se incluye con las distribuciones generalmente está configurado de forma predeterminada para instalarse en /usr/local
o /opt
sin rima o razón particular en cuanto a lo que eligieron.
¿Hay alguna diferencia que me falta, o ambos hacen lo mismo, pero existen por razones históricas?
Respuesta aceptada:
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, normalmente mediante el make
comando (por ejemplo, ./configure; make; make install
). La idea es evitar conflictos con 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 /usr/local/bin/foo
es una alternativa local).
Todos los archivos bajo /usr
se pueden compartir entre instancias de SO, aunque esto rara vez se hace con Linux. Esta es una parte donde el FHS es ligeramente contradictorio, como /usr
está definido para ser de solo lectura, pero /usr/local/bin
debe ser de lectura y escritura para que la instalación local del software tenga éxito. El estándar del sistema de archivos SVR4, que fue la principal fuente de inspiración de FHS, recomienda evitar /usr/local
y usa /opt/local
en cambio, para superar este problema.
/usr/local
es un legado del BSD original. En ese momento, el código fuente de /usr/bin
Los comandos del SO estaban 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 embalaje (fuera de tarballs).
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 de terceros independiente. A diferencia de /usr/local
cosas, estos paquetes siguen las convenciones de directorio (o al menos deberían). Por ejemplo, someapp
se instalaría en /opt/someapp
, siendo uno de sus comandos /opt/someapp/bin/foo
, su archivo de configuración estaría en /etc/opt/someapp/foo.conf
y sus archivos de registro en /var/opt/someapp/logs/foo.access
.