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

У меня есть хорошее решение: Установите 2 типа Linux ОС: основа Redhat и Debian-основа, FreeBSD и Солярис. Забудьте MacOS. Читайте и работайте с ними, конечно, запуститесь с Linux, затем взламывают и так далее.

См. следующие сайты:

Не забывайте рассматривать POSIX или расширение GNU, некоторые команды имеют расширение GNU, некоторыми командами является POSIX. Читайте тщательно.

6
13.04.2017, 15:36
3 ответа

Плакат пишет (в комментариях):

Мне нужны все пакеты, от которых зависит tcpdump, и все их зависимости, и все их зависимости, и т.д.

apt-rdepends does this. ПРИМЕЧАНИЕ: "r" в слове "rdepends" означает "рекурсивный".

apt-rdepends -p tcpdump
Reading package lists... Done
Building dependency tree       
Reading state information... Done
tcpdump
  Depends: libc6 (>= 2.7) [Installed]
  Depends: libpcap0.8 (>= 1.0.0) [Installed]
  Depends: libssl0.9.8 (>= 0.9.8m-1) [NotInstalled]
libc6
  Depends: libc-bin (= 2.11.3-4) [Installed]
  Depends: libgcc1 [Installed]
libc-bin
libgcc1
  Depends: gcc-4.4-base (= 4.4.5-8) [NotInstalled]
  Depends: libc6 (>= 2.2.5) [Installed]
gcc-4.4-base
libpcap0.8
  Depends: libc6 (>= 2.7) [Installed]
libssl0.9.8
  Depends: debconf (>= 0.5) [Installed]
  Depends: debconf-2.0 [NotInstalled]
  Depends: libc6 (>= 2.7) [Installed]
  Depends: zlib1g (>= 1:1.1.4) [Installed]
debconf
  Depends: debconf-english [NotInstalled]
  Depends: debconf-i18n [Installed]
  PreDepends: perl-base (>= 5.6.1-4) [Installed]
debconf-english
  Depends: debconf [Installed]
debconf-i18n
  Depends: debconf [Installed]
  Depends: liblocale-gettext-perl [Installed]
  Depends: libtext-charwidth-perl [Installed]
  Depends: libtext-iconv-perl [Installed]
  Depends: libtext-wrapi18n-perl [Installed]
liblocale-gettext-perl
  Depends: libc6 (>= 2.2.5) [Installed]
  PreDepends: perl-base (>= 5.10.0-25) [Installed]
  PreDepends: perlapi-5.10.0 [NotInstalled]
perl-base
  PreDepends: dpkg (>= 1.14.20) [Installed]
  PreDepends: libc6 (>= 2.4) [Installed]
dpkg
  PreDepends: coreutils (>= 5.93-1) [Installed]
  PreDepends: libbz2-1.0 [Installed]
  PreDepends: libc6 (>= 2.6) [Installed]
  PreDepends: libselinux1 (>= 1.32) [Installed]
  PreDepends: xz-utils [Installed]
  PreDepends: zlib1g (>= 1:1.1.4) [Installed]
coreutils
  PreDepends: libacl1 (>= 2.2.11-1) [Installed]
  PreDepends: libattr1 (>= 2.4.41-1) [Installed]
  PreDepends: libc6 (>= 2.6) [Installed]
  PreDepends: libselinux1 (>= 1.32) [Installed]
libacl1
  Depends: libattr1 (>= 2.4.41-1) [Installed]
  Depends: libc6 (>= 2.2.5) [Installed]
libattr1
  Depends: libc6 (>= 2.2.5) [Installed]
libselinux1
  Depends: libc6 (>= 2.3.4) [Installed]
libbz2-1.0
  Depends: libc6 (>= 2.3) [Installed]
xz-utils
  Depends: libc6 (>= 2.6) [Installed]
  Depends: liblzma2 (>= 5.0.0) [NotInstalled]
liblzma2
  Depends: libc6 (>= 2.2.5) [Installed]
zlib1g
  Depends: libc6 (>= 2.2.5) [Installed]
perlapi-5.10.0
libtext-charwidth-perl
  Depends: libc6 (>= 2.2.5) [Installed]
  Depends: perl-base (>= 5.10.0-13) [Installed]
  Depends: perlapi-5.10.0 [NotInstalled]
libtext-iconv-perl
  Depends: libc6 (>= 2.2.5) [Installed]
  Depends: perl-base (>= 5.10.0-13) [Installed]
  Depends: perlapi-5.10.0 [NotInstalled]
libtext-wrapi18n-perl
  Depends: libtext-charwidth-perl [Installed]
debconf-2.0
2
27.01.2020, 20:24

Следующий набор команд, похоже, это делает:

debfoster -q -d tcpdump |
 sed -n '1!p' |
 tr -s ' ' |
 xargs |
 tr '\n' ' ' |
 xargs -I _ -d ' ' -n 1 sh -c "echo  _: \"\$(apt-cache policy _ | grep '  Installed: ' | sed -e 's/  Installed: //')\""

Это использует:

  • Debfoster для печати (рекурсивных) зависимостей
  • для удаления Первая строка
  • TR , чтобы свернуть дополнительные пробелы
  • XARGS для обрезки ведущих и задних площадей
  • TR , чтобы удалить трейлинг Newline
  • xargs :
    • ECHO Название пакета
    • Использование Политика APT-Cache Чтобы найти установленную версию (наряду с GREP и SED для извлечения Сама версия.

Это производит:

apt-utils: 1.0.1ubuntu2.6
debconf: 1.5.51ubuntu2
debconf-i18n: 1.5.51ubuntu2
dpkg: 1.17.5ubuntu5.3
gcc-4.8-base: 4.8.2-19ubuntu1
[...etc...]

Если кто-то может видеть способ упростить это, дайте мне знать.

2
27.01.2020, 20:24

В обоих уже представленных ответах есть свои плюсы и минусы.

Начиная с debfoster дает список пакетов, который легко разобрать, поэтому следующий результат дает запрошенный результат:

apt-cache policy $(debfoster -q -d tcpdump|tail -n +2)|awk '/^[^ ]/ { package=$0 } /  Installed/ { print package " " $2 }'

, используя tail для пропуска первой строки и awk для обработки результата одной операцией. (Использование подстановки команд избавляет от необходимости обрабатывать новые строки. ) Начиная с debfoster означает, что мы можем делать это только с уже установленным пакетом, поэтому мы можем использовать dpkg для получения дополнительной информации:

dpkg -l $(debfoster -q -d tcpdump|tail -n +2)

Начиная с apt-rdepends дает список пакетов, которые немного сложнее обрабатывать, с дубликатами; но его преимущество заключается в том, что он способен обрабатывать пакеты, которые еще не установлены:

apt-cache policy $(apt-rdepends -p tcpdump 2>| /dev/null|awk '/Depends/ {print $2}'|sort -u)|awk '/^[^ ]/ { package=$0 } /  Installed/ { print package " " $2 }'

Это также можно использовать с dpkg -l:

dpkg -l $(apt-rdepends -p tcpdump 2>| /dev/null|awk '/Depends/ {print $2}'|sort -u)

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

debfoster включает рекомендует по умолчанию; это можно отключить с помощью --option UseRecommends= no:

debfoster -q --option UseRecommends=no -d tcpdump

apt-rdepends не включает рекомендует по умолчанию; это можно включить, используя -f Depends,PreDepends,Recommends -s Depends,PreDepends,Recommends:

apt-rdepends -f Depends,PreDepends,Recommends -s Depends,PreDepends,Recommends -p tcpdump

хотя и не дает всех зависимостей, которые находит debfoster в этом случае. (Например, debfoster находит, что tcpdump зависит от apt через libssl1. 0.0, debconf и apt-utils, но apt-rdepends нет.)

.
6
27.01.2020, 20:24

Теги

Похожие вопросы