Wie kann ich über die Befehlszeile eine Liste aller Pakete in einem Repository-Abschnitt abrufen?

13

In Synaptic kann man Pakete nach Abschnitten auflisten. Im Bild unten sind beispielsweise alle Pakete des Abschnitts "Amateurfunk (Universum)" aufgelistet.

Wie kann ich eine solche Liste (edit: with package description) in der Kommandozeile bekommen?

Ich brauche eine rohe Liste. eine Terminalanwendung wie aptitudegeht nicht.

synaptisch

Serge Stroobandt
quelle
Apt-Cache-Suche Muscheln
Panther
@ bodhi.zazen , dass ein guter Vorschlag ist, aber der Abschnitt nicht nur suchen
Steven Penny

Antworten:

5

Nun, obwohl Sie sagen, dass Sie aptitude wegen der Ausgabe nicht verwenden möchten, müssen Sie wissen, dass Sie es modifizieren können, um das zu bekommen, was Ihnen gefällt:

aptitude -F'|%p|%d|' search '?section(hamradio)'

Der Trick liegt in dem -FSchalter, der das Ausgabeformat ändert. %pbedeutet Paket. Dies wird auch ausgegeben, wenn das Paket verschiedene Architekturen hat (dh amd64 vs i386) und %ddie Beschreibung ausgibt. Sie können das Suchmuster noch weiter personalisieren, um beispielsweise nicht installierte Pakete zu finden:

aptitude -F'|%p|%d|' search '?section(hamradio) !~i'

wo ~iMittel installiert und das !ist ein nicht, so dass es als „nicht installiert (~ i) (!)“ liest, oder wenn Sie nur die , die wollen, die für Ihre Architektur verfügbar sind:

aptitude -F'|%p|%d|' search '?section(hamradio) ~r native'

~rSein, ?architecture()das mit der Architektur des Pakets übereinstimmt und nativenur diejenigen auflistet, die dieselbe Architektur wie das System haben, das Äquivalent zu dpkg --print-architecture.

Die vorherige Zeile kann daher noch prägnanter geschrieben werden als:

aptitude -F'|%p|%d|' search '~s hamradio ~r native'
Braiam
quelle
Sehr elegant, besonders mit -F'|%p|%d|'. Ist es jedoch möglich, die :i386Pakete nicht !aufzulisten, indem der searchZeichenfolge ein Ausdruck hinzugefügt wird ?
Serge Stroobandt
1
@ GinGordon ja, nur ~r nativezu den Suchbegriffen hinzufügen . ~rwobei, ?architecturewelche der Architektur des Pakets entsprechen und nativewelche nur diejenigen auflisten, die dieselbe Architektur wie das System haben, das Äquivalent zu dpkg --print-architecture. Übrigens, Sie wollten die Liste mit der Paketbeschreibung?
Braiam
Groß! Und ja, ich habe die Frage so bearbeitet, dass sie eine Paketbeschreibung enthält. Bitte passen Sie Ihre Antwort dementsprechend an und Sie werden verdientermaßen meine beste Antwort erhalten, um die prägnanteste zu sein.
Serge Stroobandt
@ GinGordon check it out.
Braiam
1
@GinGordon Wenn Sie das aptitude-docPaket installieren und /usr/share/doc/aptitude/html/en/index.htmlmit Ihrem Browser zu navigieren, finden Sie in file:///usr/share/doc/aptitude/html/en/ch02s04s05.htmlallen bösen Vergünstigungen.
Braiam
11

Stellen Sie sicher, dass das Installieren Sie die dctrl-toolsPaket dctrl-tools installiert ist. Es bietet nützliche Befehle zum Durchsuchen der Paketlisten apt und dpkg. Um eine vollständige Beschreibung aller Pakete aus einem bestimmten Abschnitt zu erhalten, die mit apt installiert werden können, führen Sie Folgendes aus

grep-aptavail -F Section hamradio

Dadurch werden die vollständigen Paketmetadaten für jedes Paket in diesem hamradioAbschnitt angezeigt. Wenn Sie nur die Paketnamen sehen möchten, führen Sie den Befehl aus

grep-aptavail -n -F Section -s Package hamradio

Wenn Ihr System für Multiarch eingerichtet ist, wird dasselbe Paket in dieser Auflistung möglicherweise mehrmals angezeigt, wenn es für mehr als eine Architektur erstellt wurde. Um dies weiter zu verfeinern, verwenden Sie entweder

grep-aptavail -n -F Section -s Package hamradio | sort | uniq

oder

grep-aptavail -n -F Section -s Package hamradio | sort -u

um die Paketliste zu sortieren und doppelte Pakete mit demselben Namen zu entfernen.

Beachten Sie, dass Sie den tatsächlichen Namen des Abschnitts verwenden müssen, der sich vom "lesbaren" Namen unterscheidet, den Synaptic in seiner Benutzeroberfläche anzeigt. Bei den obigen Suchen wird beispielsweise der Abschnittsname hamradioanstelle der in Synaptic angezeigten Zeichenfolge "Amateurfunk" verwendet.

In der Manpage für grep-aptavail finden Sie eine vollständige Beschreibung aller Optionen und einige Beispiele.

Mike Miller
quelle
3

Weitere Felder in einer Zeile mit beliebigem Trennzeichen

Der folgende Einzeiler gibt alle eindeutigen Paketnamen eines Repository-Abschnitts zusammen mit ihrer Beschreibung in einer einzelnen Zeile aus. Alle Felder sind durch ein Pipe-Zeichen getrennt, dh bereit zur Umwandlung in eine Markdown-Pipe-Tabelle . Die resultierende Tabelle kann auf meiner Web site gefunden werden.

grep-aptavail -n -s Package,Description -F Section hamradio |paste -sd '||\n' |sed 's:^:|:' |sort -u
Serge Stroobandt
quelle
2

Mit dem folgenden Befehl können Sie eine Liste der Pakete abrufen, die zu einem bestimmten Abschnitt gehören:

$ dpkg-query -W -f='${binary:Package} ${Section}\n' | awk '{if ($2 == "shells") {print $1}}'
bash
bash-completion
busybox-initramfs
busybox-static
dash
zsh
zsh-common
Sylvain Pineau
quelle