Selon la norme de hiérarchie du système de fichiers , il /opt
s'agit de "l'installation de progiciels d'application complémentaires". /usr/local
est "à utiliser par l'administrateur système lors de l'installation du logiciel localement". Ces cas d'utilisation semblent assez similaires. Les logiciels qui ne sont pas inclus dans les distributions sont généralement configurés par défaut pour être installés dans l'un /usr/local
ou l' autre, /opt
sans rime particulière ni raison pour laquelle ils ont choisi.
Y a-t-il une différence qui me manque ou les deux font-ils la même chose, mais existent-ils pour des raisons historiques?
directory-structure
fhs
Les patchs
la source
la source
/usr/local
s'agit d'une version locale du/usr
système de fichiers, alors qu'elle/opt
est réservée à divers éléments.Réponses:
Bien que les deux sont conçus pour contenir des fichiers ne faisant pas partie du système d'exploitation,
/opt
et/usr/local
ne sont pas destinés à contenir le même ensemble de fichiers./usr/local
est un emplacement pour installer les fichiers créés par l'administrateur, généralement à l'aide de lamake
commande (par exemple,./configure; make; make install
). L'idée est d'éviter les conflits avec des fichiers faisant partie du système d'exploitation, qui pourraient être écrasés ou écrasés par des fichiers locaux sinon (par exemple,/usr/bin/foo
fait partie du système d'exploitation tout en/usr/local/bin/foo
constituant une alternative locale).Tous les fichiers sous
/usr
peuvent être partagés entre les instances de système d'exploitation, bien que cela soit rarement fait avec Linux. Ceci est une partie où la FHS est légèrement contradictoire, comme/usr
défini en lecture seule, mais/usr/local/bin
doit être en lecture-écriture pour que l'installation locale du logiciel réussisse. Le standard de système de fichiers SVR4, qui était la principale source d’inspiration de FHS, recommande d’éviter/usr/local
et d’utiliser/opt/local
plutôt pour surmonter ce problème./usr/local
est un héritage de la BSD d'origine. À ce moment-là, le code source des/usr/bin
commandes du système d' exploitation se trouvait dans/usr/src/bin
et/usr/src/usr.bin
, tandis que la source des commandes développées localement se trouvait dans/usr/local/src
et leurs fichiers binaires dans/usr/local/bin
. Il n'y avait aucune notion d'emballage (en dehors des archives).D'autre part,
/opt
est un répertoire pour l'installation de packages non groupés (c'est-à-dire que les packages ne font pas partie de la distribution du système d'exploitation, mais fournis par une source indépendante), chacun dans son propre sous-répertoire. Ils constituent déjà des packages complets fournis par un distributeur de logiciels tiers indépendant. Contrairement aux/usr/local
choses, ces paquets respectent les conventions de répertoires (ou du moins ils le devraient). Par exemple,someapp
serait installé dans/opt/someapp
, avec l'une de ses commandes/opt/someapp/bin/foo
, son fichier de configuration/etc/opt/someapp/foo.conf
, ainsi que ses fichiers journaux/var/opt/someapp/logs/foo.access
.la source
La différence fondamentale réside dans le
/usr/local
fait que les logiciels ne sont pas gérés par le gestionnaire de programmes, mais respectent néanmoins les règles de déploiement Unix standard.C'est pourquoi vous avez
/usr/local/bin
,/usr/local/sbin
/usr/local/include
etc .../opt
d'autre part, c'est un logiciel qui ne suit pas cela et qui est déployé de manière monolithique. Cela inclut généralement des logiciels commerciaux et / ou multiplates-formes présentés dans le style "Windows".la source
Ils sont très similaires et l’utilisation de l’un ou de l’autre est plus une question d’opinion. Le journal Linux a eu cette discussion point / contrepoint sur ce sujet précis ici .
la source
Pour moi, personnellement, c'est ce que Bill a dit dans le lien de @ philfr:
Malheureusement, la plupart des
make install
scripts insèrent des fichiers au/usr/local
lieu de simplement créer un lien symbolique: - /la source
make install
cible poussant des fichiers dans/usr/local
; cette fonctionnalité est facilement modifiable en passant un--prefix=
paramètre de ligne de commande au./configure
script ou s'il n'y a pas de./configure
script, vous pouvez passer un paramètre à lamake
cible comme ceci:make --prefix=/usr install
./opt/foo-1.1
et/opt/foo-1.2
. Lorsque je mets à niveau, lefoo
lien symbolique dans/usr/local/bin
pointer vers foo-1.2. Si, pour une raison quelconque, je dois revenir en arrière, je remplace simplement le lien symbolique par un lien qui pointe vers foo-1.1. Si 1.2 est correct après plusieurs semaines, un rapiderm -rf /opt/foo-1.1
enlève l'ancienne version rapidement et proprement.Premièrement, je ne pense pas qu'il y ait une réponse stricte; différents administrateurs auront des opinions différentes, en fonction de leurs antécédents. Historiquement,
/usr/local
est venu en premier; c'était la convention à Berkley, IIRC. À un moment donné au cours du développement de System V, si je ne me trompe pas (tout cela remonte à longtemps et je n'ai pas pris de notes), il y a eu une décision ou un désir de pouvoir monter en/usr
lecture seule, ce qui signifiait que vous ne pouviez pas ajouter de nouveau logiciel; c'est peut-être pour cette raison qu'il a/opt
été inventé. En l'occurrence, il y avait tellement de logiciels existants qui écrivaient/usr
que cette idée n'avait jamais vraiment pris forme.Ma préférence personnelle est
/opt
, avec un sous-répertoire distinct pour chaque produit; cela facilite la suppression d'un produitrm -fr
. Mais si tout votre logiciel est installé via un bon gestionnaire de paquets, peu importe, et si le logiciel que vous installez ne respecte pas strictement ces conventions, et écrit des configurations, etc./usr
, cela n'a pas d'importance, bien que pour les raisons opposées.la source
J'ai un point de vue légèrement différent sur cette question.
Bien que la réponse de jlliagre soit correcte, l’application pratique pour moi, lors du déploiement de logiciels dans un cluster, se résume aux variables d’environnement par défaut et à la réutilisation par défaut des bibliothèques.
En termes simples -
/usr/local
et tous ses répertoires enfants se trouvent dans les variables env appropriées, telles quePATH
etMANPATH
, et se/usr/local/lib{,64}
trouvent dans ldconfig's (/etc/ld.so.conf.d/
)./opt/
OTOH n’est pas - ce qui est avantageux à la fois lorsque plusieurs versions ou des packages en conflit sont nécessaires pour coexister dans le système, mais nécessite une sorte de gestion de l’environnement (par exemple, des modules d’environnement ou des collections de logiciels ), et désavantageux dans le sens où cela risquerait de "gaspiller "espace de stockage en dupliquant les bibliothèques partagées, chaque installation/opt
pouvant être complètement autonome.Pour que la nature partagée
/usr/local
fonctionne/usr/local/bin
correctement , on suppose par exemple que les fichiers binaires sont installés directement sur (et les pages de manuel sur appropriées/usr/local/share/man/...
) plutôt que sur/usr/local/app/{bin,share/man,...}
etc.la source