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 el make
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
.
/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.