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
?
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 localLorsque 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.
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
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.