Was ist der Vorteil der Art und Weise, wie Linux die Dateien installierter Programme organisiert? [geschlossen]

10

Unter Windows verfügt das Systemlaufwerk C:über ein Verzeichnis program_files, unter dem jedes Programm ein eigenes Verzeichnis hat.

In Linux, unter /usr/und /usr/local/gibt es /bin, /etc, /share, /srcetc.

In Windows sind also alle Dateien jedes Programms in demselben Verzeichnis gruppiert, während sich unter Linux Dateien desselben Typs aus allen Programmen befinden.

Ich bin der Meinung, dass die Art und Weise, wie Windows die installierten Programme organisiert, logischer ist als die von Linux, und daher sind installierte Programme einfacher manuell zu verwalten.

Was ist der Vorteil der Art und Weise, wie Linux die Dateien installierter Programme organisiert? Vielen Dank.

Ich habe diese Frage, wenn ich das Problem habe, wie installierte Programme in $ HOME für Shell organisiert werden, um sie beim Ausführen zu suchen. , wo ich versuche, meine Programme nach $HOMEWindows zu organisieren, aber Probleme beim Festlegen der Suchpfade für die Programme habe.

Tim
quelle
9
@ RandallStewart Ihre " unvorhersehbare und verstreute " ist unsere rationale Platzierung und Nicht-Duplizierung von DLLs.
RonJohn
1
Dies ist historisch bedingt - hauptsächlich, um mehrere Festplattenpartitionen bereitstellen zu können, während der Bootstrap nur mit den erforderlichen Informationen ausgeführt werden kann. Eine ähnliche Situation war, als PC-BIOS nur den ersten Teil sehr großer Festplatten sehen konnten, sodass in diesem ersten Teil eine separate Partition platziert wurde, die alles enthielt, was zum Booten benötigt wurde. Wird normalerweise "/ boot" genannt. Der Bedarf an Sandboxen und nicht vertrauenswürdigen Apps hat heute dazu geführt, dass dies überdacht wurde - siehe z. B. die Ubuntu-Snaps.
Thorbjørn Ravn Andersen
9
Lassen Sie mich als Erster darauf hinweisen, dass Windows derzeit nicht alle Dateien jedes Programms in das smae-Verzeichnis stellt. Neben "Programme" und "Programme (x86)" gibt es unter anderem die Verzeichnisse "Users \ <Benutzername> \ Appdata" von "Local", "LocalLow" und "Roaming". Windows hat auch nicht immer einen Ordner "Programme" für Programme verwendet oder diesen im Verlauf konsistent verwendet. * nix ist im Umgang mit Dateien im Laufe der Zeit viel konsistenter.
YLearn
5
@JAB, stimmte zu und verstehe das. Ich habe darauf hingewiesen, dass die Aussage des OP, nämlich "In Windows sind alle Dateien jedes Programms in demselben Verzeichnis gruppiert", einfach nicht wahr ist. Ich habe auch die Windows-Registrierung nicht in die Diskussion einbezogen, die auch als Speicher für Konfiguration und andere Daten zu Windows-Programmen angesehen werden kann und nicht Teil eines Verzeichnisses "Programme" ist.
YLearn
2
Linux organisiert die Dateien der installierten Programme? Seit wann?
Hobbs

Antworten:

17

Unter Linux spiegeln die verschiedenen Speicherorte normalerweise, wenn sie gut gepflegt sind, eine gewisse Logik wider. Z.B.:

  • /bin enthält die grundlegendsten Werkzeuge (Programme)
  • /sbin enthält die grundlegendsten Verwaltungsprogramme

Beide enthalten die elementaren Befehle, die beim Booten und bei der grundlegenden Fehlerbehebung verwendet werden. Und hier sehen Sie den ersten Unterschied. Einige Programme sind nicht für normale Benutzer gedacht.

Dann schauen Sie doch mal rein /usr/bin. Hier sollten Sie eine größere Auswahl an Befehlen (Programmen) finden, normalerweise mehr als 1000 davon. Sie sind Standardwerkzeuge, aber nicht so wichtig wie die in /binund /sbin.

/usr/binenthält die Befehle, während sich die Konfigurationsdateien an anderer Stelle befinden. Dies trennt sowohl die funktionalen Entitäten (Programme) als auch deren Konfigurations- und andere Dateien. In Bezug auf die Benutzerfunktionalität ist dies jedoch praktisch, da die Befehle, die nicht mit anderen Elementen vermischt sind, die einfache Verwendung der PATHVariablen ermöglichen, die auf die ausführbaren Dateien verweist. Es führt auch Klarheit ein. Was auch immer ist, sollte ausführbar sein.

Schau dir meine an PATH,

$ echo "$PATH" | perl -F: -anlE'$,="\n"; say @F'
/home/tomas/bin
/usr/local/bin
/usr/bin
/bin
/usr/local/games
/usr/games

Es gibt genau sechs Speicherorte, die die Befehle enthalten, die ich direkt aufrufen kann (dh nicht anhand ihrer Pfade, sondern anhand der Namen ihrer ausführbaren Dateien).

  • /home/tomas/bin ist mein privates Verzeichnis in meinem Home-Ordner für meine privaten ausführbaren Dateien.
  • /usr/local/bin Ich werde unten separat erklären.
  • /usr/bin ist oben beschrieben.
  • /bin ist auch oben beschrieben.
  • /usr/local/gamesist eine Kombination aus /usr/local(weiter unten zu erklärenden) und Spielen
  • /usr/gamessind Spiele. Um nicht mit ausführbaren Dienstprogrammen gemischt zu werden, haben sie separate Speicherorte.

Nun zu /usr/local/bin. Dieser ist etwas rutschig und wurde bereits hier erklärt: Was ist / usr / local / bin? . Um dies zu verstehen, müssen Sie wissen, dass der Ordner /usrmöglicherweise von vielen Computern gemeinsam genutzt und von einem Netzspeicherort aus bereitgestellt wird. Die dortigen Befehle werden beim Booten nicht benötigt, wie bereits erwähnt, im Gegensatz zu denen in /bin, sodass der Speicherort in späteren Phasen des Bootvorgangs bereitgestellt werden kann. Es kann auch schreibgeschützt montiert werden. /usr/local/binAuf der anderen Seite ist für die lokal installierten Programme und muss beschreibbar sein. Während viele Netzwerkcomputer möglicherweise das allgemeine /usrVerzeichnis gemeinsam nutzen, wird auf jedem von ihnen ein eigenes /usr/localim gemeinsamen Verzeichnis bereitgestellt /usr.

Schauen Sie sich zum Schluss PATHmeinen Root-Benutzer an:

# echo "$PATH" | perl -F: -anlE'$,="\n"; say @F'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin

Es enthält diese:

  • /usr/local/sbin, der die admin-Befehle des Typs enthält /usr/local
  • /usr/local/binDies sind die gleichen, die der normale Benutzer verwenden kann. Auch hier kann ihr Typ beschrieben werden als /usr/local.
  • /usr/sbin sind die nicht wesentlichen Verwaltungsdienstprogramme.
  • /usr/bin sind die nicht wesentlichen Verwaltungs- und regulären Benutzerdienstprogramme.
  • /sbin sind die wesentlichen Admin-Tools.
  • /bin sind die wesentlichen Tools für Administratoren und reguläre Benutzer.

quelle
Vielen Dank. Ich bin sehr daran interessiert, wie Sie die Programme organisieren, in denen installiert werden soll /home/tomasz/bin/, siehe unix.stackexchange.com/questions/431793/…
Tim
Mein Verständnis war, dass während die Trennung von /binund /usr/bintatsächlich Probleme mit netzwerkmontierten /usrVerzeichnissen zu vermeiden war , die Trennung von /usrund /usr/localzur Unterscheidung zwischen vom Hersteller bereitgestellten Dateien ( /usr) und manuell auf dem Computer selbst installierten Dateien ( /usr/local) dient und nichts damit zu tun hat die Probleme bei der Netzwerkmontage. Ist das richtig?
Keiji
4
@Keiji, Vendor-vs-Local-Management ist heutzutage die gebräuchlichste (und konventionellste) Verwendung für diese Unterscheidung. Wenn Sie sich jedoch traditionelle UNIX-Installationen ansehen, ist /usr-off-a-Network (vs /usr/local, na ja, lokal ) nicht ungewöhnlich von.
Charles Duffy
Das ist alles so eine schlechte Idee im Jahr 2018
Amara
7

Heutzutage denke ich, dass dies ein historisches Erbe des klassischen UNIX ist.

In den ersten UNIX-Versionen waren die Programme nicht so groß wie heute. Die Programme bestanden häufig aus einer ausführbaren Datei, die Systembibliotheken verwendet. Daher dachte niemand an Programme, die aus einigen eigenen Bibliotheken bestehen werden. Die Hauptbibliothek war die C-Bibliothek, und jedes Programm wusste über den Speicherort Bescheid.

Außerdem wurde die UNIX-Umgebung als fertiges Produkt betrachtet (zur Vorbereitung der Dokumentation). Daher wurde der Pfad zu allen Werkzeugen festgelegt.

Einige Vorteile von festen Pfaden in HDD-Tagen (Hard Disk Drive) sind heutzutage vorhanden. Wenn FSH (File System Hierarchy) auf separate Festplattenpartitionen aufgeteilt und Partitionen mit Binärdateien und Bibliotheken in der Nähe der primären Sektoren der Festplatte platziert werden, ist der Zeitpunkt des Programmstarts etwas kürzer.

Yurij Goncharuk
quelle
6
Es gibt überzeugende Vorteile, die bis heute nützlich sind. Behalten von Binärdateien /usr/bin, statischen Datendateien /usr/shareund Dateien, die geändert werden können, /varoder /usr/varbedeutet, dass Sicherheitsmaßnahmen verwendet werden können, um zu erzwingen, dass nichts in shareoder varausführbar ist (indem noexecFlags für ihre Bereitstellungen verwendet werden); dass nichts außerhalb vargeändert werden kann (auf einem System, das dm_verityoder ähnliche Maßnahmen zur Erzeugung signierter, schreibgeschützter Medien verwendet); usw.
Charles Duffy
3

Was Sie als modernes Unix-ähnliches System sehen, ist nicht wirklich traditionell.

Normalerweise würde es ziemlich minimal /und /usrHierarchien mit nur Systemprogrammen und Programme werden dann getrennt in ein Unterverzeichnis installiert /usr/local, und dann durch die Schaffung von symbolischen Links zur Verfügung gestellt.

Ein sehr typisches Setup für GNU-Software war das Kompilieren und Installieren mit

./configure
make
make install prefix=/usr/local/DIR/program-1
cd /usr/local/DIR
stow program-1

Das GNU- Dienstprogramm zum Verstauen erstellt symbolische Links, um die Software auf dem Standardpfad verfügbar zu machen, ohne der PATH-Variablen Verzeichnisse hinzufügen zu müssen (wie dies bei Windows der Fall ist und sich Cruft dort ansammelt).

Moderne Linux-Distributionen liefern jedoch alles als vorgefertigte Pakete aus, sodass Programme Teil des "Systems" geworden sind. Da sich der Paketmanager um die Installation kümmert, sind keine symbolischen Verknüpfungen erforderlich, und das Trennen von Programmen dient keinem nützlichen Zweck (würde jedoch den Programmstart verlangsamen, da viele kleine Verzeichnisse gescannt werden müssten).

Wenn Sie Software in Ihrem Home-Verzeichnis installieren möchten, empfehlen wir Ihnen, auch GNU stow zu verwenden. Auf diese Weise können Sie Ihre Programme getrennt halten. Dies ist sinnvoll, wenn Sie keinen Paketmanager verwenden.

Meine traditionelle Setup für das ist ein Verzeichnis , ~/software/DIRdass ich Programme installieren , in, dann innen mit versenkbaren DIRzu erstellen ~/software/bin, ~/software/shareusw. Das bedeutet , ich nur hinzufügen müssen , ~/software/binum das PATH - Variable , um all meine installierte Software.

Verwenden:

./configure --prefix=~/software
make
make install prefix=~/software/DIR/program-1
cd ~/software/DIR
stow program-1

zu installieren, wenn das Programm den GNU-Konventionen entspricht.

Simon Richter
quelle
2

Sie sprechen anscheinend über den Stil der Aufteilung einzelner Dateien nach Zweck ( /usr/binfür ausführbare Dateien, /usr/libfür Bibliotheken) und nicht nach Anwendungspaket (C ++ - Compiler in einem Verzeichnis, Bildbearbeitungsprogramme in einem anderen). Während in Unix-Systemen ein Großteil des Grundes für diese Geschichte liegt, gibt es auch aktuelle Kräfte, die dazu neigen, Unix-ähnliche Systeme dazu zu neigen: Paketmanager, die die meisten Programme auf einem System verwalten.

Unter Windows waren Anwendungen in der Vergangenheit und heute noch ziemlich dafür verantwortlich, ein eigenes Installationsprogramm und insbesondere ein Deinstallationsprogramm bereitzustellen, und registrieren sich auch jetzt noch häufig nicht bei einer zentralen Anwendungsliste. In einer solchen Situation ist es für eine Anwendung im Allgemeinen besser, ein "eigenes" Verzeichnis für so viele Dateien wie möglich zu haben. Dies hilft, Konflikte mit anderen Anwendungen zu vermeiden, obwohl dies nicht immer funktioniert (insbesondere bei DLLs ).

Unix-Systeme hingegen haben seit den 90er Jahren im Allgemeinen jeweils einen einzigen akzeptierten Paketmanager und eine Gruppe, die über diesen Paketmanager eine große Menge häufig verwendeter Software bereitstellt. (Offizielle Paketmanager für verschiedene Unices umfassen yumund aptfür Linux-Systeme, pkgsrcfür NetBSD und portsfür FreeBSD. Häufig verfügen kommerzielle Unix-Systeme auch über einen inoffiziellen, aber weithin akzeptierten Paketmanager, z. B. brewfür MacOS.)

Diese Paketmanager haben den Vorteil, dass sie jede Datei auf dem System in den verschiedenen Unterverzeichnissen verfolgen können, die sie "besitzen". Da eine einzelne Gruppe hier den Namen und den Speicherort jeder Datei zuweist, können sie alle einen kleinen Satz von Verzeichnissen verwenden, die von ihnen gemeinsam genutzt werden. Dies bietet verschiedene Vorteile, insbesondere in den Bereichen der gemeinsamen Nutzung von Dateien zwischen Anwendungen und der Verringerung der Anzahl der Pfade, die Sie für die Suche nach Bibliotheken und ausführbaren Dateien benötigen.

Trotzdem gibt es eine lange Tradition der Installation von "Separates Verzeichnis pro Anwendung" auch unter Unix, normalerweise unter dem /optVerzeichnis.

cjs
quelle