/ usr / bin vs / usr / local / bin sous Linux

446

Pourquoi y a-t-il tant d'endroits où mettre un binaire sous Linux? Il y a au moins ces cinq:

  1. /bin/
  2. /sbin/
  3. /usr/bin/
  4. /usr/local/bin/
  5. /usr/local/sbin/

Et sur mon bureau, je n’ai pas d’autorisation d’écriture pour certains d’entre eux.

Quel type de binaire va dans lequel de ces bins?

Lazer
la source
28
Vous avez oublié /usr/sbin/.
Bonjour71
15
Et ~/bin/pour des affaires personnelles.
Calmarius
1
De nos jours, il y a moins d'emplacements, car ils ont /binété fusionnés /usr/binet ont /sbinété fusionnés /usr/sbin- voir L'affaire de la fusion / usr .
Piotr Dobrogost le
Question connexe: askubuntu.com/questions/308045/…
Gabriel Staples
@ Calmarius, quoi? ne devriez-vous pas utiliser /usr/local/bin?
Pacerier

Réponses:

559
  1. /bin(et /sbin) étaient destinés aux programmes devant être placés sur une petite /partition avant que les partitions plus grandes /usr, etc., ne soient montées. Ces jours-ci, il sert principalement d’emplacement standard pour des programmes clés tels /bin/shque, bien que l’intention initiale puisse toujours être pertinente pour, par exemple, des installations sur de petits périphériques intégrés.

  2. /sbin, distinct de /bin, est destiné aux programmes de gestion de système (qui ne sont normalement pas utilisés par les utilisateurs ordinaires) nécessaires avant le /usrmontage.

  3. /usr/bin est destiné aux programmes utilisateur normaux gérés par la distribution.

  4. Il existe une /usr/sbinrelation identique à ce /usr/binqui /sbindoit être /bin.

  5. /usr/local/binest destiné aux programmes utilisateur normaux non gérés par le gestionnaire de packages de distribution, par exemple les packages compilés localement. Vous ne devez pas les installer dans /usr/bincar les futures mises à niveau de la distribution pourraient les modifier ou les supprimer sans préavis.

  6. /usr/local/sbin, Comme vous pouvez le deviner à ce stade, est de /usr/local/bincomme /usr/sbinà /usr/bin.

En outre, il existe également des /optpackages monolithiques de non-distribution, bien qu'avant leur intégration correcte, diverses distributions inséraient Gnome et KDE. En règle générale, vous devriez le réserver pour les gros paquets tiers mal conçus, tels que Oracle.

geekosaur
la source
37
Je pense que cette réponse permet de clarifier un ensemble de conventions communes, mais ce billet de Rob Landley est une très bonne lecture si vous voulez avoir un aperçu du non-sens ... lists.busybox.net/pipermail/busybox/2010-December /074114.html
division
3
refspecs.linuxfoundation.org/fhs.shtml pour la référence courante canonique. Le lien de @kojiro est obsolète et n'a pas la nouvelle spécification.
Didier A.
2
Où dois-je placer un bac que j'ai téléchargé d'Internet? D'après votre description, il semble que cela devrait aller dans / usr / local / bin ou / usr / bin. Est-ce que / usr / bin est quelque chose que je ne devrais jamais toucher manuellement et laisser uniquement le gestionnaire de paquets jouer?
Didier A.
3
@ DidierA. le mettre dans ~/binet ajouter ce répertoire à votre PATH en tant qu'utilisateur ... Merci pour la note, j'ai supprimé mon commentaire sérieusement obsolète.
Kojiro
3
J'ai trouvé la réponse à la première partie de ma question ici: superuser.com/a/238993/425838 . La priorité est basée sur l’ordre dans la PATHvariable système , et echo $PATHpour moi montre /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games, ce qui signifie que les exécutables /usr/local/binsont prioritaires sur ceux /usr/binqui le sont par rapport à ceux de /bin.
Gabriel Staples
65

Je vous recommande de consulter la page de manuel relative à 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

davitenio
la source
1
Cela ne répond pas à la question de l'utilisateur.
Billy ONeal
14
La page de manuel contient une entrée pour chacun des répertoires bin, expliquant ce qui y est contenu, ce qui était l'une des questions.
davitenio
34

L’ entrée standard de la hiérarchie des systèmes de fichiers dans Wikipedia m’a aidé à répondre à la même question que lorsque je l’avais eue, plus un tableau très explicatif.

Extrait de cette page 1 :

/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.

1 Récupéré le 19 juin 2019; lien permanent .

Humphrey bogart
la source
17

Les sbinrépertoires contiennent des programmes qui sont généralement uniquement destinés à l’administration système. Les programmes destinés aux utilisateurs réguliers ne devraient jamais y aller.

Quelques programmes sont nécessaires au démarrage et aboutissent à /bin/ou /sbin/. Ceux-ci doivent être disponibles avant que les systèmes de fichiers ne soient montés. Des choses comme mount, et fsckqui sont nécessaires pour vérifier et monter des systèmes de fichiers, doivent être là.

La plupart des programmes empaquetés aboutissent dans /usr/bin/et /usr/sbin/. Ceux-ci peuvent être sur un système de fichiers autre que le système de fichiers racine. Dans certains cas, ils peuvent être sur un lecteur réseau.

Les programmes et scripts locaux appartiennent à /usr/local/bin/et /usr/local/sbin/. Cela les identifie comme étant clairement non standard et, éventuellement, uniquement disponible sur site.

Pour plus d'explications, essayez d'exécuter la commande man hierqui devrait fournir une description de la hiérarchie de système de fichiers recommandée pour votre distribution. Vous pouvez également vouloir en savoir plus sur la hiérarchie des systèmes de fichiers sur Wikipedia

BillThor
la source
1
+1 Une explication vraiment concise si top est un peu trop.
CppLearner
"Les programmes et scripts locaux appartiennent à / usr / local / bin / et / usr / local / sbin /" - Vous voulez dire aux programmes locaux comme dans "pas du tout partie du système d'exploitation, mais j'ai décidé de les installer et de les utiliser "?
Jim Aho
11

Dans les années 1970, UNIXtous les exécutables officiels se trouvaient dans les répertoires de départ des utilisateurs (par exemple ) /binet /usr/binse trouvaient sous /usr/dmrcelui-ci, ce qui permettait à tout utilisateur de stocker ses propres fichiers binaires susceptibles d’intéresser d’autres.

Le résultat de cette ouverture a /usr/binété un parc de logiciels non documentés. C'est pourquoi nous avons Stephen Bourneécrit un cron scriptoutil qui vérifiait la présence de nouveaux fichiers binaires toutes les nuits et supprimait tous les fichiers binaires dépourvus de documentation ou mis à jour sans les mettre à jour.

À la fin des années 1970, a /usr/binété intégré à la distribution de base du système d’exploitation et les gens ont commencé à utiliser /usr/local/binpour les besoins de la précédente ouverture /usr/bin.

Après un certain temps, les administrateurs système /usr/local/binstockaient les non-locallogiciels importés du réseau (par exemple USENET) et, les entreprises UNIX ne voulant pas répéter la même erreur /usr/bin, une conférence sur la hiérarchie des systèmes de fichiers a eu lieu vers 1987, à laquelle toutes les entreprises UNIX ont convenu. abandonner /usr/local/binet utiliser à la /opt/<vendor>/binplace.

Malheureusement, les distributions Linux n'ont pas suivi cette décision ....

schily
la source
Bien que très intéressant, rien de tout cela ne tente même de répondre à la question posée qui ne portait /optpas sur UNIX ni sur UNIX, mais sur Linux. C'est comme répondre "Pourquoi les voitures ont-elles 4 roues?" avec "Les vélos ont 2! Malheureusement, les voitures ne." ce qui n'aide pas le PO à comprendre pourquoi les voitures sont 4.
terdon
2
Si vous ne parvenez pas à utiliser l'explication donnée pour expliquer l'arrière-plan de Linux et le fait que Linux aime imiter UNIX, il se peut que vous manquiez de l'arrière-plan nécessaire.
Schily
1
Intéressant, mais quelque chose me confond et qui est peut-être aussi seulement historique. Aujourd'hui, télécharger une corbeille en ligne et une corbeille d'entreprise ne sont pas très différents. Si Joe Blow crée un programme et que je le télécharge, pourquoi ne pas le mettre dans / opt / JowBlow / bin au lieu de / usr / local / bin. Est-ce une question de fournisseur de confiance par opposition à non fiable? Cela ne semble pas avoir de sens pour moi.
Didier A.
1
J'aurais aimé connaître cette histoire "exacte" il y a quelques années. a) Je me suis demandé pourquoi AIX évitait / usr / local, utilisait / opt / IBM et / opt / ibm et Bullfreeware utilisait / opt / freeware - et pourquoi j'aurais dû utiliser un chemin différent (pas seulement / opt / * sbin). Quant à la semi-pertinence avec Linux - de meilleurs outils GNU - le préfixe par défaut dans auto-tools est / usr / local. Dommage que les outils automatiques (automake, autoconf, etc. ne suivent pas .... Mais nous survivons tous et apprenons où les fournisseurs de distrub. || mettent leurs programmes.
Michael Felt
Pourrions-nous avoir une autre de ces conférences? Juste cette fois, TOUT LE MONDE ECOUTE!
MemphiZ