Anzahl installierter Pakete eleganter ermitteln?

Started by Geier0815, 2017/11/30, 13:45:11

Previous topic - Next topic

Geier0815

Moin Moin,

gibt es per dpkg oder apt eine Möglichkeit die Anzahl der installierten Pakete zu ermitteln?

dpkg -l | awk '{print $2}' | wc -l
funktioniert zwar, ist aber mMn nicht sonderlich elegant. Da wird es doch sicherlich eine Möglichkeit direkt aus apt oder dpkg heraus geben die ich nur übersehen habe.
Wenn Windows die Lösung ist...
kann ich dann bitte das Problem zurück haben?

bluelupo

Wie wär's etwas kürzer mit.....


# apt-show-versions | wc -l


...wahlweise noch ein Alias basteln (in .bashrc).


lspkg='apt-show-versions | wc -l'


...dann spart man sich Tipparbeit ;-)

whistler_mb

Auch wenn mich die Anzahl der installierten Pakete bisher nicht interessiert hat  ;)  habe ich das mal ausprobiert und bin darüber verwundert, dass ich, je nach Befehl, unterschiedliche Werte erhalte.

$ dpkg -l | awk '{print $2}' | wc -l
4756

$ apt-show-versions | wc -l
6656

$ apt list --installed | wc -l

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

3863


In Synaptic steht, dass bei mir 4141 Pakete installiert sind.

Bei dem Befehl von bluelupo ist mir dann aufgefallen, dass dort sowohl installierte, als auch nicht installierte Pakete aufgezählt werden. Wenn ich die Anzahl der nicht installierten Pakete ermittle.
$ apt-show-versions | grep "not installed" | wc -l
2515


und diese dann von der zuert ermittelten Zahl abziehe, komme ich auf den Wert, der mir Synaptic anzeigt.
6656 - 2515 = 4141

pit

Bei mir wirft apt-show-versions auch solche Zeilen aus (Beispiel):
yakuake:i386 not installed

Also vielleicht besser:

apt-show-versions | grep -v "not installed" | wc -l

Oder gleich so:

dpkg -l | grep '^ii' | wc -l

Variante 2 ergibt bei mir eine etwas geringere Anzahl. Daraus schließe ich, dass die Liste aus Variante 1 noch mehr irrelevantes Zeugs enthält.

whistler_mb

@pit

bei mir kommt bei deinen beiden Befehlen das gleiche raus

bluelupo

Obiges Beispiel von mir war nicht korrekt. Diese Befehlsvarianten liefern alle das gleiche Ergebnis bei mir.


# Warning Ausgabe von "apt list" nicht anzeigen und Zeilen suchen die Klammerpaare von der Sorte [] enthalten
# apt list --installed 2>&1|egrep '(\[.*\])'|wc -l
2177

# Ausgabe ab Zeile 7 (vorher nur Headerzeilen)
# dpkg -l|awk '{if (NR>=7) print $2}'|wc -l
2177

# nur installierte Pakete anzeigen
# apt-show-versions |egrep -vi "not installed"|wc -l
2177


Aber alle Varianten sind im Prinzip gleich "schwierig" zu tippen, daher würde ich das in ein Alias packen.

Penyelam

warum nicht einfach
dpkg -l | wc -l?

an den Zeilen ändert awk ja nichts.

Geier0815

@Penyelam,
hast Recht, kam dadurch das ich beim Testen von dpkg durch ein kleines Terminalfenster Umbrüche gesehen habe und deshalb erst einmal durch awk geschickt habe und dann erst das wc -l dran gehängt habe.

@all,
Bei dpkg -l sollte man wohl erst einmal auf "ii" greppen da man sonst deinstallierte Pakete mit gezählt bekommt (zB Status rc in dpkg). Wobei "ii" auch unsauber ist weil man dann gehaltene Pakete nicht mit zählt, die haben den Status "hi". Also müßte man eigentlich auf die zweite Stelle im ersten Block mit Inhalt "i" greppen.
dpkg -l | awk '{print $1}'| grep "^.i" | wc -l
Das "^" im grep muß sein, da sonst die Zeile "Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig" mitgezählt wird.
Echt nicht trivial und ich bin mir nicht sicher ob ich damit wirklich alle Eventualitäten abgedeckt habe. Von daher wundert es mich das es eine solche Option zum Zählen der installierten Pakete nicht in apt oder dpkg direkt gibt. Es beruhigt mich aber das ich nicht nur zu doof war die zu entdecken.
Und Danke für die anderen Vorschläge an das Problem heran zu gehen!
Wenn Windows die Lösung ist...
kann ich dann bitte das Problem zurück haben?