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


19

Я не впевнений, чи це більше питання щодо SuperUser або UnixLinux, але я спробую тут ...

Нещодавно я виявив таке:

# 710689 - здатність: використовувати символи unicode в деревах - журнали звітів про помилки Debian

Було б добре, коли aptitude використовує символи unicode для дерев у списках залежностей, наприклад замість:

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

...

... і я подумав - ух, мені дуже подобається, що таке дерево ASCII-мистецтва, не знав, що aptitudeможе це зробити! Отже, я починаю возитися на годину з aptitudeперемикачами командного рядка - і я просто не можу отримати цей вихід? Тож моє первинне запитання було - звідки в першу чергу береться цей результат ?!

Через деякий час я зрозумів, що в моїй системі, aptitudeзрештою, це посилається на /usr/bin/aptitude-curses; і я нарешті зрозумів, що aptitudeмає cursesінтерфейс!:/

Отже, я нарешті запускаюсь aptitudeбез жодних аргументів - і так cursesзапускається інтерфейс, і я бачу щось подібне:

aptitude-curses-термінал

... так очевидно, що ці символи дерева ASCII походять з інтерфейсу curses.

Тож мені було цікаво - чи існує інструмент Debian / apt, який видасть таке «візуальне» дерево ASCII - але з реальною залежністю пакетів?

Я знаю про заборгованість - графіки залежності пакетів (також рекомендація щодо програмного забезпечення - як візуально відображати залежності пакету? - запитати Ubuntu ); але я вважаю за краще щось у терміналі, що нагадує дерево каталогів (а не графіки з "не упорядкованого" [з точки зору положення вузла] debtree, породженого graphviz's 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.