Kann ich sehen, warum ein Paket installiert ist?

112

Kann ich für ein bestimmtes Paket herausfinden, warum es installiert ist?

Kann ich also sehen, ob es manuell installiert wurde oder ob es als Abhängigkeit von einem anderen Paket installiert wurde? Oder dass es als Teil der Distribution installiert ist?

Peter Smit
quelle
Dies hängt mit dieser Frage zusammen (ein Teil davon). Weitere Informationen finden Sie in dieser Antwort .
Koushik
Viel bessere Antwort für 2017 hier: askubuntu.com/questions/128524/…
Lambart

Antworten:

107

Eine schnelle Lösung besteht darin, den folgenden Befehl in ein Terminal einzugeben:

aptitude why $package

oder, wenn Sie sich nur für die ultimative Sache interessieren:

aptitude why $package --show-summary

Ersetzen Sie $ package durch den Namen des aptitudePakets. Möglicherweise müssen Sie das Paket zuerst installieren .

Hier ist die Ausgabe, für die Sie möglicherweise erhalten aptitude why aspell --show-summary

Packages requiring aspell:
  inkscape

Für mehr Details würden Sie laufen aptitude why aspell. Sie können die folgende Beispielausgabe folgendermaßen lesen: "Sie haben manuell installiert inkscape, was erfordert libgtkspell, was erfordert libenchantic2a, was erfordert aspell". ( iMarkierungen kennzeichnen installierte Pakete; AMarkierungen kennzeichnen automatisch installierte Pakete.)

i   inkscape       Depends libgtkspell0 (>= 2.0.10)                                                                    
i A libgtkspell0   Depends libenchant1c2a (>= 1.6.0)                                                                   
i A libenchant1c2a Depends aspell-en | myspell-dictionary | aspell-dictionary | ispell-dictionary | hunspell-dictionary
i A aspell-en      Depends aspell (>= 0.60.3-2)

Zum Schluss der folgende Befehl

apt-cache rdepends --installed $package

listet die anderen auf Ihrem Computer installierten Pakete auf, die direkt von $ package abhängen . Sie können die --recurseOption hinzufügen , alle Pakete aufzulisten, die direkt oder indirekt davon abhängen.

Enzotib
quelle
Schade, dass aptitude nicht standardmäßig enthalten ist :(
badp
1
@badp danke darauf hinzuweisen. Dies ist die schlechte Neuerung bei Maverick, nur um Platz auf dem Live-CD-ISO-Image zu sparen. Aber es ist ein unschätzbares Werkzeug, auf das ich nicht verzichten werde.
Enzotib
15
apt-cache rdepends --recurse $packagewahrscheinlich gibt es zu viele pakete. Ich würde --installedOption hinzufügen , um auf installierte Pakete zu beschränken. -iOption beschränkt sich auf Pakete im Zusammenhang mit Präabhängigkeit und Abhängigkeit. Möglicherweise wird jedoch ein Paket installiert, da es von einem anderen Paket empfohlen wird. Um solche empfehlungsbezogenen Pakete einzuschließen, würde dies vermutlich die richtigen ergeben:apt-cache rdepends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --installed --recurse $package
jarno
4
Etwas kürzeres Äquivalent zu @ jarnos Beschwörung, vorausgesetzt, Sie befinden sich auf Bash oder einer anderen Shell mit apt-cache rdepends --no-{suggests,conflicts,breaks,replaces,enhances} --installed --recurse $package
Klammererweiterung
30

Eine kurze Begründung, warum ein bestimmtes Paket installiert wurde, finden Sie, indem Sie den folgenden Befehl in ein terminal ( Applications -> Accessories -> Terminal) eingeben :

aptitude why <package-name>

Ersetzen Sie durch den Namen des Pakets, an dem Sie interessiert sind. Wenn Sie beispielsweise aptitude why libgoo-canvas-perlFolgendes eingeben, wird Folgendes ausgegeben:

i   shutter Suggests libgoo-canvas-perl

Dies bedeutet im Grunde, dass das Paket shutterin diesem Fall vorgeschlagen wurde libgoo-canvas-perl, installiert zu werden. Indem aptitude why shutterich dann tippe, kann ich die Abhängigkeitskette hochgehen.

Es gibt jedoch eine Einschränkung. Ich stelle oft fest, dass Eignung die plausibelste Erklärung für die Situation findet, die möglicherweise nicht der tatsächliche Fall ist, Ihnen aber dennoch einen Anhaltspunkt gibt, um weiter zu suchen.

In meinem Fall shutterschlägt vor libgoo-canvas-perl- vorgeschlagene Pakete werden jedoch nicht automatisch standardmäßig installiert. Trotzdem weckt es meine Erinnerung an die "Erfahrung", keine Screenshots bearbeiten zu können, mit shutterdenen ich manuell installieren mussteligbgoo-canvas-perl

Abschließend können Sie feststellen, ob ein Paket automatisch installiert wurde (dh vom Paketverwaltungssystem als obligatorisch festgelegt, indem Sie die Abhängigkeiten und Empfehlungen anderer Pakete prüfen, zu deren Installation Sie aufgefordert haben), indem Sie den folgenden Befehl ausführen.

aptitude show <package-name>

Dies gibt eine Zeile wie die folgende aus (dritte Zeile der Ausgabe):

Automatically installed: no

Für weitere Informationen führen Sie info aptitude(in einem Terminal) oder besuchen Sie die Aptitude-Wiki-Seite

Um herauszufinden, wann ein bestimmtes Paket installiert wurde, gibt es zwei Möglichkeiten:

  1. Synaptic Package Manager führt ein Verlaufsprotokoll aller Aktivitäten. Um die Verlaufsprotokolldatei anzuzeigen, wählen Sie im Menü Datei die Option Verlauf. Sie können nach Install(beachten Sie die Groß- / Kleinschreibung) suchen, um alle Einträge zur Installation aufzulisten. Dies zeigt jedoch nur die Pakete an, die mit Synaptic installiert wurden
  2. Führen Sie den folgenden Befehl in einem Terminal aus. Dadurch werden die dpkg-Protokolle nach Einträgen im Installationsverlauf durchsucht. Es gibt jedoch eine Höchstgrenze für die Aufbewahrung dieser Protokolle. Wenn das gesuchte Paket also vor langer Zeit installiert wurde, wird es möglicherweise nicht gefunden. Weitere Details hier

    zcat -f /var/log/dpkg.log* | grep "\ install\ " | grep -i <package-name>
    
koushik
quelle
1
Wenn Sie herausfinden möchten, wann ein Paket installiert oder aktualisiert wurdezcat -f /var/log/dpkg.log* | grep -i PackageName | egrep “\ install\ |\ upgrade\ “
Chris Good
@ChrisGood: Können Sie Ihren Kommentar ohne Anführungszeichen erneut eingeben, damit er kopiert / eingefügt werden kann?
Dan Dascalescu
1
Vielen Dank für den Hinweis. Mit korrekten Anführungszeichen: zcat -f /var/log/dpkg.log* | grep -i Paketname | egrep "\ install \ | \ upgrade \"
Chris Good
12

Ja, das können Sie, und es ist in der Tat ein ziemlich offensichtlicher Befehl. Vorausgesetzt, Sie haben Aptitude installiert, können Sie einen Terminal-Fenster-Anzeigentyp öffnen:

aptitude why package

Das sollte eine Liste von Paketen geben, die von diesem bestimmten Paket abhängen. Wenn es sich um ein manuell installiertes Paket handelt, wird etwa "Es konnte kein Grund für die Installation des Pakets gefunden werden" angezeigt.

Daniel Rodrigues
quelle
5

Hier ist eine einfache Methode, die nicht mehr von aptitude10.10 abhängt.

Grafisch

Öffnen Sie Synaptic und versuchen Sie es zu entfernen.

Wenn ein Dialogfeld angezeigt wird, in dem Sie aufgefordert werden, andere Pakete zu löschen, hängen diese Pakete (rekursiv) davon ab.

Vom Terminal

apt-get remove package_name_goes_here -s

Wiederum sind die Pakete, die als Ergebnis entfernt würden, alle diejenigen, die (rekursiv) davon abhängen. (Der -sParameter sagt apt-get, dass das Paket nicht entfernt werden soll.)

badp
quelle
2
Dies ist eine riskante Lösung, da das Paket und alle Abhängigkeiten entfernt werden könnten, wenn sie falsch klicken.
ImaginaryRobots
1
@ImaginaryRobots, das ist eine Menge von misclicking. (Sie müssen im ersten Dialogfeld auf OK klicken, dann auf Übernehmen und im Bestätigungsdialog erneut auf OK.) Für die Terminalversion gibt es auch eine zusätzliche y/NBestätigungsanforderung, falls Sie tippen -s. Ich habe jedoch eine Warnung hinzugefügt.
badp
1
-1, da diese Informationen in Synaptic unter der Registerkarte "Abhängigkeiten" verfügbar sind, wenn die Eigenschaften eines Pakets angezeigt werden.
Alexanderpas
@alex falsch - In diesem Dialogfeld wird nicht angegeben, ob das Paket manuell oder automatisch installiert wird. PS: Posteingangszähler zurückgesetzt, stärker versuchen.
Badp
@badp nein, aber diese Informationen finden Sie im Statusfilter "Installiert (manuell)" auf dem Hauptbildschirm. Sie werden im Paketmenü angezeigt, wenn Sie ein Paket auswählen.
Alexanderpas