web-dev-qa-db-fra.com

Répertoire standard Unix pour mettre des exécutables ou des scripts personnalisés?

Si j'ai un script ou des programmes Shell personnalisés, que j'ai créés moi-même ou téléchargés à partir du Web, et que je veux pouvoir l'exécuter à partir de la CLI, y a-t-il l'emplacement standard pour le mettre dans la structure de répertoires Linux/Unix?

/usr/bin ?
/usr/local/bin ?
/usr/lib ?
/usr/sbin ?
/bin ?
/sbin ?
/var ?

Je le mets généralement dans mon dossier ~/bin et le mets dans PATH, mais il ne semble pas propre. Et chaque fois que je télécharge un nouveau programme, je dois le mettre à nouveau dans le PATH.

70
atedja

/usr/local/bin existe précisément à cet effet, pour une installation à l'échelle du système. Pour votre usage privé, ~/bin est la norme de facto.

Si vous souhaitez conserver chaque binaire dans son propre sous-répertoire, vous pouvez le faire et ajouter un lien symbolique vers un répertoire déjà dans votre PATH. Ainsi, par exemple

curl -o $HOME/downloads/fnord http://fnord.example.com/script.exe
ln -s $HOME/downloads/fnord $HOME/bin/

à condition de $HOME/bin est dans votre PATH. (Il existe des outils comme stow qui font cela - et bien plus encore - dans les coulisses pour vous.)

78
tripleee

Cela peut varier légèrement en fonction de la saveur Unix. Je suppose que Linux ici (bien que cela puisse s'appliquer à OSX). Selon le Filesystem Hierarchy Standard (FHS) (lien obtenu auprès du Linux Standard Base working group ):

Le /usr/local la hiérarchie doit être utilisée par l'administrateur système lors de l'installation locale du logiciel. Il doit être protégé contre l'écrasement lors de la mise à jour du logiciel système. Il peut être utilisé pour des programmes et des données qui peuvent être partagés entre un groupe d'hôtes, mais qui ne se trouvent pas dans /usr.

Les logiciels installés localement doivent être placés dans /usr/local plutôt que /usr sauf s'il est installé pour remplacer ou mettre à niveau le logiciel dans /usr.

/usr/local/bin est souvent sur le chemin par défaut.

Notez que vous ne devez mettre l'exécutable ou un lien vers celui-ci que dans /usr/local/bin, le reste devra peut-être aller dans /usr/local/lib ou /usr/local/share.

Le /opt l'arborescence peut également être judicieuse:

/opt est réservé à l'installation de progiciels d'application complémentaires.

Un package à installer dans/opt doit localiser ses fichiers statiques dans un /opt/<package> ou /opt/<provider> arborescence de répertoires, où <package> est un nom qui décrit le progiciel et <provider> est le nom enregistré LANANA du fournisseur.

[...]

Les répertoires/opt/bin,/opt/doc,/opt/include,/opt/info,/opt/lib et/opt/man sont réservés à l'administrateur système local. Les packages peuvent fournir des fichiers "frontaux" destinés à être placés (par liaison ou copie) dans ces répertoires réservés par l'administrateur système local, mais doivent fonctionner normalement en l'absence de ces répertoires réservés.

(Vous pouvez créer votre propre lien à partir de /opt/your-package/bin/executable en /opt/bin, et met /opt/bin sur le PATH s'il n'est pas déjà là.)

16
Bruno