La norme pour ces questions est le Standard de la hiérarchie des systèmes de fichiers . C'est un document assez volumineux. En gros (et très approximativement), les chemins standards sous Linux sont :
-
/bin
& /sbin
sont pour les programmes vitaux pour le système d'exploitation, sbin étant pour les administrateurs seulement ;
-
/usr/bin
& /usr/sbin
sont pour les programmes non vitaux, sbin étant pour les administrateurs seulement ;
-
/var
est destiné aux données vivantes pour les programmes. Il peut s'agir de données de cache, de données de spool, de données temporaires (à moins qu'il ne s'agisse de données de /tmp
qui est effacé à chaque redémarrage), etc ;
-
/usr/local
est pour les programmes installés localement. En général, il héberge des programmes qui respectent les normes mais qui n'ont pas été intégrés au système d'exploitation, mais qui ont été installés manuellement par l'administrateur (en utilisant par exemple ./configure && make && make install
) ainsi que les scripts de l'administrateur ;
-
/opt
est pour les programmes qui ne sont pas emballés et ne suivent pas les normes. Il suffit d'y placer toutes les bibliothèques avec le programme. C'est souvent une solution rapide et sale, mais elle peut également être utilisée pour les programmes que vous avez créés vous-même et pour lesquels vous souhaitez avoir un chemin spécifique. Vous pouvez créer votre propre chemin (par ex. /opt/yourcompany
) en son sein, et dans ce cas, vous êtes encouragé à l'enregistrer comme faisant partie des chemins standard ;
-
/etc
ne doit pas contenir de programmes, mais plutôt des configurations.
Si vos programmes sont spécifiques aux services fournis par le service, /srv
peut aussi être un bon endroit pour eux. Par exemple, je préfère utiliser /srv/www
pour les sites web plutôt que /var/www
pour s'assurer que le répertoire ne contiendra que des données que j'ai ajoutées moi-même, et rien qui ne provienne de progiciels.
Il existe quelques différences entre les distributions. Par exemple, les systèmes RedHat utilisent libexec
alors que les systèmes Debian/Ubuntu ne le font pas.
Le FHS est principalement utilisé par les distributions Linux (en fait, je ne connais aucun autre système d'exploitation qui s'y conforme vraiment). Les autres systèmes Unix ne le suivent pas. Par exemple, les systèmes BSD ont tendance à utiliser /usr/local
pour les programmes packagés, ce qui n'est pas le cas pour Linux. Solaris a des chemins standards très différents.
Je vous encourage vivement à lire le document FHS dont j'ai donné le lien ci-dessus si vous souhaitez en savoir plus à ce sujet.