Wo ist installierte Software unter Linux gespeichert? [Duplikat]

11

Mögliches Duplizieren:
Wo ist ein typisches Linux-Programm installiert?

Ich bin neu in Linux und möchte ein bisschen mehr über Pakete fragen.

Unter Windows lade ich eine .exeDatei herunter und installiere sie. Bei der Installation definiere ich den Pfad, in dem diese Anwendung gespeichert werden soll. In diesem Ordner befinden sich alle für die Anwendung erforderlichen Dateien.

Wenn ich jedoch ein Paket unter Linux mit yumoder apt-getinstalliere, weiß ich nicht, wo das Paket installiert ist und wo die erforderlichen Dateien für diese Anwendung gespeichert sind. Ich habe gesehen, dass sich die meisten Konfigurationen im /etcVerzeichnis befinden. Aber warum speichert Linux die erforderlichen Dateien für eine Anwendung in verschiedenen Verzeichnissen?

Kann mir jemand sagen, wie Pakete installiert sind und wo und wie sie gespeichert werden? Und wenn mein Verständnis der Paketverwaltung falsch ist, korrigieren Sie mich bitte.

Gemeinschaft
quelle
Wenn Ihre Distribution verwendet rpm, können rpm -q --whatprovidesSie den Paketnamen für eine bestimmte Datei ermitteln und dann rpm -q -aherausfinden, welche Dateien ein Paket installiert hat.
David Schwartz
Mit apt-get, wenn das Paket installiert ist, verwenden Sie dpkg -L PKGNAME, wenn es nicht verwendet wird apt-file list.
Thor

Antworten:

14

Wie Sie bereits bemerkt haben, landen viele Programme (die Binärdateien / Skripte) in /binoder /usr/binmit anderen Teilen in verschiedenen Konfigurationsverzeichnissen (häufig in / unter etc).

Für jeden bestimmten Befehl können Sie whereis auschecken

whereis prog_name

und es gibt Ihnen einige Informationen darüber, wo sich dieser Befehl befindet. Sie können auch versuchen, welche

which prog_name

Auch diese Grafik und Erklärung / Beispiele könnten hilfreich sein.

Levon
quelle
1
+1 für whereis - sehr nützlich für Linux-
aber warum nur die Konfiguration in einem separaten Verzeichnis gespeichert?
@KOU Ich kenne den Verlauf nicht, aber es könnte sein, dass Programme aktualisiert werden können, ohne die Konfigurationsinformationen zu verfälschen, da sie sich in einem anderen Verzeichnis befinden würden. Auf diese Weise können verschiedene Versionen dieselben Konfigurationsinformationen verwenden (vorausgesetzt, das Format usw. wurde nicht geändert, dh es ist kompatibel). Ich vermute hier nur. Sie müssten die Geschichte des Unix / Linux-Dateisystems recherchieren, um eine eindeutige Antwort zu erhalten.
Levon
1
Ich bin mir nicht sicher, in welchem ​​Verlauf die Entscheidung getroffen wurde, alle systemweiten Konfigurationsdateien abzulegen /etc/, aber ein zentraler Speicherort für Konfigurationsdateien macht es sehr einfach, sie zu sichern. (Stellen Sie sich vor, Sie sichern systemweite Konfigurationsdateien in Windows, wo sie über das gesamte Dateisystem und die Registrierung verteilt sind ...)
Li-aung Yip
@ Li-aungYip Guter Punkt
Levon
5

Unter Windows, insbesondere in älteren Versionen, war es üblich, dass Programme Konfigurationsdateien und nicht konstante Daten in ihrem C:\Program FilesVerzeichnis speichern . Dies ergibt sich aus der Art und Weise, wie Programme normalerweise unter DOS für Einzelbenutzer ohne Netzwerk und ohne Dateiberechtigung installiert und ausgeführt wurden.

Aus Sicherheitsgründen ist dies eine schlechte Idee. Orte, an denen ausführbarer Code lebt, sollten von veränderbaren Daten getrennt werden. Auf diese Weise ist es einfacher, geeignete Dateiberechtigungen anzuwenden, um zu verhindern, dass nicht autorisierte Benutzer Änderungen an installierten Binärdateien vornehmen. Ebenso sollten sich Bibliotheksverzeichnisse, die möglicherweise getrennt von den ausführbaren Hauptdateien aktualisiert werden, in einem separaten Verzeichnis befinden.

Mit dem Aufkommen von Vista und UAC-Ärgernissen verliert diese Tradition endlich ernsthaft an Traktion.

UNIX und Linux, die von Anfang an ein Mehrbenutzersystem waren, hatten die Tendenz, ausführbare Verzeichnisse viel früher von anderen Verzeichnissen zu trennen, da andere Benutzer als root daran gehindert werden mussten, installierte Binärdateien zu ändern. Dies ist auch der Grund /usrund /sbinmanchmal sogar separate Partitionen. Ein besonders sicherheitsbewusster Administrator kann diese Partitionen schreibgeschützt bereitstellen und sie beim Lesen / Schreiben erneut bereitstellen, wenn eine Installation / Deinstallation erforderlich ist.

Pakete werden normalerweise von einem Paketmanager installiert. Es gibt verschiedene Paketmanager wie aptitude(Debian und abgeleitete Distributionen), yum(Redhat und abgeleitete Distributionen), pacman(vergessen Sie, welche Distribution dies ist ...) und andere.

Mit dem Paketmanager können Sie Repositorys durchsuchen, Software herunterladen, installieren, abfragen und entfernen, ähnlich wie in einem hoch entwickelten (und kostenlosen) "App Store". Es übernimmt die Verantwortung dafür, dass Abhängigkeiten berücksichtigt werden und verfolgt wird, was aktuell installiert ist.

Normalerweise erlaubt der Paketmanager dieselben Vorgänge auch für ein Paket, das Sie manuell außerhalb von Repositorys heruntergeladen haben. Tools sind auch verfügbar, wenn Sie Ihre eigene Software erstellen möchten, die Sie selbst erstellt oder kompiliert haben.

Da das Paket selbst KEINE ausführbare Datei ist, müssen Sie keine nicht vertrauenswürdige ausführbare Datei ausführen, von der Sie nicht wirklich wissen, was sie tut. (Windows kommt endlich mit Updates durch das Verteilen von .msu's anstelle von .exe' s - aber es .msigibt schon eine Weile ...)

LawrenceC
quelle
1
Re. Pacman, es ist für Arch Linux .
2

Sie können eine Liste der Dateien abrufen, die ein bestimmtes yumPaket installiert, indem Sie Folgendes tun:

yum install yum-utils

Dann können Sie es so ausführen:

repoquery --list yum-utils

(Ersetzen Sie natürlich "yum-utils" in diesem zweiten durch den Namen des Pakets, dessen Dateiliste Sie sehen möchten.)

Für apt-getkönnen Sie verwenden:

dpkg -L package-name
sblom
quelle
1

In der Regel unter /usr/bin, obwohl dies von der jeweiligen Anwendung oder Bibliothek abhängt, die Sie installieren.

kprobst
quelle
1

Unter Linux / Unix landen die meisten Programme normalerweise nicht in einem einzigen Verzeichnis, aber verschiedene Teile davon (ausführbare Dateien, Konfigurationsdateien, Protokolldateien, Dokumentation, andere Ressourcen) sind über das Dateisystem verteilt - normalerweise durch Symlinking. Der Wikipedia-Artikel beschreibt detaillierter die Standardverzeichnisstruktur unter einer normalen Dateisystemhierarchie und zeigt die verschiedenen Verzeichnisse und was Sie in jedem erwarten können.

mgibsonbr
quelle
0

Das /optVerzeichnis ist für Windows-ähnliche Installationen reserviert, bei denen jedes Paket einen eigenen Verzeichnisbaum hat. Niemand benutzt es. Ich bin mir nicht sicher warum; Es kann sein, dass das Hinzufügen /opt/PACKAGE/binzu $PATHjedem, wenn Sie ein Paket installieren, einfach zu ärgerlich ist.

Alan Curry
quelle
/optscheint hauptsächlich von kommerziellen / nicht freien Softwarepaketen wie MATLAB verwendet zu werden.
Li-aung Yip
Auf meinem Ubuntu 12.04 wird Google Chrome installiert, /optaber auch LibreOffice 3.5, das ich direkt von hier aus installiert habe .
0

Software unter Linux unterscheidet sich im Paradigma ein wenig von Windows oder Mac. In diesen werden eine ausführbare Datei und alle unterstützenden Dateien in einem einzigen Ordner installiert: Windows speichert sie normalerweise c:\Program Files\program name, Apple in /Applications/program.app. Unter Linux gibt es eine mehr ... kommunale Struktur. Die Binärdateien befinden sich im Allgemeinen in /usr/bin, die systemweite Konfiguration befindet sich in /etc, die benutzerspezifische Konfiguration befindet sich normalerweise in ~/.program. Bibliotheken sind vorhanden /usr/lib, unterstützende Dateien (z. B. Grafiken) befinden sich häufig /usr/share/programusw. Es gibt sogar einen Standard, der vorschlägt, wohin die Dinge gehen sollen.

Programme werden in der Regel durch Paket - Manager installiert ist , rpmund dpkg; sie werden automatisch gesucht und abgerufen werden (einschließlich Abhängigkeitsmanagement) durch yumund aptitude/ apt-getsind. Auf einer technischeren Ebene sind die Pakete einfache komprimierte Dateien (ich glaube, rpm und deb sind beide .tar.gz). Diese Archive enthalten einen Spiegel der Teile des Dateisystems vom Stammverzeichnis, in dem sich die Dateien befinden (z. B. befindet sich eine Datei, auf der installiert /usr/bin/programwerden soll, usr/bin/programunter dem entsprechenden Ordner im Paket.

Verwenden Sie den Paketmanager für Ihr System, um Informationen zu einem bestimmten Paket zu erhalten, wie andere hier erläutert haben.

Kevin
quelle
0

Die hier Manpage kann einige Einblicke geben

AnonymousLurker
quelle
2
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert.
MaQleod
@MaQleod Wenn Sie befürchten, dass der Link ungültig wird, habe ich ihn nur der Einfachheit halber verlinkt. Ich könnte einfach "man hier" im Klartext schreiben, da Sie diese Manpage in jeder Mainstream-Linux-Distribution finden können, denke ich.
AnonymousLurker
2
"siehe Handbuch" ist auch keine angemessene Antwort, es ist ein Kommentar. Antworten sollten die Frage tatsächlich beantworten. Wie beantwortet dies die gestellte Frage? Wie ist die Hierarchieliste von Bedeutung? Warum sollte das OP (oder jemand anderes) diese Antwort als bemerkenswert betrachten? Kopieren Sie die relevanten Teile des Links (oder der Manpage) und erklären Sie, warum sie im Kontext der Frage von Bedeutung sind. Dann haben Sie die Frage beantwortet und nicht einfach einen Kommentar abgegeben.
MaQleod