Come posso ottenere un elenco di tutti i pacchetti in una sezione del repository dalla riga di comando?


13

In Synaptic, è possibile elencare i pacchetti per sezione. Ad esempio, nell'immagine sotto sono elencati tutti i pacchetti della sezione "Radio amatoriale (universo)".

Come posso ottenere un tale elenco (modifica: con descrizione del pacchetto) dalla riga di comando?

Ho bisogno di un elenco non elaborato; un'applicazione terminale come aptitudenon lo farà.

sinaptica


shell di ricerca apt-cache
Panther

@ bodhi.zazen che è un buon suggerimento, ma non cerca solo nella sezione
Steven Penny,

Risposte:


5

Bene, anche se dici che non vuoi usare aptitude a causa dell'output, devi sapere che puoi modificarlo per ottenere quello che ti piace:

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

Il trucco sta nello -Fswitch che modifica il formato di output. %psignifica pacchetto. Questo emette anche quando il pacchetto ha varie architetture (cioè amd64 vs i386) e %dche genera la descrizione. È possibile personalizzare ulteriormente il modello di ricerca, ad esempio per i pacchetti non installati:

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

dove ~isignifica installato e il non !è un, quindi si legge come "non (!) installato (~ i)", o se si desidera solo quelli disponibili per la propria architettura:

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

~ressere ?architecture()che corrisponde all'architettura del pacchetto e nativeche elenca solo quelli che hanno la stessa architettura del sistema, l'equivalente di dpkg --print-architecture.

La riga precedente può quindi essere scritta in modo ancora più conciso come:

aptitude -F'|%p|%d|' search '~s hamradio ~r native'

Molto elegante, soprattutto con -F'|%p|%d|'. Tuttavia, sarebbe possibile non elencare i :i386pacchetti aggiungendo !-expression alla searchstringa?
Serge Stroobandt,

1
@GinGordon sì, basta aggiungere ~r nativei termini di ricerca. ~ressendo ?architectureche corrispondono all'architettura del pacchetto e nativeche elencano solo quelli che hanno la stessa architettura del sistema, l'equivalente di dpkg --print-architecture. A proposito, volevi la lista con la descrizione del pacchetto?
Braiam,

Grande! E sì, ho modificato la domanda per includere la descrizione del pacchetto. Per favore, modifica la tua risposta di conseguenza e riceverai meritatamente il mio voto di risposta migliore per essere il più conciso.
Serge Stroobandt,

@GinGordon dai un'occhiata.
Braiam,

1
@GinGordon se installi il aptitude-docpacchetto e navighi /usr/share/doc/aptitude/html/en/index.htmlcon il tuo browser, troverai file:///usr/share/doc/aptitude/html/en/ch02s04s05.htmltutti i vantaggi negativi.
Braiam,

11

Assicurati che il pacchetto dctrl-toolsInstalla dctrl-tools sia installato. Fornisce comandi utili per la ricerca negli elenchi di pacchetti apt e dpkg. Per ottenere una descrizione completa di tutti i pacchetti da una sezione specifica che è installabile con apt, eseguire

grep-aptavail -F Section hamradio

Questo mostrerà i metadati del pacchetto completo per ogni pacchetto nella hamradiosezione. Se tutto ciò che vuoi vedere sono i nomi dei pacchetti, esegui

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

Se il tuo sistema è configurato per multiarch, lo stesso pacchetto potrebbe comparire più di una volta in questo elenco se è stato creato per più di un'architettura. Quindi, per perfezionare ulteriormente questo, utilizzare uno dei due

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

o

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

per ordinare l'elenco dei pacchetti e rimuovere i pacchetti duplicati con lo stesso nome.

Nota che dovrai usare il nome effettivo della sezione, che è diverso dal nome "leggibile dall'uomo" che Synaptic mostra nella sua GUI. Ad esempio, le ricerche di cui sopra utilizzano il nome della sezione hamradioanziché la stringa "Radio amatoriale" mostrata in Synaptic.

Vedi la pagina man di grep-aptavail per una descrizione completa di tutte le opzioni e alcuni esempi.


3

Più campi su una sola riga, con separatore arbitrario

Il seguente one-liner stamperà tutti i nomi dei pacchetti univoci di una sezione del repository, insieme alla loro descrizione, ciascuno su una sola riga. Tutti i campi sono separati da un carattere pipe, ovvero pronti per la conversione in una tabella pipe Markdown . La tabella risultante è disponibile sul mio sito web.

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

2

È possibile utilizzare il comando seguente per ottenere un elenco di pacchetti appartenenti a una determinata sezione:

$ 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.