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

Am 30. November 2010 schrieb David Collier:

Ich habe festgestellt, dass die Links in busybox auf diese vier Verzeichnisse verteilt sind.
Gibt es eine einfache Regel, um zu bestimmen, 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 entwickelt haben. Rund 1971 wechselten sie auf den PDP-11 mit ein paar RK05-Disketten (jeweils 1,5 Megabyte).

Als das Betriebssystem wuchs und nicht mehr auf die erste Diskette (auf der das Root-Dateisystem lag) passte, haben sie einen Teil auf die zweite Diskette verschoben, wo sich die Home-Verzeichnisse befanden (daher wurde der Einhängepunkt /usr genannt – von "user"). Sie kopierten dort alle nötigen Verzeichnisse des Betriebssystems (/bin, /sbin, /lib, /tmp ...) und legten Dateien auf die neue Diskette, weil der Platz auf der alten ausgegangen war. Dann bekamen sie eine dritte Diskette, die sie im Verzeichnis /home einhängten und dort die Home-Verzeichnisse der Benutzer verschoben, damit das Betriebssystem den restlichen Platz auf den beiden Disketten nutzen konnte, und das waren ganze drei Megabyte (wow!).

Selbstverständlich mussten sie eine Regel einführen: "Wenn das Betriebssystem bootet, muss es in der Lage sein, das zweite Laufwerk im Verzeichnis /usr zu mounten. Daher sollten Programme wie mount nicht auf das zweite Laufwerk in /usr gelegt werden, sonst haben wir ein Henne-Ei-Problem." So einfach ist das. Und das galt für Unix V6 vor 35 Jahren.

Die Trennung von /bin und /usr/bin (und ähnlichen Verzeichnissen) ist eine Folge jener Ereignisse, ein Implementierungsdetail aus den 70ern, das seit Jahrzehnten von Bürokraten kopiert wird. Sie haben sich nie die Frage gestellt, das, sie haben es einfach so gemacht. Diese Trennung hat schon vor der Schaffung von Linux aus mehreren Gründen keinen Sinn mehr gemacht:

  1. Beim Booten kommt initrd oder initramfs zum Einsatz, das sich mit Problemen wie "Diese Datei benötigen wir früher als jene" befasst. So haben wir vorhanden ist, ein temporäres Dateisystem, das verwendet wird, um alles andere zu booten.
  2. Geteilte Bibliotheken (die von den Unix-Entwicklern aus Berkeley hinzugefügt wurden) ermöglichen es Ihnen nicht, den Inhalt von /lib und /usr/lib unabhängig voneinander zu ändern. Diese beiden Teile müssen miteinander übereinstimmen, sonst funktionieren sie nicht. Das war 1974 nicht der Fall, da damals durch statisches Linking eine gewisse Unabhängigkeit bestand.
  3. Günstige Festplatten haben irgendwo um 1990 die 100-Megabyte-Marke überschritten, und etwa zur gleichen Zeit erschienen Programme zur Größenänderung von Partitionen (Partition Magic 3.0 wurde 1997 veröffentlicht).

Natürlich haben, da es eine Trennung gibt, einige Leute Regeln erfunden, die diese rechtfertigen. Zum Beispiel ist die Wurzelpartition für verschiedene allgemeine Betriebssystembestandteile gedacht, während in /usr lokale Dateien abgelegt werden sollten. Oder in / wird das abgelegt, was von AT&T verteilt wird, und in /usr das, was Ihr Distribution, IBM AIX, Dec Ultrix oder SGI Irix hinzugefügt hat, während in /usr/local system-spezifische Dateien liegen. Dann entschied jemand, dass /usr/local nicht der geeignete Ort ist, um neue Software zu installieren, also fügen wir noch /opt hinzu! Es würde mich nicht überraschen, wenn es bald auch noch /opt/local gibt...

Natürlich sind in 30 Jahren durch solche Unterschiede viele interessante, distributionsspezifische Regeln entstanden und wieder verschwunden. Zum Beispiel: „/tmp wird beim Neustart geleert, aber /usr/tmp nicht“. (In Ubuntu gibt es in der Tat kein /usr/tmp, während es in Gentoo eine symbolische Verknüpfung zu /var/tmp ist, auf den nun die Regel zutrifft und der nicht beim Neustart geleert wird. Ja, das war alles noch vor tmpfs. Manchmal ist auch das Root-Dateisystem nur schreibgeschützt zugänglich, und dann darf man auch nichts in /usr schreiben, sondern muss es in /var tun. Oder in / hauptsächlich man kann nicht schreiben, abgesehen von dem, was in /etc ist, das manchmal nach /var verschoben werden sollte…)

Bürokraten wie die Linux Foundation (die vor Jahren die Free Standards Group im Rahmen ihrer Expansion übernommen haben) dokumentieren und komplizieren diese Regeln gerne, ohne auch nur 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-Diskette 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, dies bis heute so zu tun. Ich persönlich verlinke einfach /bin, /sbin und /lib auf die entsprechenden Verzeichnisse in /usr. Schließlich versuchen die Leute, die mit eingebetteter Software arbeiten, es zu verstehen und zu vereinfachen…

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster