Jak wyświetlić listę pakietów zależnych (zależności odwrotne)?

201

Aby zbadać, co spowodowało instalację danego pakietu, chciałbym uzyskać listę pakietów zależnych od tego pakietu. Nie mogłem znaleźć niczego oczywistego man dpkg.

l0b0
źródło
5
Wszystkie odpowiedzi na starsze pytania obracają się wokół aptitude, coś, co nie było instalowane domyślnie od lat. W 2017 roku wszyscy na Ubuntu nadal mają apt-cache. Każdy, kto podąży za połączonym pytaniem, zagubi się w dyskusji na temat programu, który niewielu będzie miało.
Lambart

Odpowiedzi:

252

apt-cache rdepends packagename powinien robić co chcesz

RobotHumans
źródło
1
Doskonały! apt-cache rdepends tofrodospotwierdził podejrzenie , że został zainstalowany przez inny pakiet (przestarzały dos2unix).
l0b0
2
Na dzień dzisiejszy (wersja apt 0.9.9.1) istnieje opcja --recurse, która działa z rdepends.
jarno
43
Jeśli dodasz --installed, dane wyjściowe są nawet przydatne dla pakietów, które mogą być używane przez wiele innych:apt-cache rdepends --installed packagename
quazgar
2
Jest nieco inna składnia, która pomogła mi odróżnić sudo apt rdepends packagename
Polecenia, Zależności, Sugestie
4
W przypadku danych wyjściowych, dlaczego niektóre pakiety mają przed sobą pionowy pasek (symbol rury)?
Vahid Pazirandeh
62

aptitude ma całkiem niezły sposób radzenia sobie z tym:

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

Domyślnie wyświetla tylko „najbardziej zainstalowany, najsilniejszy, najściślejszy, najkrótszy” powód, ale możesz go użyć, aptitude -v whyaby wyświetlał wszystko, co znajdzie.

tumbleweed
źródło
4
Wygląda na to, że bierze pod uwagę tylko zainstalowane pakiety, a nie wszystko dostępne. I tego potrzebowałem.
Tuukka Mustonen
3
Do tego chcesz reverse-dependswubuntu-dev-tools
tumbleweed
A może debian?
Tuukka Mustonen,
1
ubuntu-dev-toolsjest w Debianie
tumbleweed
To jest świetne. Nauczyłem się, że openssh-server polecam (i dlatego instaluję) xauthna bezgłowym serwerze, przeciągając setki zależności x11 i dziesiątki bezużytecznych aktualizacji miesięcznie. To jest problem z automatycznym zarządzaniem pakietami!
BaseZen
18
apt-cache showpkg <pkgname> 

Przykład:

apt-cache showpkg lightdm
jutro
źródło
obecna składniaapt showpkg <pkgname>
l --marc l
16

Jest więcej niż jeden sposób, przy czym każda metoda pokazuje inny wynik.

Aby uzyskać szczegółowy widok pełnego drzewa zależności odwrotnej;

aptitude install apt-rdepends
apt-rdepends -r bash

Alternatywnie;

apt-cache showpkg bash

Lub zwięzła lista:

apt-cache rdepends bash
papashou
źródło
Co dokładnie rdependspokazuje to drzewo? apt-rdepends php7.0-fpmpokazuje sed. sednie zależy od PHP, nie mówiąc już o PHP FPM.
Dan Dascalescu
To zależy od reszty, co oznacza, że ​​PHP zależy od sed.
Erik Berkun-Drevnig,
1
Cześć chłopaki, właściwie „apt-rdepends” oznacza „rekurencyjną zależność”. Jeśli chcesz odwrócić zależność rekurencyjną, musisz wpisać:apt-rdepends -r yourPackageNameHere
SebMa
Strona podręcznika apt-cache mówi „rdepends pokazuje listę każdej odwrotnej zależności pakietu”. Podczas gdy apt-rdepends wymaga opcji -r do wykonania odwrotnych zależności, jak mówi @SebMa.
NeilG
8

Najprostszą opcją jest nadal:

apt rdepends package-name

co nie wymaga instalowania żadnego pakietu.

Corrado Topi
źródło
1
Co to dodaje do zaakceptowanej odpowiedzi?
l0b0
2
Przyjęta odpowiedź nie ma z tym nic wspólnego. Dane wyjściowe są zupełnie inne i znacznie bardziej przydatne do spożycia przez ludzi niż apt-cache. Odpowiedź wspomina, że ​​apt-cache nie jest instalowany domyślnie wszędzie - to samo powinno być raczej dobrą wskazówką, dlaczego ta odpowiedź ma swój cel. wreszcie jest to właściwie odpowiedź, której szukałem, więc każde zdanie jest raczej głupie.
stefanct
Jednym z bardzo ważnych powodów, dla których jest to lepsze niż wersja zaakceptowana, jest to, że zawiera wersję zależności, w przeciwieństwie do apt-cachewyjścia s. Właśnie tego potrzebowałem teraz (debugowanie niekompatybilności glibc 2.28, więc upvoting)
Per Lundberg
głosowanie za używanie tylko apt. w momencie oryginalnej odpowiedzi nie jestem pewien, czy to trafne rozwiązanie byłoby prawidłowe, ale jeśli tak, to dobrze.
RobotHumans
7

Oprócz innych dobrych odpowiedzi, APT / APT-GET -swykonuje „symulowane” usuwanie (lub instalację).

sudo apt -s remove <pkgname>

Używanie -slub --simulateddo usuwania (lub instalowania) pakietów, zwykle wyświetla listę zależności, których dotyczy problem. Pokaże osierocone pakiety podczas usuwania lub potrzebne zależności podczas instalacji bez faktycznego uruchamiania installlub remove. Tylko informacyjny.

bshea
źródło
apt remove -s php7.0-fpmpokazuje The following additional packages will be installed: apache2 apache2-bin apache2-data libapache2-mod-php7.0 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0. Dlaczego apache miałby zostać zainstalowany, jeśli usunę PHP FPM?
Dan Dascalescu
@DanDascalescu Hmm. Może to być zły skrypt instalacji / usuwania dla apt pkg lub może masz inne zależności, które instalują apache2 jako dep (co oznacza, że ​​potrzebny jest serwer WWW - i uważam, że apache2 jest domyślnym serwerem WWW). Może być kilka rzeczy. Po prostu nie jestem pewien. Ma zapach dobrego postu na AskUbuntu, jeśli nie znalazłeś odpowiedzi.
bshea,