Come posso ottenere un elenco di pacchetti disponibili (cioè disinstallati) in Debian?


19

In sostanza quello che sto cercando è l'equivalente Debian di:

yum list available

per mostrarmi quali pacchetti sono disponibili (anche se non attualmente installati). Preferirei qualcosa che può essere eseguito dalla console in quanto si trova su un server remoto. Grazie.

Risposte:


7

grep-dctrle i suoi derivati ​​forniscono un ottimo modo per interrogare i file di cache apt. (Puoi installare questi strumenti su Ubuntu con sudo apt-get install dctrl-tools)

Nel caso di pacchetti disponibili (ma non necessariamente installati), è possibile utilizzare grep-available. Ad esempio, per elencare tutti i pacchetti disponibili:

grep-available  -s Package .

Modificare:

aptitude può mostrarti un elenco di pacchetti non installati semplicemente avviandolo.

Puoi anche ottenere un elenco di pacchetti non installati aptitudeutilizzando:

aptitude -F "%p" search "?not(?installed)"

Nota che con i nuovi pacchetti multi-arch, otterrai pacchetti per altre architetture elencate in questo risultato. Ad esempio, ottengo:

aptitude -F "%p" search "?not(?installed)"  | grep "^bash:"
bash:i386

Ho installato il bashpacchetto, ma è la versione amd64, poiché il mio sistema operativo è installato con la versione amd64 di Ubuntu Precise. Se non si desidera visualizzare questi pacchetti per altre architetture, è possibile escludere righe contenenti ::

aptitude -F "%p" search "?not(?installed)"  | grep -v ':'

Grazie, ma il problema è che dovrei esplorare l'intero elenco dei pacchetti per i repository scelti. Forse un modo migliore per visualizzare il problema sarebbe quindi: immagina che X sia l'insieme universale di tutti i pacchetti nei repository di pacchetti Debian su cui è indicato il mio server e Y che è l'insieme di pacchetti che ho installato su detto server; quello che, in sostanza, cerco è X - Y. Ora, mi rendo conto di poterlo fare programmaticamente, ma speravo che ci sarebbe stato un comando relativamente semplice per ottenere lo stesso risultato su un sistema Debian.
freakwincy,

Ho appena visto la tua risposta modificata. È esattamente quello che stavo cercando! Grazie.
freakwincy,

PS Avrei votato la tua risposta ma non ho ancora accumulato abbastanza punti reputazione.
freakwincy,

Nessun problema. Benvenuti a SU a proposito ;-)
ℝaphink

16

apt-cache è usato per interrogare la cache del pacchetto:

pkgnames apt-cache | ordinare
cosa di ricerca apt-cache
ricerca apt-cache - cosa solo nomi

grazie ma temo che non funzioni. Ho confrontato l'elenco generato dal primo comando con un elenco precedentemente generato di pacchetti installati che ho derivato così: code"dpkg --get-selections | grep '[[: space:]] install $' | awk '{print $ 1}' > installed.txt "e trovato duplicati. Gli altri due comandi che hai fornito non funzioneranno perché non sto cercando un pacchetto particolare, ma piuttosto un pacchetto che non è attualmente installato.
freakwincy,

2

Utilizzare apt-cachea questo scopo:

apt-cache search package

Poiché apt-cacheutilizza solo la cache dei pacchetti sul sistema, assicurarsi che questa cache sia aggiornata:

apt-get update

È inoltre possibile utilizzare l'utilità apt-filese si conosce il nome di un file che si desidera cercare; questo deve essere aggiunto al sistema comunque. Per esempio:

apt-file search somefilename

Tendo a utilizzare apt-cachein uno dei seguenti modi:

apt-cache search package | sort | grep item

(Questo ti mostra cose che hanno effettivamente un oggetto nel loro sommario o nomi.)

apt-cache search thing | sort | less

(Questo cerca le cose, quindi le ordina per una visione piacevole con less.)


2

Il mio punto di vista è lavorare con i comandi installati per impostazione predefinita ed evitare pacchetti extra se non vi è alcun motivo particolare.

Nel mio Debian con GNU bash questi semplici comandi

apt list
apt list --all-versions

fornisce un elenco di tutto (installato e non installato). Posso quindi limitare i risultati con grep "installato" o grep -v "installato". Può anche essere combinato con uno o più nomi di pacchetti (caratteri jolly accettati).

Switch "-all-version" fornisce in output linee separate per ogni versione del pacchetto (stabile, test, instabile, sperimentale).

La semplice "lista apt" fornisce solo una versione (con la massima priorità).


0

Rispondendo rigorosamente alla domanda (si desidera mostrare un elenco di pacchetti non installati), provare a utilizzare

(modificato secondo i commenti qui sotto)

# apt-get update
# dpkg -l '*' | egrep --invert-match '^i'

Non sono sicuro dell'esatta sintassi, poiché sto scrivendo questo su una finestra di Windows e non c'è modo di verificarlo. Forse prova a cambiare ciò su cui stai grep


Questo elenca i pacchetti installati , non disinstallati .
inkaphink,

@Raphink: Mi dispiace, ho modificato il post per risolvere questo problema
PPC

Nessun problema, ma non stai ancora elencando i pacchetti che non sono installati. Escludendo i pacchetti 'ii' (che in realtà non sono esattamente ciò che fa la tua espressione, dovresti usare '^ii'piuttosto che '[ii]'), ti perdi nei pacchetti installati ma non configurati per esempio (come iFo iHper esempio).
inkaphink,

@PPC: Ahimè, questo non funziona neanche perché dpkg -l elenca solo i pacchetti installati, ovvero tutti i pacchetti sono preceduti da "ii", quindi il piping dei risultati su grep usando i flag --invert-match o -v produce solo un serie di trattini che è il separatore dell'intestazione dell'elenco. Grazie comunque.
freakwincy,

@ freakwincy: giusto! Ci scusiamo per non averlo testato prima di inviarlo (lavorando su Windows). Secondo manpage, dovresti usare "dpkg -l '*'" per elencare tutti i pacchetti.
PPC
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.