Як перелічити залежні пакети (зворотні залежності)?


201

Для того, щоб дослідити, що спричинило встановлення даного пакету, я хотів би отримати список пакунків, які залежать від цього пакету. Я не зміг знайти нічого очевидного в man dpkg.



5
Відповіді на старіші запитання все обертаються aptitude, щось не встановлено за замовчуванням роками. У 2017 році все в Ubuntu все ще є apt-cache. Кожен, хто слідує за пов'язаним запитанням, загубиться в дискусії про програму, яку мало хто матиме.
Ламбарт

Відповіді:


252

apt-cache rdepends packagename слід робити те, що ти хочеш


1
Відмінно! apt-cache rdepends tofrodosпідтвердив підозру, що він був встановлений іншим пакетом (застарілим dos2unix).
l0b0

2
Що стосується сьогодні (apt версія 0.9.9.1), є --recurse варіант, який працює з rdepends.
jarno

43
Якщо додати --installed, вихід навіть корисний для пакунків, якими можуть користуватися багато інших:apt-cache rdepends --installed packagename
quazgar

2
Є дещо інший синтаксис, який допоміг мені розмежувати рекомендації, залежності, пропозиції та ін. Синтаксис є sudo apt rdepends packagename(зауважте, що він не використовує apt-кеш, а просто підходить)
Vahid Pazirandeh

4
Для висновку, чому деякі пакети мають вертикальну смугу (символ труби) перед ними?
Вахід Пазіранде

62

здатність має досить приємний спосіб поводження з цим:

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

За замовчуванням у ньому перелічено лише "найвстановлену, найсильнішу, найкруткішу, найкоротшу" причину, але ви можете використовувати aptitude -v whyїї для виведення всього, що знайде.


4
Здається, він враховує лише встановлені пакети, а не все, що є в наявності. І це було те, що мені було потрібно.
Tuukka Mustonen

3
Для того, що ви хочете, reverse-dependsвubuntu-dev-tools
tumbleweed

Як щодо debian?
Tuukka Mustonen

1
ubuntu-dev-toolsв Debian
перекотиполе

Це чудово. Я дізнався, що openssh-server рекомендують (і тому встановлюють) xauthна безголовому сервері, перетягуючи сотні залежностей x11 і десятки марних оновлень на місяць. Ось проблема з автоматизованим управлінням пакетами!
BaseZen


16

Існує кілька способів, при цьому кожен метод показує різний результат.

Для детального огляду дерева повного зворотного залежності;

aptitude install apt-rdepends
apt-rdepends -r bash

Альтернативно;

apt-cache showpkg bash

Або стислий список:

apt-cache rdepends bash

Що саме rdependsпоказує на тому дереві? apt-rdepends php7.0-fpmпоказує sed. sedне залежить від PHP, не кажучи вже про PHP FPM.
Дан Даскалеску

Це навпаки, це означає, що PHP залежить від sed.
Ерік Беркун-Древніг

1
Привіт, хлопці, насправді "влучно-червоні" означає "рекурсивну залежність". Якщо ви хочете зворотну рекурсивну залежність, вам слід набрати:apt-rdepends -r yourPackageNameHere
SebMa

На сторінці "apt-cache man" йдеться, що "rdepends показує перелік кожної зворотної залежності, яку має пакет". Тоді як apt-rdepends вимагає опції -r, щоб робити зворотні залежності, як говорить @SebMa.
NeilG

8

Найпростіший варіант як і раніше:

apt rdepends package-name

який не вимагає від вас встановлення жодного пакету.


1
Що це додає до прийнятої відповіді?
l0b0

2
Прийнята відповідь не має нічого спільного з цією. Вихід абсолютно інший і набагато корисніший для споживання людиною, ніж апт-кеш. У відповіді зазначається, що apt-кеш не встановлений за замовчуванням скрізь - саме по собі це має бути досить гарним підказом, чому ця відповідь має своє призначення. нарешті, це насправді відповідь, яку я шукав, тож будь-який знімок є досить нерозумним.
stefanct

Однією з дуже вагомих причин, чому це краще, ніж прийнята версія, є те, що вона включає в себе версію залежностей, на відміну від результатів apt-caches. Це саме те, що мені було потрібно зараз (налагодження несумісності glibc 2,28, так що виклик)
Пер Лундберг

Резюме за використання просто влучного. На момент отримання оригінальної відповіді я не впевнений, що це справедливе рішення було б дійсним, але якщо воно є зараз, це добре.
RobotHumans

7

На додаток до інших хороших відповідей, APT / APT-GET -sвиконує "змодельоване" видалення (або встановлення).

sudo apt -s remove <pkgname>

Використовуючи -sабо --simulatedвидаляючи (або встановлюючи) пакети, як правило, перераховуються всі залежні залежності. Він буде показувати осиротілі пакети при видаленні, або потрібні залежності при встановленні без фактичного виконання installабо remove. Тільки інформаційна.


apt remove -s php7.0-fpmпоказує The following additional packages will be installed: apache2 apache2-bin apache2-data libapache2-mod-php7.0 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0. Чому apache встановлюється, якщо я видаляю PHP FPM?
Дан Даскалеску

@DanDascalescu Хм. Це може бути поганим сценарієм встановлення / видалення для apt pkg або, можливо, у вас є інші залежності, які встановлюють apache2 як dep (тобто потрібен веб-сервер - і я вважаю, що apache2 - веб-сервер за замовчуванням). Може бути кілька речей. Просто не впевнений. Має гарний пост на AskUbuntu, якщо ви не знайшли відповіді.
bshea
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.