Warum leben so viele Programme in PATH?


10

Eine Sache, die mich zumindest an Desktop-Linux verwirrt, ist, dass fast alles in meinem PFAD ist. Mit allem meine ich jede Desktop-Anwendung, einschließlich Dinge wie Gnome-Character-Map und Glchess. Diese haben keine nennenswerten Befehlszeilenschnittstellen, daher kann ich mir keinen Fall vorstellen, in dem ich diese regelmäßig von einem Terminal aus starten würde - und in diesem unwahrscheinlichen Fall kann ich mir nicht vorstellen, unangenehm zu sein, wenn ich sie vollständig eingeben muss Wege. Es scheint nur unübersichtlich, aber vielleicht gibt es einen guten Grund.

Also, warum ist dies geschehen? Gibt es bemerkenswerte Auswirkungen auf die Leistung oder Wartbarkeit?

Antworten:


14

Alle Befehle, die ein Benutzer möglicherweise ausführen möchte, befinden sich im PFAD. Dafür ist es da. Dies umfasst Befehle, die Sie direkt ausführen, Befehle, die andere Personen direkt ausführen, und Befehle, die Sie oder andere Personen indirekt ausführen, weil sie von anderen Befehlen aufgerufen werden. Dies ist nicht auf Befehle beschränkt, die von einem Terminal ausgeführt werden: Befehle, die von einer GUI ausgeführt werden, werden auch im Befehlssuchpfad gesucht (auch hierfür).

Es wäre schrecklich, den vollständigen Pfad eingeben zu müssen: Sie müssten herausfinden, was der vollständige Pfad ist! Sie müssen nachverfolgen, ob es sich in /usr/bin(das die meisten mit dem Betriebssystem gelieferten /usr/local/binProgramme enthält ) oder in (das vom Administrator manuell installierte Programme sowie Programme enthält, die bei einigen nicht Teil des Kernbetriebssystems sind) befindet Unix-Varianten) oder in einem anderen systemspezifischen Verzeichnis oder irgendwo im Home-Verzeichnis des Benutzers.

Es ist schwierig, über die „Auswirkungen auf die Leistung oder Wartbarkeit“ zu antworten, da Sie nicht sagen, womit Sie es vergleichen. Wenn Sie vergleichen, dass Sie überall den vollständigen Pfad eingeben müssen, ist dies ein Albtraum für die Wartbarkeit: Wenn Sie jemals ein Programm verschieben oder eine neuere Version installieren möchten, als die, die mit dem Betriebssystem geliefert wurde oder von einem Systemadministrator installiert wurde, Sie müssen diesen vollständigen Pfad überall ersetzen. Die Auswirkungen der Suche nach dem Namen in einigen Verzeichnissen auf die Leistung sind vernachlässigbar.

Wenn Sie mit Windows vergleichen, ist es noch schlimmer: Einige Programme fügen dem PATH nicht nur die ausführbare Datei, sondern auch alle Arten von Mist hinzu, und Sie erhalten eine kilometerlange PATHVariable, die immer noch nicht alle Programme enthält, weil Viele Programme fügen sich bei der Installation nicht zum Systempfad hinzu.


Das sieht nach einer ziemlich rationalen Begründung aus. Vielen Dank für die Erklärung! Das Ersetzen eines Programms ist sehr sinnvoll. Ich hatte überhaupt nicht darüber nachgedacht :) Der Teil, der mir dabei auffällt, ist, dass ich gerne kleine und beschreibende Namespaces habe, wenn ich über Programmierung nachdenke, während hier alles irgendwie im selben globalen Namespace liegt (und wenn wir das tun) Schauen Sie sich die vollständigen Pfade an ziemlich unscheinbaren Stellen wie * / bin) an. Ich denke, das sind ziemlich unterschiedliche Dinge.
Dylan McCall

4

Die Variable PATH enthält eine Liste von Verzeichnispfaden. Wenn der Benutzer einen Befehl eingibt, ohne den vollständigen Pfad anzugeben, wird diese Liste überprüft, wenn sie einen Pfad enthält, der zum Befehl führt. Es gibt nichts von Natur aus Terminal- oder Befehlszeilenspezifisches.

Darüber hinaus gibt es auch nichts Desktop Linux-spezifisches. Der PATH von meinem XP-System enthält % SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem, der wahrscheinlich die meisten Windows-Binärdateien abdeckt.

Die Verzeichnisse in PATH werden in der angegebenen Reihenfolge durchsucht und angehalten, sobald eine Übereinstimmung gefunden wird. Systemverzeichnisse stehen normalerweise am Anfang, um ihnen die höchste Priorität zu geben. Benutzer sollten am Ende benutzerdefinierte Suchpfade anhängen.

Was die Leistung betrifft: Die meisten modernen Shells speichern den Inhalt von PATH zwischen, sodass sie die Festplatte nicht jedes Mal scannen müssen, wenn der Benutzer einen Befehl eingibt.


Der Windows-Pfad deckt die meisten mit Windows gelieferten Binärdateien ab, aber normale Anwendungen, die Sie installieren, sind normalerweise nicht im Pfad enthalten. (Nun, Apps mit einer Befehlszeilenkomponente fügen sich PATH hinzu, aber nur GUI-Apps normalerweise nicht.)
cjm

Cool, ich habe immer über die Reihenfolge und ihre Bedeutung nachgedacht. Wie wäre es mit einer Faustregel? Ich habe (fast) jede Kombination von usr, local, binund sbin(mein Benutzerverzeichnis ohne).
Emanuel Berg
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.