Список (рекурсивный) зависимостей установленных пакетов в APT

Для каждого пакета, который я установил, я хотел бы знать, какие пакеты будут установлены, если я его удалю. Примером вывода, который мне нужен, является ( package: list of deps ):

 abc: foo bar bcd: baz abc bdd: baz fuubar 

присоединять

Если я проверю, что действительно будет удалено, если я удалю пакет ppp используя apt-get :

 $ echo $(apt-get --dry-run remove ppp | grep '^Remv ' | cut -d' ' -f2) gnome-ppp mint-meta-xfce network-manager-pptp-gnome network-manager-pptp wvdial pppoeconf pppoe pptp-linux pppconfig ppp 

Я вижу, что он отличается от того, что дает мне apt-cache show (что, я думаю, не содержит рекурсивных зависимостей):

 $ apt-cache show ppp | grep '^Breaks: ' Breaks: network-manager (<= 0.8.0.999-1), network-manager-pptp (<= 0.8.0.999-1), pppdcapiplugin (<= 1:3.9.20060704+dfsg.1-1) 

Добавить 2

Является ли dpkg --get-selections | cut -f1 dpkg --get-selections | cut -f1 – надежный способ получить список установленных пакетов для перебора?

  • «Конфликтующее распространение: InRelease (ожидаемый выпуск, но получил релиз + 1)», что это такое?
  • Как разрешить сообщение «... система не поддерживает поддержку моментального снимка»?
  • Force apt-get для запроса yes / no
  • APT фиксирует или подделывает номер версии моего собственного пакета?
  • Можно ли установить пакет debwiki mediawiki без apache?
  • Как удалить карту-каталог и использовать символическую ссылку?
  • При использовании apt-get без подключения к Интернету, как определить, какие пакеты отсутствуют?
  • apt-get не может найти пакет на старой версии моего дистрибутива
  • 3 Solutions collect form web for “Список (рекурсивный) зависимостей установленных пакетов в APT”

    Вы задали здесь несколько разных вопросов, я надеюсь, что смогу хотя бы помочь одному или двум.

    Чтобы просмотреть все установленные пакеты, используйте dpkg для вывода в списке, разделенном полями.

     dpkg -l 

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

     dpkg -l | awk '{print $2 }' # Pipe to grep after the awk, or glob from dpkg 

    Например, если я хочу удалить старое ядро,

     apt-get purge `dpkg -l linux* | awk '{print $2}' | grep 3.0.0-12` 

    Самый простой способ пройти через все ненужные зависимости – это debfoster . Он работает в интерактивном режиме и проходит через то, что вы хотите, их зависимости и можете удалить или перечислить то, что не является рекурсивной зависимостью.

    Чтобы перечислить все рекурсивные зависимости конкретного пакета,

     debfoster -d $PACKAGE ## PACKAGE is the specific package. 

    После того, как вы выполнили debfoster вы можете проверить любые иждивенцы, которые пакет также имеет,

     debfoster -e $PACKAGE ## PACKAGE is the specific package. 

    Действительно отличный способ перечислить «потерянные» пакеты, с deborphan . Запустите deborphan без параметров, и он перечислит все «потерянные» пакеты. «Сирота» – это пакет, от которого ничего не зависит, и вы явно не установили его.

    Мне также нравится чистить любые «потерянные» пакеты после новой установки. После того, как я apt-get autoremove --purge определенные пакеты, вы можете получить что-нибудь пропущенное с помощью apt-get autoremove --purge ,

     apt-get purge `deborphan` 

    Наконец, иногда вы не делаете – --purge и заканчивать «остатками» пакета, более новые версии apt-get могут автоматически удалять их. Чтобы удалить все «остатки» из удаленных пакетов,

     apt-get autoclean 

    Если у вас нет новой версии apt-get , вы всегда можете удалить их с помощью этих команд. Они ошибочны, если не существует файлов «оставленных», кажется, что автокрест может иногда пропустить некоторое время.

     dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs dpkg --purge 
     apt-cache show pkgname1 pkgname2... 

    будут (среди прочего) перечислять эти (runtime) зависимости. Обычно это достаточно, если вы не кормите его машиной для дальнейшей обработки. Если вы хотите в точности в указанном вами формате, вам, вероятно, придется написать сценарий.

    Я думаю, вам нужно продолжить и создать цикл для одной вещи:

     apt-cache depends libtext-wrapi18n-perl |xargs apt-cache depends 

    Конечно, удалите заголовки.

    Linux и Unix - лучшая ОС в мире.