Come elencare i pacchetti dipendenti (dipendenze inverse)?


201

Al fine di ricercare ciò che ha causato l'installazione di un determinato pacchetto, vorrei ottenere un elenco di pacchetti che dipendono da quel pacchetto. Non sono riuscito a trovare nulla di ovvio in man dpkg.



5
Le risposte alle domande più vecchie ruotano tutte intorno aptitude, qualcosa che non è stato installato di default per anni. Nel 2017, tutti su Ubuntu hanno ancora apt-cache. Chiunque segua la domanda collegata si perderà in una discussione su un programma che pochi avranno.
Lambart,

Risposte:


252

apt-cache rdepends packagename dovrebbe fare quello che vuoi


1
Eccellente! apt-cache rdepends tofrodosha confermato il sospetto che fosse installato da un altro pacchetto (il obsoleto dos2unix).
l0b0

2
Ad oggi (versione apt 0.9.9.1), c'è l'opzione --recurse che funziona con rdepends.
jarno,

43
Se aggiungi --installed, l'output è utile anche per i pacchetti che possono essere utilizzati da molti altri:apt-cache rdepends --installed packagename
quazgar

2
C'è una sintassi leggermente diversa che mi ha aiutato a distinguere tra Raccomandazioni, Dipendenze, Suggerimenti, ecc. La sintassi è sudo apt rdepends packagename(nota che non sta usando apt-cache ma semplicemente apt)
Vahid Pazirandeh,

4
Per l'output, perché alcuni pacchetti hanno una barra verticale (simbolo pipe) prima di loro?
Vahid Pazirandeh,

62

aptitude ha un modo abbastanza carino di gestirlo:

$ aptitude why bash
i   foomatic-filters PreDepends bash (>= 2.05)

Per impostazione predefinita, elenca solo il motivo "più installato, più forte, più stretto, più breve", ma è possibile utilizzarlo aptitude -v whyper produrre tutto ciò che trova.


4
Sembra che considera solo i pacchetti installati, non tutto disponibile. Ed era quello di cui avevo bisogno.
Tuukka Mustonen,

3
Per quello che vuoi reverse-dependsinubuntu-dev-tools
tumbleweed, il

Che ne dici di debian?
Tuukka Mustonen,

1
ubuntu-dev-toolsè in Debian
tumbleweed il

Questo è fantastico Ho imparato che era openssh-server raccomandato (e quindi installato) xauthsu un server senza testa, trascinando centinaia di dipendenze x11 e dozzine di aggiornamenti inutili al mese. Questo è il problema con la gestione automatizzata dei pacchetti!
BaseZen

18
apt-cache showpkg <pkgname> 

Esempio:

apt-cache showpkg lightdm

sintassi attualeapt showpkg <pkgname>
l --marc l

16

C'è più di un modo, con ogni metodo che mostra un output diverso.

Per una visione dettagliata dell'intero albero di dipendenza inversa;

aptitude install apt-rdepends
apt-rdepends -r bash

In alternativa;

apt-cache showpkg bash

O un elenco conciso:

apt-cache rdepends bash

Cosa rdependsmostra esattamente in quell'albero? apt-rdepends php7.0-fpmspettacoli sed. sednon dipende da PHP, figuriamoci PHP FPM.
Dan Dascalescu,

È inverso dipende, significa che PHP dipende da sed.
Erik Berkun-Drevnig,

1
Ciao ragazzi, in realtà "apt-rdepends" sta per "dipendenza ricorsiva". Se si desidera la dipendenza ricorsiva inversa, è necessario digitare:apt-rdepends -r yourPackageNameHere
SebMa

La pagina man di apt-cache dice "rdepends mostra un elenco di ogni dipendenza inversa che ha un pacchetto". Considerando che apt-rdepends richiede l'opzione -r per fare dipendenze inverse, come dice @SebMa.
NeilG

8

L'opzione più semplice è ancora:

apt rdepends package-name

che non richiede l'installazione di alcun pacchetto.


1
Che cosa aggiunge questo alla risposta accettata?
10

2
La risposta accettata non ha nulla a che fare con questa. L'output è completamente diverso e molto più utile per il consumo umano rispetto a quello di apt-cache. La risposta menziona che apt-cache non è installato di default dappertutto - che da solo dovrebbe essere un buon suggerimento sul perché questa risposta abbia il suo scopo. infine, questa è in realtà la risposta che stavo cercando, quindi ogni downvote è piuttosto sciocco.
stefanct,

Un motivo molto significativo per cui questo è meglio della versione accettata è che include la versione delle dipendenze, a differenza apt-cachedell'output di s. È esattamente quello di cui avevo bisogno in questo momento (debug di un'incompatibilità di glibc 2.28, quindi votazione)
Per Lundberg

voto per l'utilizzo di solo apt. al momento della risposta originale, non sono sicuro che questa giusta soluzione sarebbe stata valida, ma se lo è ora, va bene.
RobotHumans,

7

Oltre ad altre buone risposte, un APT / APT-GET -sesegue una rimozione (o installazione) "simulata".

sudo apt -s remove <pkgname>

Utilizzando -so --simulatedper rimuovere (o installare) i pacchetti, verranno normalmente elencate tutte le dipendenze interessate. Mostrerà i pacchetti orfani durante la rimozione o le dipendenze necessarie durante l'installazione senza eseguire installo remove. Solo informativo.


apt remove -s php7.0-fpmspettacoli The following additional packages will be installed: apache2 apache2-bin apache2-data libapache2-mod-php7.0 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0. Perché apache verrebbe installato se rimuovessi PHP FPM?
Dan Dascalescu,

@DanDascalescu Hmm. Potrebbe essere uno script di installazione / rimozione errato per apt pkg o potrebbe esserci qualche altra dipendenza che installa apache2 come dep (il che significa che è necessario un server web - e credo che apache2 sia il web server predefinito). Potrebbero essere alcune cose. Non ne sono sicuro. Ha l'odore di un buon post su AskUbuntu se non hai trovato una risposta.
bshea,
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.