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?

utilisateur640378
la source

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.

George M
la source
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.

MattSturgeon
la source
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