Как вывести список зависимых пакетов (обратных зависимостей)?

201

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

l0b0
источник
Связанный: askubuntu.com/questions/13296/…
Сет
5
Ответы на старый вопрос все вращаются вокруг aptitude, что-то, что не было установлено по умолчанию в течение многих лет. В 2017 году все на Ubuntu еще есть apt-cache. Любой, кто следует за связанным вопросом, заблудится в дискуссии о программе, которую мало кто будет иметь.
Ламбарт

Ответы:

252

apt-cache rdepends packagename должен делать то, что ты хочешь

RobotHumans
источник
1
Отлично! apt-cache rdepends tofrodosподтвердил подозрение, что он был установлен другим пакетом (устаревшим dos2unix).
10
2
На сегодняшний день (версия 0.9.9.1) есть опция --recurse, которая работает с rdepends.
Ярно
43
Если вы добавите --installed, вывод даже полезен для пакетов, которые могут использоваться многими другими:apt-cache rdepends --installed packagename
quazgar
2
Есть немного другой синтаксис, который помог мне различать «Рекомендует», «Зависит», «Предлагает» и т. Д. Синтаксис есть sudo apt rdepends packagename(обратите внимание, что он не использует apt-cache, а просто apt)
Вахид Пазиранде,
4
Для вывода, почему некоторые пакеты имеют вертикальную черту (символ трубы) перед ними?
Вахид Пазиранде
62

У aptitude есть довольно хороший способ справиться с этим:

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

По умолчанию в нем указывается только «самая установленная, самая сильная, самая трудная, самая короткая» причина, но вы можете использовать aptitude -v whyее для вывода всего, что найдете.

перекати-поле
источник
4
Похоже, он рассматривает только установленные пакеты, а не все доступное. И это было то, что мне было нужно.
Туукка Мустонен
3
Для этого вы хотите reverse-dependsвubuntu-dev-tools
перекати
Как насчет Debian?
Туукка Мустонен
1
ubuntu-dev-toolsв Debian
перекати
Это здорово. Я узнал, что openssh-server рекомендуется (и поэтому установлен) xauthна автономном сервере, перетаскивая сотни зависимостей x11 и десятки бесполезных обновлений в месяц. Вот в чем проблема с автоматическим управлением пакетами!
BaseZen
18
apt-cache showpkg <pkgname> 

Пример:

apt-cache showpkg lightdm
qorrow
источник
текущий синтаксисapt showpkg <pkgname>
1
16

Существует несколько способов, каждый из которых показывает разные результаты.

Для подробного просмотра полного обратного дерева зависимостей;

aptitude install apt-rdepends
apt-rdepends -r bash

В качестве альтернативы;

apt-cache showpkg bash

Или краткий список:

apt-cache rdepends bash
papashou
источник
Что именно rdependsпоказывает в этом дереве? apt-rdepends php7.0-fpmпоказывает sed. sedне зависит от PHP, не говоря уже о PHP FPM.
Дан Даскалеску
Обратно зависит, это означает, что PHP зависит от sed.
Эрик Беркун-Древниг
1
Привет, ребята, на самом деле «apt-rdepends» означает «рекурсивная зависимость». Если вам нужна обратная рекурсивная зависимость, вы должны набрать:apt-rdepends -r yourPackageNameHere
SebMa
Страница руководства apt-cache гласит: «rdepends показывает список каждой обратной зависимости, которую имеет пакет». В то время как apt-rdepends требует опцию -r для выполнения обратных зависимостей, как говорит @SebMa.
NeilG
8

Самый простой вариант по-прежнему:

apt rdepends package-name

который не требует установки какого-либо пакета.

Коррадо Топи
источник
1
Что это добавляет к принятому ответу?
10
2
Принятый ответ не имеет ничего общего с этим. Вывод совершенно другой и более полезный для человека, чем apt-cache. В ответе упоминается, что apt-cache не устанавливается по умолчанию везде - это само по себе должно быть довольно хорошим указанием на то, почему этот ответ имеет свое назначение. наконец, это именно тот ответ, который я искал, поэтому любое отрицательное голосование довольно глупо.
Stefanct
Одна очень важная причина, почему это лучше, чем принятая версия, состоит в том, что она включает версию зависимостей, в отличие от apt-cacheвывода s. Это именно то, что мне было нужно сейчас (отладка несовместимости с glibc 2.28, так что голосование)
Пер Лундберг,
upvote для использования только apt. на момент первоначального ответа, я не уверен, что это подходящее решение было бы правильным, но если это так, то это хорошо.
RobotHumans
7

В дополнение к другим хорошим ответам, APT / APT-GET -sвыполняет «симуляцию» удаления (или установки).

sudo apt -s remove <pkgname>

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

bshea
источник
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