Вывести визуальное (ASCII) дерево зависимостей Debian на терминал?


19

Я не уверен, что это вопрос SuperUser или UnixLinux, но я попробую здесь ...

Недавно я нашел это:

# 710689 - aptitude: использовать символы юникода в деревьях - Журналы отчетов об ошибках Debian

Было бы хорошо, если бы aptitude использовала символы юникода для деревьев в списках зависимостей, например, вместо:

--\ Depends (3)
   --- libc-dev-bin (= 2.17-3)
   --- libc6 (= 2.17-3)
   --- linux-libc-dev
 --\ Suggests (2)
   --- glibc-doc (UNSATISFIED)
   --\ manpages-dev

...

... и я подумал - вау, мне действительно нравится этот вывод дерева ASCII-art, я не знал, что это aptitudeможет сделать! Итак, я начинаю в течение часа возиться с aptitudeпереключателями командной строки - и я просто не могу получить этот вывод? Итак, мой первоначальный вопрос был - откуда этот вывод?

Через некоторое время я понял, что в моей системе, в aptitudeконечном счете, символические ссылки /usr/bin/aptitude-curses; и я наконец понял, что aptitudeимеет cursesинтерфейс!:/

Итак, я наконец запускаю aptitudeбез каких-либо аргументов - и поэтому cursesинтерфейс запускается, и я вижу что-то вроде этого:

склонностей-проклятия-терминал

... совершенно очевидно, что эти символы дерева ASCII происходят из интерфейса curses.

Поэтому мне было интересно - есть ли инструмент Debian / apt, который будет выводить такое «визуальное» дерево ASCII - но с фактическими зависимостями пакетов?

Я знаю о debtree - Графики зависимостей пакетов (также рекомендации по программному обеспечению - Как визуально отобразить зависимости пакетов? - Спросите Ubuntu ); но я бы предпочел, чтобы в терминале было что-то похожее на дерево каталогов (а не на «неупорядоченные» [с точки зрения положения узла] графы debtree, сгенерированные с помощью graphvizs dot).

Я также видел, есть ли что-нибудь, что будет отображать зависимости визуально, как дерево? , который рекомендует:

$ apt-rdepends aptitude
Reading package lists... Done
Building dependency tree       
Reading state information... Done
aptitude
  Depends: libapt-pkg4.10
  Depends: libboost-iostreams1.42.0 (>= 1.42.0-1)
  Depends: libc6 (>= 2.4)
  Depends: libcwidget3
  Depends: libept1
  Depends: libgcc1 (>= 1:4.1.1)
  Depends: libncursesw5 (>= 5.7+20100313)
  Depends: libsigc++-2.0-0c2a (>= 2.0.2)
  Depends: libsqlite3-0 (>= 3.7.3)
  Depends: libstdc++6 (>= 4.5)
  Depends: libxapian22
libapt-pkg4.10
libboost-iostreams1.42.0
  Depends: libbz2-1.0
  Depends: libc6 (>= 2.3.6-6~)
  Depends: libgcc1 (>= 1:4.1.1)
  Depends: libstdc++6 (>= 4.2.1)
  Depends: zlib1g (>= 1:1.1.4)
...

... что хорошо, потому что сначала перечисляются непосредственные зависимости требуемого пакета; а затем зависимости пакетов зависимостей первого уровня, и так далее - но это не представимы в виде дерева (а на самом деле, aptitude«s cursesинтерфейс просто показывает установленную информацию , когда вы расширяете узел зависимостей, он не расширяется до дальнейших зависимостей).

Итак, вопрос в том - есть ли инструмент, который бы генерировал граф дерева зависимостей с терминальными символами - как, скажем, в следующем псевдокоде:

$ pseudo-deb-graph --show-package="aptitude"

aptitude
  --- Depends: libapt-pkg4.10
  --\ Depends: libboost-iostreams1.42.0 (>= 1.42.0-1)
     --- Depends: libbz2-1.0
     --- Depends: libc6 (>= 2.4)
  --\ Depends: libc6 (>= 2.3.6-6~)
     --\ Depends: libc-bin (= 2.13-0ubuntu13)
        --- ...
     --\ Depends: libgcc1
        --- ...
     --\ Depends: tzdata
        --- ...
...

Ответы:


23

Вы можете сделать это с помощью скрипта bash

Исходный код: "apt-rdepends-tree"

https://gist.github.com/damphat/6214499

Бегать

# sudo apt-get install apt-rdepends
# save gist, above, as "apt-rdepends-tree"
# chmod +x apt-rdepends-tree
# ./apt-rdepends-tree gcc

Вывод выглядит так:

# ./apt-rdepends-tree gcc
├─ gcc
│    ├─ cpp (>= 4:4.7.2-1)
│    └─ gcc-4.7 (>= 4.7.2-1)
└─ package-a
     ├─ package-b
     └─ package-c
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.