
Ich suche nach Paketen, die folgende Situationen aufweisen:
- Gelöscht, aber nicht bereinigt
- Installiert, aber nicht konfiguriert
Ich habe Dinge ausprobiert wie
aptitude search '~id'
Und
aptitude search "~iuA"
aber nichts hat funktioniert.
Irgendwelche Ideen?
Update - einer der Befehle funktioniert nicht -
[$] dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | grep ^i[^i]
zsh: no matches found: ^i[^i]
Irgendwelche Ideen, ob zsh oder etwas anderes schuld ist?
Antwort1
Bei Ihren aptitude
Versuchen ist es wichtig zu beachten, dass ~
nicht bedeutet, „nach den folgenden Flags im Status eines Pakets zu suchen“. ~i
ist eine Abkürzung für ~installed
, und dann dasDwird wörtlich interpretiertD, d. h. Pakete, deren Namen den Buchstaben enthaltenDaptitude
. Ich habe die Dokumentation für ( /usr/share/doc/aptitude/html/en/index.html
auf meinem System) nach einem Suchmuster durchgesehen , das Ihre Frage beantworten würde, aber ich bin nicht sicher, ob das möglich ist. ~action
Vielleicht kommen Sie damit schon zur Hälfte ans Ziel, aber ich bin mir nicht sicher, ob ich auch den Status bekomme.
Eine Alternative zur Verwendung aptitude
ist die Verwendung dpkg-query
mit grep
.
dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | grep ^r
Dadurch werden Pakete gesucht, die sich imENTFERNTZustand, aber nicht gelöscht.
dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | grep ^i[^i]
Dadurch werden Pakete gesucht, die alsEingerichtet, sind aber nicht vollständig installiert. Wenn Sie keine Pakete einschließen möchten, die auf Trigger warten, können Sie ^i[ncHUF]
stattdessen verwenden.
Um nur die zweite Spalte der Ausgabe (den Paketnamen) zu erhalten, können Sie Folgendes verwenden sed
:
dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | sed -n 's/^r.R\?\s*//p'
um entfernte Pakete zu finden und
dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | sed -n 's/^i[^i]R\?\s*//p'
um Pakete zu finden, die installiert werden sollen, aber noch nicht vollständig installiert sind.
Um dies etwas weiter auszuführen: Der „Status“ von Debian-Paketen besteht aus zwei Teilen:
DerAktionan einem Paket durchgeführt werden soll. Dies kann sein,Installierenein Paket, umentfernenein Paket, umhaltenein Paket odersäubernein Paket.
DerPaket Status, das den tatsächlichen Status des Pakets auf Ihrem System beschreibt.
Der obige dpkg-query
Aufruf listet die Aktion und den Status eines Pakets (jeweils ein Zeichen) vor dem Paketnamen am Anfang jeder Zeile auf.
Um Pakete zu finden, die entfernt, aber nicht gelöscht wurden, suchen wir einfach nach Paketen mit der Aktion „Entfernen“: grep ^r
. Um Pakete zu finden, die installiert sind oder installiert werden sollen, aber noch nicht konfiguriert sind, suchen wir nach Paketen, derenAktionIstInstallieren, deren Status jedoch etwas anderes ist alsEingerichtet: grep ^i[^i]
.
Antwort2
Gelöscht, aber nicht bereinigt ist ~c
( ?config-files
).
Installiert, aber nicht konfiguriert wird nicht von apt verfolgt, nur von dpkg. Ein Paket hat zwei Zustände: tatsächlich und gewünscht. Apt interessiert sich nur für den gewünschten Zustand. Der gewünschte Zustand eines Pakets, das installiert, aber nicht konfiguriert ist, ist installiert.
SehenDylan Freses Antwortfür die Dpkg-Abfragen.