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


201

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



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

Ответы:


252

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


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

текущий синтаксисapt showpkg <pkgname>
1

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» означает «рекурсивная зависимость». Если вам нужна обратная рекурсивная зависимость, вы должны набрать: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. Только для информации.


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.