web-dev-qa-db-fra.com

Où placer un exécutable local?

J'ai un exécutable pour le client de contrôle de version perforce (p4). Je ne peux pas le placer dans /opt/local parce que je n'ai pas de privilèges root. Existe-t-il un emplacement standard où il doit être placé sous $HOME?

La hiérarchie du système de fichiers a-t-elle une convention qui dit que les exécutables/binaires locaux doivent être placés dans $HOME/bin?

Je n'ai pas pu trouver une telle convention mentionnée sur le article Wikipedia pour le FHS .

De plus, s'il y a effectivement une convention, devrais-je inclure explicitement le chemin vers le $HOME/bin ou quel que soit l'emplacement du répertoire bin?

72
user640378

En général, si un binaire non installé et maintenu hors système doit être accessible à l'ensemble du système à plusieurs utilisateurs, il doit être placé par un administrateur dans /usr/local/bin. Il existe une hiérarchie complète sous /usr/local qui est généralement utilisé pour les progiciels compilés et installés localement.

Si vous êtes le seul utilisateur d'un binaire, l'installation dans $HOME/bin est l'emplacement approprié car vous pouvez l'installer vous-même et vous serez le seul consommateur. Si vous compilez un progiciel à partir de la source, il est également approprié de créer une hiérarchie locale partielle ou complète dans votre $HOME répertoire. La hiérarchie locale complète ressemblerait à ceci.

  • $HOME/bin Binaires locaux
  • $HOME/etc Configuration système spécifique à l'hôte pour les binaires locaux
  • $HOME/games Binaires de jeu locaux
  • $HOME/include Fichiers d'en-tête C locaux
  • $HOME/lib Bibliothèques locales
  • $HOME/lib64 Bibliothèques locales 64 bits
  • $HOME/man Manuels locaux en ligne
  • $HOME/sbin Binaires système locaux
  • $HOME/share Hiérarchie indépendante de l'architecture locale
  • $HOME/src Code source local

Lorsque vous exécutez configure, vous devez définir votre hiérarchie locale pour l'installation en spécifiant $HOME comme préfixe pour les paramètres d'installation par défaut.

./configure --prefix=$HOME

Maintenant, quand make && make install sont exécutés, les fichiers binaires compilés, les packages, les pages de manuel et les bibliothèques seront installés dans votre $HOME hiérarchie locale. Si vous n'avez pas créé manuellement un $HOME hiérarchie locale, make install créera les répertoires nécessaires au progiciel.

Une fois installé dans $HOME/bin, vous pouvez soit ajouter $HOME/bin à ton $PATH ou appelez le binaire en utilisant l'absolu $PATH. Certaines distributions incluront $HOME/bin Dans votre $PATH par défaut. Vous pouvez tester cela soit par echo $PATH et voir si $HOME/bin est là, ou mettez le binaire dans $HOME/bin et exécution which binaryname. S'il revient avec $HOME/bin/binaryname, alors il est dans votre $ PATH par défaut.

75
George M

Comme mentionné plus haut , /usr/local est conçu comme un préfixe pour, essentiellement, les logiciels installés par l'administrateur système, tandis que /usr doit être utilisé pour les logiciels installés à partir des packages de la distribution.

L'idée derrière cela est d'éviter les conflits avec les logiciels distribués (tels que les packages rpm et deb) et de donner à l'administrateur le règne complet sur le préfixe "local".

Cela signifie qu'un administrateur peut installer un logiciel compilé personnalisé tout en utilisant une distribution comme Debian.

Du FHS

Les logiciels placés dans/ou/usr peuvent être remplacés par des mises à niveau du système (bien que nous recommandons que les distributions n'écrasent pas les données dans/etc dans ces circonstances). Pour cette raison, les logiciels locaux ne doivent pas être placés en dehors de/usr/local sans raison valable.

Lors de l'installation d'un logiciel spécifique à l'utilisateur, suggère le plus en utilisant $HOME comme préfixe car cela garantit que vous disposez des autorisations d'écriture. Personnellement, je pense utiliser $HOME/.local pour être une solution plus élégante, car elle évite d'encombrer votre répertoire personnel (espérons-le) agréable et bien rangé!

$HOME/.local/share est déjà utilisé dans la spécification du répertoire de base freedesktop.org XDG , donc il ne faut pas grand-chose pour envisager d'ajouter un $HOME/.local/bin à ton $PATH et faire un $HOME/.local/lib, etc., pendant que vous y êtes.

Si vous ne voulez pas vraiment que votre préfixe soit un répertoire caché, vous pouvez également facilement créer un lien symbolique vers celui-ci, par exemple:

ln -s .local ~/local

Sidenote

Il est à noter que .config (ne pas .local/etc) est la valeur par défaut pour $XDG_CONFIG_HOME utilisé pour les fichiers de configuration spécifiques à l'utilisateur. Je dois également souligner que, malheureusement, une grande partie des logiciels ignore le XDG et crée des fichiers de configuration où bon leur semble (généralement à la racine de $HOME). Notez également que $XDG_CONFIG_HOME peut ne pas être défini si la valeur par défaut $HOME/.config est désiré.

Curieusement, aucun répertoire n'est réservé aux fichiers de configuration par défaut d'une distribution, il n'y a donc aucun moyen de savoir si un fichier dans /etc a été fourni par la distribution ou édité par l'administrateur système.

30
MattSturgeon