Pourquoi y a-t-il tant d'endroits pour mettre un binaire sous Linux? Il y a au moins ces cinq:
/bin/
/sbin/
/usr/bin/
/usr/local/bin/
/usr/local/sbin/
Et sur ma boîte de bureau, je n'ai pas d'autorisations d'écriture pour certains d'entre eux.
Quel type de binaire va dans lequel de ces bin
?
/bin
(et /sbin
) étaient destinés à des programmes qui devaient être sur un petit /
partition avant la plus grande /usr
, etc. des partitions ont été montées. De nos jours, il sert principalement d'emplacement standard pour des programmes clés comme /bin/sh
, bien que l'intention initiale puisse toujours être pertinente, par exemple installations sur de petits appareils embarqués.
/sbin
, par opposition à /bin
, est destiné aux programmes de gestion du système (qui ne sont normalement pas utilisés par les utilisateurs ordinaires) nécessaires avant /usr
est monté.
/usr/bin
est destiné aux programmes utilisateur normaux gérés par la distribution.
Il y a un /usr/sbin
avec la même relation avec /usr/bin
comme /sbin
doit /bin
.
/usr/local/bin
est pour les programmes utilisateur normaux pas gérés par le gestionnaire de package de distribution, par exemple packages compilés localement. Vous ne devez pas les installer dans /usr/bin
car les futures mises à niveau de distribution peuvent les modifier ou les supprimer sans avertissement.
/usr/local/sbin
, comme vous pouvez probablement le deviner à ce stade, est de /usr/local/bin
comme /usr/sbin
à /usr/bin
.
En outre, il existe également /opt
qui est destiné aux packages monolithiques non distribués, bien qu'avant qu'ils ne soient correctement intégrés, diverses distributions y ont placé Gnome et KDE. En règle générale, vous devez le réserver pour des packages tiers volumineux et mal comportés tels que Oracle.
Je recommande de consulter la page de manuel de la hiérarchie du système de fichiers:
man hier
qui est également disponible en ligne, par exemple: http://linux.die.net/man/7/hier . Les parties pertinentes ont été copiées ci-dessous. Selon votre système, cela peut dire quelque chose de différent.
Nom
hier - description de la hiérarchie du système de fichiers
La description
Un système Linux typique possède, entre autres, les répertoires suivants:
/bin
Ce répertoire contient des programmes exécutables qui sont nécessaires en mode mono-utilisateur et pour mettre le système en place ou le réparer.
/sbin
Comme
/bin
, ce répertoire contient les commandes nécessaires au démarrage du système, mais qui ne sont généralement pas exécutées par les utilisateurs normaux./usr/bin
Il s'agit du répertoire principal des programmes exécutables. La plupart des programmes exécutés par des utilisateurs normaux qui ne sont pas nécessaires au démarrage ou à la réparation du système et qui ne sont pas installés localement doivent être placés dans ce répertoire.
/usr/local/bin
Binaires pour les programmes locaux sur le site.
/usr/local/sbin
Programmes installés localement pour l'administration du système.
/usr/sbin
Ce répertoire contient des binaires de programme pour l'administration système qui ne sont pas essentiels pour le processus de démarrage, pour le montage
/usr
, ou pour la réparation du système.
L'entrée Filesystem Hierarchy Standard dans Wikipedia m'a aidé à répondre à la même question quand je l'ai eue, en plus il a un tableau très explicatif.
Extrait de cette page1:
/bin Essential command binaries that need to be available in single user mode; for all users, e.g., cat, ls, cp. /usr/bin Non-essential command binaries (not needed in single user mode); for all users. /usr/local Tertiary hierarchy for local data, specific to this Host. Typically has further subdirectories, e.g., bin, lib, share /usr/sbin Non-essential system binaries, e.g., daemons for various network-services. /sbin Essential system binaries, e.g., fsck, init, route.
1Récupéré le 19 juin 2019; permalien .
Les répertoires sbin
contiennent des programmes qui sont généralement réservés à l'administration système. Les programmes destinés aux utilisateurs réguliers ne doivent jamais y entrer.
Quelques programmes sont nécessaires au démarrage et se retrouvent dans /bin/
ou /sbin/
. Ceux-ci doivent être disponibles avant le montage des systèmes de fichiers. Des choses comme mount
et fsck
qui sont nécessaires pour vérifier et monter les systèmes de fichiers doivent être là.
La plupart des programmes packagés se retrouvent dans /usr/bin/
et /usr/sbin/
. Ceux-ci peuvent se trouver sur un système de fichiers autre que le système de fichiers racine. Dans certains cas, ils peuvent se trouver sur un lecteur monté en réseau.
Les programmes et scripts locaux appartiennent à /usr/local/bin/
et /usr/local/sbin/
. Cela les identifie comme clairement non standard et peut-être uniquement disponibles sur site.
Pour plus d'explications, essayez d'exécuter la commande man hier
qui devrait fournir une description de la hiérarchie de système de fichiers recommandée pour votre distribution. Vous pouvez également lire la Hiérarchie du système de fichiers sur Wikipedia
Dans les années 1970, UNIX
avait tous les exécutables officiels dans /bin
et /usr/bin
se trouvait sous les répertoires personnels des utilisateurs (par exemple, /usr/dmr
) qui était disponible pour tout utilisateur afin de stocker ses propres fichiers binaires qui auraient pu également intéresser d'autres.
Le résultat de cette ouverture /usr/bin
était un tas de logiciels indésirables et donc Stephen Bourne
a écrit un cron script
qui vérifiait tous les soirs de nouveaux binaires et supprimait tous les binaires qui n'avaient pas de documentation ou qui avaient été mis à jour sans mettre à jour leur documentation également.
À la fin des années 1970, /usr/bin
a été intégré à la distribution de base du système d'exploitation et les utilisateurs ont commencé à utiliser /usr/local/bin
aux fins de l'ouverture précédente /usr/bin
.
Après un certain temps, les administrateurs système ont utilisé /usr/local/bin
ranger non-local
les logiciels importés du réseau (par exemple, USENET) et comme les sociétés UNIX n'aimaient pas répéter la même erreur qu'avec /usr/bin
encore une fois, il y a eu une conférence sur la hiérarchie du système de fichiers vers 1987 où toutes les sociétés UNIX ont accepté d'abandonner /usr/local/bin
et utiliser /opt/<vendor>/bin
au lieu.
Malheureusement, les distributions Linux n'ont pas suivi cette décision ....