web-dev-qa-db-fra.com

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

Pourquoi y a-t-il tant d'endroits pour 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 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?

487
Lazer
  1. /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.

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

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

  4. Il y a un /usr/sbin avec la même relation avec /usr/bin comme /sbin doit /bin.

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

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

600
geekosaur

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.
69
davitenio

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 .

36
Humphrey Bogart

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

17
BillThor

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

11
schily