Différence entre / bin et / usr / bin

83

J'ai lu ceci sur ce site et ça n'a aucun sens.

http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/basic/node32.html

Lorsque UNIX a été écrit pour la première fois /binet /usr/binrésidait physiquement sur deux disques différents: /binêtre sur un disque plus petit, plus rapide (plus cher) et /usr/binsur un disque plus grand et plus lent. Maintenant, /binest un lien symbolique vers /usr/bin: ils sont essentiellement le même répertoire.

Mais lorsque vous lsle /bindossier, il a beaucoup moins de contenu que le /usr/bindossier (du moins sur mon système en cours d'exécution).

Alors quelqu'un peut-il s'il vous plaît expliquer la différence?

qui suis je
la source
ces gars-là ne parlent-ils pas d'une machine spécifique?
Tshepang
1
@tshepang et si vous continuez à cliquer, l'article présentera Introduction de base à UNIX / Linux . Donc, je dirais non, ils ne parlent pas d'une machine spécifique
xenoterracide
3
@ xeno Oui, je l'ai fait, mais je ne suis pas resté assez longtemps. Dans ce cas, cette page doit être supprimée. Si trompeur.
Tshepang
3
Ce document peut être considéré comme une "référence historique". Si vous consultez la page "à propos de ce document", vous constaterez qu’il a été protégé par le droit d’auteur en 1993. Si vous regardez la bibliographie, sa source la plus récente est 1997. La plupart des systèmes d’exploitation populaires de type Unix ont considérablement changé depuis. ensuite.
Gabe.
1
Toute personne intéressée par l'historicité de cette configuration devrait lire ceci: lists.busybox.net/pipermail/busybox/2010-December/074114.html
JDS

Réponses:

73

Quelle? no /bin/n'est pas un lien symbolique /usr/binsur n'importe quel système conforme à FHS. Notez qu'il existe encore des Unices et des Linux populaires qui l'ignorent - par exemple, /binet /sbinsont liés symboliquement /usr/binsur Arch Linux (le raisonnement étant que vous n'avez pas besoin /bindu mode de secours / mono-utilisateur, car vous ne démarriez CD).

/bin

contient des commandes qui peuvent être utilisées à la fois par l'administrateur système et par les utilisateurs, mais qui sont nécessaires lorsqu'aucun autre système de fichiers n'est monté (par exemple, en mode utilisateur unique). Il peut également contenir des commandes utilisées indirectement par des scripts.

/usr/bin/

C'est le répertoire principal des commandes exécutables sur le système.

/bincontient essentiellement les fichiers exécutables requis par le système pour les réparations urgentes, le démarrage et le mode mono-utilisateur. /usr/bincontient les fichiers binaires non requis.

Je vais noter, qu'ils peuvent être sur des disques / partitions séparés, /bindoivent être sur le même disque que /. /usr/binpeut être sur un autre disque - bien noter que cette configuration a été cassée pendant un certain temps (c'est pourquoi par exemple, systemd avertit de cette configuration au démarrage).

Pour être tout à fait correct, certains utilisateurs peuvent ignorer FHS, car je crois qu’il s’agit uniquement d’une norme Linux. Je ne suis pas au courant qu’elle a déjà été incluse dans SUS, Posix ou toute autre norme UNIX, bien que cela devrait être à mon humble avis. Cela fait cependant partie de la norme LSB .

xénoterracide
la source
Cela signifie-t-il que je peux partager / usr / bin entre deux distributions? comme Ubuntu 10.04 et 10.10?
Balki
4
@balki non, ils doivent toujours être liés correctement, ce qui signifie qu'ils devront utiliser la bonne version des bibliothèques contre lesquelles ils ont été construits.
xenoterracide
6
/binest un lien vers /usr/binsur certains ordinateurs, tels que (certaines versions de?) Solaris.
Gilles le
1
@ balki, vous pourrez peut- être partager /usrdeux distributions très similaires, bien que je ne l'essaie pas à moins de savoir ce que vous faites, et que vous êtes prêt à faire échouer l'expérience de manière à ce que l'ordinateur ne démarre pas et ne mange pas vos données. /usr
Sachez
2
Notons également que / usr / local / bin est l'emplacement d'installation des programmes non inclus dans votre distribution, mais destinés à être utilisés à l'échelle du système.
Donato
56

/sbin - Fichiers binaires nécessaires au démarrage, à la réparation du système de bas niveau ou à la maintenance (niveau d'exécution 1 ou S)

/bin - Fichiers binaires nécessaires au fonctionnement normal / standard du système, quel que soit le niveau d'exécution.

/usr/bin - Fichiers binaires d'application / de distribution destinés aux utilisateurs connectés localement

/usr/sbin - Fichiers binaires d'application / de distribution prenant en charge ou configurant des éléments dans / sbin.

/usr/share/bin - Binaires ou scripts d’application / de distribution destinés à être accédés via le Web, c’est-à-dire les applications Web Apache

*local*- les fichiers binaires ne font pas partie d'une distribution; compilé localement ou installé manuellement. Il n'y a généralement jamais un /local/binmais toujours un /usr/local/binet /usr/local/share/bin.

LawrenceC
la source
4
Oh, et vous pouvez les placer sur un disque ou une partition séparé si vous le souhaitez, pour des raisons de sécurité ou autre. L'idée est que vous pouvez démonter / usr et que le système aura tout ce dont il a besoin pour son fonctionnement de base, mais il ne peut exécuter aucune application non-système.
LawrenceC
1
J'aurais aimé savoir cela il y a des années. Meilleure explication que j'ai vue jusqu'à présent. Je ne peux pas dire que j'ai regardé très fort, mais je suis heureux de connaître enfin la réponse.
David
2
C'est une excellente réponse. Je vous ferais don de 10 points si je le pouvais
amphibie
@ultrasawblade est /usr/binautomatiquement démonté quand aucun utilisateur n'est connecté? Par exemple, lorsque LINUX démarre et présente l’authentification de connexion, est /usr/binmonté ou non?
1
Non, il est monté au démarrage et reste monté à moins que vous ne le démontiez, à moins que votre système ne soit configuré de manière inhabituelle.
LawrenceC
17

Une sorte de "mise à jour" sur ce problème:

Récemment , certaines distributions Linux fusionnent /bindans /usr/binet corrélativement /liben /usr/lib. Parfois aussi (/usr)/sbinà /usr/bin(Arch Linux). Donc, /usrdevrait être disponible en même temps que /.

La distinction entre les deux hiérarchies est considérée comme une complexité inutile maintenant. Auparavant, l'idée n'était /bindisponible qu'au démarrage, mais le fait d'avoir un disque virtuel initial le rend obsolète.

Je sais que Fedora Linux (2011) et Arch Linux (2012) vont dans ce sens et que Solaris le fait depuis longtemps (> 15 ans).

JonnyJD
la source
8

Sous Linux /bin, ils /usr/binsont toujours séparés car il est courant d’avoir /usrune partition séparée (bien que cette configuration se casse parfois de manière subtile). En /binest toutes les commandes que vous aurez besoin si vous avez seulement /monté.

Sous Solaris et Arch, Linux (et probablement d’autres) /binest un lien symbolique vers /usr/bin. Arch a également /sbinet /usr/sbinlié de manière symétrique à /usr/bin.

Il est à noter que l'instruction qui /binconcerne les commandes "administrateur système" et /usr/binles commandes utilisateur n'est pas vraie (à moins que vous ne le pensiez bashet lsne soit destiné qu'aux administrateurs, auquel cas vous avez beaucoup à apprendre). Les commandes de l'administrateur sont dans /sbinet /usr/sbin.

bahamat
la source
1
qui a dit binest seulement pour les administrateurs système? c'est pour ça sbin.
xenoterracide
Vous avez mal cité. Désolé, je lisais trop vite.
Bahamat
5

Il existe de nombreux systèmes basés sur UNIX. Linux, AIX, Solaris, BSD, etc. La citation d'origine fournit un contexte historique qui s'applique à toutes les versions. Si vous regardez sur un système spécifique, vous verrez des résultats différents. La dernière phrase de la citation originale est spécifique à certaines versions et distributions.

Chris Quenelle
la source