Selon la norme de hiérarchie du système de fichiers, /opt
est pour "l'installation de progiciels d'application complémentaires". /usr/local
est "à utiliser par l'administrateur système lors de l'installation locale du logiciel". Ces cas d'utilisation semblent assez similaires. Les logiciels non inclus avec les distributions sont généralement configurés par défaut pour être installés dans /usr/local
ou /opt
sans rime ni raison particulière quant à ce qu'ils ont choisi.
Y a-t-il une différence qui me manque, ou est-ce que les deux font la même chose, mais existent pour des raisons historiques ?
Réponse acceptée :
Alors que les deux sont conçus pour contenir des fichiers n'appartenant pas au système d'exploitation, /opt
et /usr/local
ne sont pas destinés à contenir le même ensemble de fichiers.
/usr/local
est un endroit pour installer des fichiers construits par l'administrateur, généralement en utilisant le make
commande (par exemple, ./configure; make; make install
). L'idée est d'éviter les conflits avec les fichiers qui font partie du système d'exploitation, qui seraient soit écrasés, soit écraseraient les fichiers locaux autrement (par exemple, /usr/bin/foo
fait partie du système d'exploitation tandis que /usr/local/bin/foo
est une alternative locale).
Tous les fichiers sous /usr
sont partageables entre les instances du système d'exploitation, bien que cela soit rarement fait avec Linux. C'est une partie où le FHS est légèrement contradictoire, comme /usr
est défini pour être en lecture seule, mais /usr/local/bin
doit être en lecture-écriture pour que l'installation locale du logiciel réussisse. La norme de système de fichiers SVR4, qui était la principale source d'inspiration du FHS, recommande d'éviter /usr/local
et utilisez /opt/local
à la place pour surmonter ce problème.
/usr/local
est un héritage du BSD original. A cette époque, le code source de /usr/bin
Les commandes du système d'exploitation étaient dans /usr/src/bin
et /usr/src/usr.bin
, tandis que la source des commandes développées localement était dans /usr/local/src
, et leurs binaires dans /usr/local/bin
. Il n'y avait pas de notion de packaging (hors tarballs).
En revanche, /opt
est un répertoire pour installer des packages dégroupés (c'est-à-dire des packages ne faisant pas partie de la distribution du système d'exploitation, mais fournis par une source indépendante), chacun dans son propre sous-répertoire. Ce sont des packages complets déjà construits fournis par un distributeur de logiciels tiers indépendant. Contrairement à /usr/local
trucs, ces packages suivent les conventions de répertoire (ou du moins ils le devraient). Par exemple, someapp
serait installé dans /opt/someapp
, l'une de ses commandes étant /opt/someapp/bin/foo
, son fichier de configuration serait dans /etc/opt/someapp/foo.conf
, et ses fichiers journaux dans /var/opt/someapp/logs/foo.access
.