Elenca le dipendenze (ricorsive) dei pacchetti installati in APT


17

Per ogni pacchetto che ho installato vorrei sapere quali pacchetti sarebbero installati se lo disinstallassi. Un esempio dell'output di cui ho bisogno è ( package: list of deps):

abc: foo bar
bcd: baz abc
bdd: baz fuubar

Aggiungere

Se controllo cosa verrebbe effettivamente rimosso se rimuovo il pacchetto pppusando apt-get:

$ echo $(apt-get --dry-run remove ppp | grep '^Remv ' | cut -d' ' -f2)
gnome-ppp mint-meta-xfce network-manager-pptp-gnome network-manager-pptp wvdial pppoeconf pppoe pptp-linux pppconfig ppp

Vedo che è diverso da ciò che lo apt-cachespettacolo mi dà (che non credo includano dipendenze ricorsive):

$ apt-cache show ppp | grep '^Breaks: '
Breaks: network-manager (<= 0.8.0.999-1), network-manager-pptp (<= 0.8.0.999-1), pppdcapiplugin (<= 1:3.9.20060704+dfsg.1-1)

Append 2

È dpkg --get-selections | cut -f1un modo affidabile per ottenere un elenco di pacchetti installati su cui scorrere?


1
L'analisi apt-get --dry-run removesembra sostanzialmente corretta. Potrebbero mancare alcuni pacchetti installati automaticamente che sono necessari solo per i pacchetti installati automaticamente che sono necessari solo per il pacchetto rimosso. È per questo che non la consideri una risposta adeguata?
Gilles 'SO- smetti di essere malvagio' il

Risposte:


11

Hai fatto alcune domande diverse qui, spero di poterti aiutare almeno su una o due.

Per elencare tutti i pacchetti installati, utilizzare dpkgper l'output in un elenco separato da campi

dpkg -l 

Per ottenere l'elenco dei pacchetti, senza campi aggiuntivi, in modo da poterlo convogliare altrove.

dpkg -l | awk '{print $2 }' # Pipe to grep after the awk, or glob from dpkg

Ad esempio, se voglio rimuovere un vecchio kernel,

apt-get purge `dpkg -l linux* | awk '{print $2}' | grep 3.0.0-12`

Il modo più semplice per passare attraverso tutte le dipendenze non necessarie è con debfoster. Funziona in modo interattivo e passa attraverso ciò che si desidera, le loro dipendenze e può rimuovere o elencare ciò che non è una dipendenza ricorsiva.

Per elencare tutte le dipendenze ricorsive di un pacchetto specifico,

debfoster -d $PACKAGE ## PACKAGE is the specific package.

Dopo aver eseguito, debfosterè possibile verificare anche eventuali dipendenti che un pacchetto ha,

debfoster -e $PACKAGE ## PACKAGE is the specific package.

Un ottimo modo per elencare i pacchetti "orfani" è con deborphan. Esegui deborphansenza opzioni ed elencherà tutti i pacchetti "orfani". Un "orfano" è un pacchetto dal quale nulla dipende e che non è stato installato in modo esplicito.

Mi piace anche pulire eventuali pacchetti "orfani", dopo una nuova installazione. Dopo aver rimosso pacchetti specifici, puoi perdere qualsiasi cosa apt-get autoremove --purgecon,

apt-get purge `deborphan`

Infine, a volte no --purgee alla fine con il pacchetto "rimanenti", le versioni più recenti di apt-getpossono rimuoverli automaticamente. Per rimuovere tutti gli "avanzi" dai pacchetti disinstallati, esegui,

apt-get autoclean

Se non disponi della nuova versione di apt-get, puoi sempre rimuoverli con questi comandi. Si verificano errori se non esistono file "rimanenti", sembra che Autoclean possa perdere alcuni occasionalmente, indipendentemente.

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs dpkg --purge

debfoster esiste ancora, ma è considerato sostituito da caratteristiche in attitudine
Joshua Clayton

4
apt-cache show pkgname1 pkgname2...

elencherà (tra le altre cose) queste dipendenze (di runtime). Questo di solito è adeguato, a meno che non lo si stia alimentando a una macchina per ulteriori elaborazioni. Se lo vuoi esattamente nel formato che hai dichiarato, probabilmente dovrai scrivere uno script.


Siamo spiacenti, ho formulato la mia domanda in modo errato. Sono interessato a sapere quali pacchetti verrebbero disinstallati per ciascun pacchetto che ho installato. E ho anche bisogno di elencare tutti i pacchetti che ho installato.
Eliminato il

2
@Deleted: mi dispiace, non ho visto questo commento fino ad ora. In risposta a "quali pacchetti verrebbero disinstallati per ciascun pacchetto che ho installato" (suppongo che si desideri rispondere a questa domanda in base al pacchetto) apt-get remove -s packagename. Elencare tutti i pacchetti che hai installato è giusto dpkg -l.
Faheem Mitha,

@FaheemMitha: vecchio post, ma comunque ottimo consiglio apt-get remove -s packagename!
twan163

@ twan163 Felice che ti sia stato utile.
Faheem Mitha,

1

Penso che devi continuare e creare un loop per la stessa cosa:

apt-cache depends libtext-wrapi18n-perl |xargs apt-cache depends

Naturalmente rimuovi le intestazioni.


2
apt-cache dipende ha un'opzione recuresapt-cache depends --recurse libtext
Joshua Clayton
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.