Der Unterschied zwischen bin, sbin, usr/bin, usr/sbin

Am 30. November 2010 schrieb David Collier:

Ich habe bemerkt, dass die Links in busybox auf diese vier Verzeichnisse verteilt sind.
Gibt es eine einfache Regel, um festzustellen, in welchem Verzeichnis welcher Link liegen sollte ...
Zum Beispiel liegt kill in /bin, während killall in /usr/bin liegt ... Ich sehe keinen Sinn in dieser Aufteilung.

Sie wissen wahrscheinlich, dass Ken Thompson und Dennis Ritchie 1969 Unix auf dem PDP-7 erstellt haben. Im Jahr 1971 haben sie auf den PDP-11 mit ein paar RK05-Platten (jeweils 1,5 Megabyte) umgestellt.

Als das Betriebssystem gewachsen ist und nicht mehr auf die erste Platte passte (auf der sich das Root-Dateisystem befand), haben sie einen Teil auf die zweite geladen, wo sich die Home-Verzeichnisse befanden (deshalb hieß der Einhängepunkt /usr — von user). Sie haben dort alle notwendigen Verzeichnisse des Betriebssystems ( /bin, /sbin, /lib, /tmp ...) dupliziert und Dateien auf die neue Platte gelegt, weil auf der alten der Speicherplatz ausgegangen ist. Dann bekamen sie eine dritte Platte, die sie im Verzeichnis /home einhängten und die Home-Verzeichnisse der Benutzer dorthin verschoben, damit das Betriebssystem den gesamten verbleibenden Platz auf den beiden Platten nutzen konnte, und das waren ganz genau drei Megabyte (Wow!).

Natürlich mussten sie eine Regel einführen, dass "wenn das Betriebssystem bootet, es in der Lage sein muss, die zweite Platte im Verzeichnis /usr einzuhängen, deshalb sollten Programme wie mount nicht auf die zweite Platte im /usr gelegt werden, sonst haben wir das Hühner-und-Ei-Problem." So einfach ist das. Und das galt für Unix V6 vor 35 Jahren.

Die Aufteilung von /bin und /usr/bin (und allen ähnlichen Verzeichnissen) ist eine Folge dieser Ereignisse, ein Implementierungsdetail aus den 70er Jahren, das bis heute, über Jahrzehnte hinweg, von Bürokraten kopiert wurde. Sie haben nie die Frage gestellt warum, sie haben einfach so gehandelt. Diese Aufteilung hatte ohnehin keinen Sinn mehr, lange bevor Linux geschaffen wurde, aus mehreren Gründen:

  1. Beim Booten wird initrd oder initramfs verwendet, das sich um Probleme wie "Diese Datei brauchen wir früher als jene." kümmert. So haben wir gibt es bereits ein temporäres Dateisystem, das zum Laden des Restes verwendet wird.
  2. Geteilte Bibliotheken (die von den Berkley-Jungs in Unix hinzugefügt wurden) erlauben es Ihnen nicht, die Inhalte von /lib und /usr/lib unabhängig zu ändern. Diese beiden Teile müssen zu einander passen, sonst funktionieren sie nicht. Das war 1974 nicht der Fall, da sie damals eine gewisse Unabhängigkeit durch statisches Linking hatten.
  3. Günstige Festplatten haben um 1990 die 100-Megabyte-Barriere überwunden und ungefähr zur gleichen Zeit erschienen Programme zur Größenänderung von Partitionen (Partition Magic 3.0 wurde 1997 veröffentlicht).

Natürlich, da es eine Trennung gibt, haben einige Leute Regeln entwickelt, die sie rechtfertigen. Zum Beispiel ist die Root-Partition für verschiedene allgemeine Dinge des Betriebssystems notwendig, während in /usr Ihre lokalen Dateien abgelegt werden sollten. Oder in / wird das platziert, was von AT&T verbreitet wird, während in /usr das kommt, was Ihr Distribution, IBM AIX oder Dec Ultrix, oder SGI Irix hinzugefügt haben, und in /usr/local liegen dateispezifische Dateien für Ihr System. Und dann kam jemand auf die Idee, dass /usr/local kein geeigneter Ort ist, um neue Software zu installieren, also lassen Sie uns noch /opt hinzufügen! Ich würde mich nicht wundern, wenn noch /opt/local hinzukäme...

Natürlich haben sich in den letzten 30 Jahren aufgrund dieser Trennung viele interessante, distributionsspezifische Regeln entwickelt und wieder verschwunden. Zum Beispiel: „/tmp wird beim Neustart gelöscht, aber /usr/tmp nicht“. (Und in Ubuntu gibt es /usr/tmp überhaupt nicht, während in Gentoo /usr/tmp eine symbolische Verknüpfung zu /var/tmp ist, auf die jetzt jene Regel zutrifft, und sie wird beim Neustart nicht gelöscht. Ja, das alles war noch vor tmpfs. Und es kann auch vorkommen, dass das Root-Dateisystem nur schreibgeschützt zugänglich ist, und dann sollte ebenfalls nichts in /usr geschrieben werden, sondern in /var. Oder in / hauptsächlich kann man nichts schreiben, abgesehen von /etc, das manchmal in /var verschoben zu werden versucht...)

Bürokraten wie die Linux Foundation (die vor Jahren die Free Standards Group übernommen haben) dokumentieren und komplizieren diese Regeln gerne, ohne zu versuchen zu verstehen, warum sie entstanden sind. Sie ahnen nicht, dass Ken und Dennis einfach einen Teil des Betriebssystems in ihr Home-Verzeichnis verschoben haben, weil die RK05-Platte auf dem PDP-11 zu klein war.

Ich bin mir ziemlich sicher, dass busybox Dateien einfach so anordnet, wie es historisch gewachsen ist. Es gibt keinen wirklichen Grund, das bis heute so zu handhaben. Ich persönlich mache einfach /bin, /sbin und /lib zu Links auf die entsprechenden Verzeichnisse in /usr. Menschen, die mit eingebetteter Software arbeiten, versuchen in der Regel, die Dinge zu verstehen und zu vereinfachen…

Quelle: habr.com

60GB SSD 8Gb DDR4