Où placer un exécutable local?


63

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

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

Je ne pouvais pas trouver une telle convention mentionnée dans l'article de Wikipedia pour la FHS .

De plus, s’il existe une convention, devrais-je inclure explicitement le chemin du $HOME/binrépertoire ou l’emplacement du binrépertoire?

Réponses:


65

En général, si un fichier binaire non installé et géré par le système doit être accessible à plusieurs utilisateurs à l'échelle du système, il doit être placé par un administrateur /usr/local/bin. Il existe une hiérarchie complète sous /usr/localqui est généralement utilisé pour les packages logiciels compilés et installés localement.

Si vous êtes le seul utilisateur d'un binaire, l'installation dans $HOME/binest l'emplacement approprié, car vous pouvez l'installer vous-même et vous serez le seul consommateur. Si vous compilez un package logiciel à partir des sources, il est également approprié de créer une hiérarchie locale partielle ou complète dans votre $HOMEré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 fichiers binaires locaux
  • $HOME/games Binaires 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 en ligne locaux
  • $HOME/sbin Binaires du système local
  • $HOME/share Hiérarchie locale indépendante de l'architecture
  • $HOME/src Code source local

Lors de l'exécution configure, vous devez définir votre hiérarchie locale pour l'installation en spécifiant $HOMEcomme préfixe pour les valeurs d'installation par défaut.

./configure --prefix=$HOME

À présent, une fois make && make installexécutés, les fichiers binaires, les packages, les pages de manuel et les bibliothèques compilés seront installés dans votre $HOMEhiérarchie locale. Si vous n'avez pas créé manuellement une $HOMEhiérarchie locale, make installcréera les répertoires nécessaires au progiciel.

Une fois installé dans $HOME/bin, vous pouvez soit ajouter $HOME/binà votre $PATHou appeler le binaire en utilisant l'absolu $PATH. Certaines distributions incluront $HOME/bindans votre $PATHpar défaut. Vous pouvez tester cela en echo $PATHvérifiant s’il $HOME/biny en a un ou mettre le binaire dans $HOME/binet l’exécutant which binaryname. S'il revient avec $HOME/bin/binaryname, alors il est dans votre $ PATH par défaut.


5
tant que $ HOME n'est pas sur un système de fichiers monté noexec. / tmp / est généralement monté avec noexec également.
ewanm89

3
Ceci est correct, cela fait partie de la norme FHS (Filesystem Hierarchy Standard). pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHIERARCHY
Patrick

29
Je ne recommanderais pas d'utiliser $HOME. Cela inonde votre répertoire personnel de nombreux répertoires qui ne vous intéressent pas du tout. Qui veut avoir man, libetc. dans sa maison? Je préférerais créer la hiérarchie ci $HOME/bin- dessous ou $HOME/local. Cela ajoute un seul sous-répertoire à votre répertoire personnel, au lieu de dix. Le PATHpeut facilement être adapté pour inclure $HOME/bin/binou $HOME/local/bin.
Marco

18
Une option consiste à utiliser $ HOME / .local / {bin, lib, etc.}, utilisé par exemple par la spécification basée sur XDG ( standards.freedesktop.org/basedir-spec/basedir-spec-latest.html ) et python ( python.org/dev/peps/pep-0370 )
janneb

4
@janneb La spécification du répertoire de base XDG à laquelle vous vous référez ne mentionne que $HOME/.local/share(version 0.7, 24 novembre 2010).
Piotr Dobrogost

28

Comme mentionné précédemment , /usr/localest conçu comme un préfixe pour, essentiellement, les logiciels installés par l'administrateur système, alors qu'il /usrdevrait être utilisé pour les logiciels installés à partir des packages de la distribution.

L'idée sous - jacente est d'éviter les conflits avec les logiciels distribués (tels que rpmet les debpaquets) et de donner à l'administrateur complet règne sur le préfixe « local ».

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

De la FHS

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

Lors de l’installation de logiciels spécifiques à l’utilisateur, uther suggère de l’ utiliser $HOMEcomme préfixe, car cela vous garantit des autorisations d’écriture. Personnellement, j’ai le sentiment d’utiliser $HOME/.localune solution plus élégante, car elle évite d’encombrer votre (et j'espère) votre répertoire personnel agréable et bien rangé!

$HOME/.local/shareest déjà utilisé dans la freedesktop.org spécification XDG Répertoire de base , donc il ne faut pas beaucoup pour envisager d' ajouter un $HOME/.local/binà votre $PATHet 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 créer un lien symbolique vers celui-ci, par exemple:

ln -s .local ~/local

Sidenote

Il est à noter que .config(not .local/etc) est la valeur par défaut $XDG_CONFIG_HOMEutilisée pour les fichiers de configuration spécifiques à l'utilisateur. Je devrais également souligner que, malheureusement, une grande partie du logiciel 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_HOMEpeut être désactivé si la valeur par défaut $HOME/.configest souhaitée.

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


1
Je ne trouve aucune mention de .localdans la FHS
Daniel Serodio

@DanielSerodio C'est dans la spécification du répertoire XDG, un nouveau standard qu'il prend de l'importance. Voir unix.stackexchange.com/questions/316765/… et superuser.com/questions/1170793/…
ivan_pozdeev

Cette note de côté /etcest vraiment énervante quand on gère un serveur avec plusieurs administrateurs - il est assez difficile de garder trace des modifications personnalisées apportées aux fichiers de configuration.
naught101
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.