Listen Sie (rekursive) Abhängigkeiten der installierten Pakete in APT auf

17

Für jedes Paket, das ich installiert habe, möchte ich wissen, welche Pakete installiert werden, wenn ich es deinstalliere. Ein Beispiel für die Ausgabe, die ich brauche, ist ( package: list of deps):

abc: foo bar
bcd: baz abc
bdd: baz fuubar

Anhängen

Wenn ich überprüfe, was wirklich entfernt werden würde, wenn ich das Paket pppmit entferne apt-get:

$ echo $(apt-get --dry-run remove ppp | grep '^Remv ' | cut -d' ' -f2)
gnome-ppp mint-meta-xfce network-manager-pptp-gnome network-manager-pptp wvdial pppoeconf pppoe pptp-linux pppconfig ppp

Ich sehe, dass es sich von dem unterscheidet, was apt-cachemir die Show gibt (was ich nicht für rekursive Abhängigkeiten halte):

$ apt-cache show ppp | grep '^Breaks: '
Breaks: network-manager (<= 0.8.0.999-1), network-manager-pptp (<= 0.8.0.999-1), pppdcapiplugin (<= 1:3.9.20060704+dfsg.1-1)

2 anhängen

Ist es dpkg --get-selections | cut -f1eine zuverlässige Möglichkeit, eine Liste der installierten Pakete abzurufen, über die iteriert werden soll?

Gelöscht
quelle
1
Das Parsen apt-get --dry-run removesieht im Grunde richtig aus. Möglicherweise fehlen einige automatisch installierte Pakete, die nur für automatisch installierte Pakete benötigt werden, die nur von dem Paket benötigt werden, das Sie entfernen. Halten Sie es deshalb nicht für eine passende Antwort?
Gilles 'SO - hör auf, böse zu sein'

Antworten:

11

Du hast hier ein paar andere Fragen gestellt, ich hoffe, ich kann wenigstens bei einer oder zwei helfen.

Verwenden Sie, dpkgum alle installierten Pakete aufzulisten und in einer feldgetrennten Liste auszugeben

dpkg -l 

Um nur die Paketliste ohne zusätzliche Felder abzurufen, können Sie sie an eine andere Stelle weiterleiten.

dpkg -l | awk '{print $2 }' # Pipe to grep after the awk, or glob from dpkg

Wenn ich zum Beispiel einen alten Kernel entfernen möchte,

apt-get purge `dpkg -l linux* | awk '{print $2}' | grep 3.0.0-12`

Der einfachste Weg, alle nicht benötigten Abhängigkeiten zu durchlaufen, ist mit debfoster. Es läuft interaktiv und geht durch, was Sie wollen, ihre Abhängigkeiten und kann entfernen oder auflisten, was keine rekursive Abhängigkeit ist.

Um alle rekursiven Abhängigkeiten eines bestimmten Pakets aufzulisten,

debfoster -d $PACKAGE ## PACKAGE is the specific package.

Nachdem Sie ausgeführt haben debfoster, können Sie alle Abhängigkeiten überprüfen, die ein Paket auch hat,

debfoster -e $PACKAGE ## PACKAGE is the specific package.

Eine wirklich gute Möglichkeit, verwaiste Pakete aufzulisten, ist mit deborphan. Führen deborphanohne Optionen, und es werden alle ‚verwaiste‘ Pakete aufzulisten. Ein 'Orphan' ist ein Paket, von dem nichts abhängt und das Sie nicht explizit installiert haben.

Ich mag es auch, verwaiste Pakete nach einer Neuinstallation zu säubern. Nachdem ich bestimmte Pakete entfernt habe, können Sie apt-get autoremove --purgemit

apt-get purge `deborphan`

Schließlich kann es vorkommen --purge, dass das Paket "Reste" nicht mehr vorhanden ist und von den neueren Versionen apt-getautomatisch entfernt wird. Um alle "Reste" aus deinstallierten Paketen zu entfernen, führen Sie

apt-get autoclean

Wenn Sie nicht über die neue Version von verfügen apt-get, können Sie diese jederzeit mit diesen Befehlen entfernen. Sie sind fehlerhaft, wenn keine 'übrig gebliebenen' Dateien vorhanden sind. Es scheint, dass Autoclean gelegentlich Fehler machen kann.

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs dpkg --purge
JM Becker
quelle
debfoster existiert immer noch, wird aber von Merkmalen in Eignung abgelöst
Joshua Clayton
4
apt-cache show pkgname1 pkgname2...

listet (unter anderem) diese (Laufzeit-) Abhängigkeiten auf. Dies ist normalerweise ausreichend, es sei denn, Sie führen es einer Maschine zur weiteren Verarbeitung zu. Wenn Sie es genau in dem von Ihnen angegebenen Format haben möchten, müssen Sie wahrscheinlich ein Skript schreiben.

Faheem Mitha
quelle
Entschuldigung, ich habe meine Frage falsch formuliert. Ich möchte wissen, welche Pakete für jedes von mir installierte Paket deinstalliert werden. Außerdem muss ich alle Pakete auflisten, die ich installiert habe.
Gelöscht am
2
@ Gelöscht: Entschuldigung, diesen Kommentar habe ich bisher nicht gesehen. Als Antwort auf "Welche Pakete werden für jedes von mir installierte Paket deinstalliert?" (Ich gehe davon aus, dass Sie diese Frage paketweise beantworten möchten) versuchen Sie es apt-get remove -s packagename. Das Auflisten aller installierten Pakete ist nur dpkg -l.
Faheem Mitha
@FaheemMitha: alter Beitrag, aber trotzdem toller Tipp weiter apt-get remove -s packagename!
Twan163
@ Twan163 Glücklich, es war nützlich für Sie.
Faheem Mitha
1

Ich denke, Sie müssen fortfahren und eine Schleife für die gleiche Sache erstellen:

apt-cache depends libtext-wrapi18n-perl |xargs apt-cache depends

Natürlich Header entfernen.

Persischer Golf
quelle
2
Apt-Cache hängt hat eine Wiederherstellungsoptionapt-cache depends --recurse libtext
Joshua Clayton