Wyjście wizualne (ASCII) Drzewo zależności Debiana do terminala?


19

Nie jestem pewien, czy jest to raczej pytanie SuperUser czy UnixLinux, ale spróbuję tutaj ...

Ostatnio znalazłem to:

# 710689 - aptitude: użyj znaków Unicode na drzewach - dzienniki raportów błędów Debiana

Byłoby miło, gdyby aptitude użył znaków Unicode dla drzew na listach zależności, np. Zamiast:

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

...

... i pomyślałem - wow, naprawdę podoba mi się to drzewo ASCII-art, nie wiedziałem, że to aptitudemoże zrobić! Więc zaczynam bałagan na godzinę za pomocą aptitudeprzełączników wiersza poleceń - i po prostu nie mogę uzyskać tego wyniku? Więc moje początkowe pytanie brzmiało - skąd w ogóle pochodzi ta produkcja ?!

Po chwili zdałem sobie sprawę, że w moim systemie aptitudeostatecznie dowiązania symboliczne do /usr/bin/aptitude-curses; i w końcu zdałem sobie sprawę, że aptitudema cursesinterfejs!:/

W końcu uruchamiam aptitudebez żadnych argumentów - cursesinterfejs się uruchamia i widzę coś takiego:

aptitude-curses-terminal

... więc całkiem oczywiste, te znaki drzewa ASCII pochodzą z interfejsu klątwy.

Zastanawiałem się więc - czy istnieje narzędzie Debian / apt, które wyświetli takie „wizualne” drzewo ASCII - ale przy rzeczywistych zależnościach pakietów?

Wiem o zadłużeniu - Wykresy zależności pakietów (także zalecenia dotyczące oprogramowania - Jak wizualnie wyświetlać zależności pakietu? - Zapytaj Ubuntu ); ale wolę mieć coś w terminalu, przypominające drzewo katalogów (zamiast grafów „nieuporządkowanych” [pod względem pozycji węzła] debtree, generowanych przez graphviz's dot).

Widziałem też Czy jest coś, co wizualnie pokaże zależności, jak drzewo? , który zaleca:

$ 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)
...

... co jest dobre, ponieważ najpierw wyświetla listę bezpośrednich zależności wymaganego pakietu; a następnie Zależności paczek zależność pierwszego stopnia, i tak dalej - ale to nie jest wizualizowane w postaci drzewa (a właściwie aptitude„s cursesinterfejs po prostu pokazuje zainstalowane informacji po rozwinięciu węzła zależności, ale nie rozszerza się na dalsze zależności).

Tak więc pytanie brzmi - czy istnieje narzędzie, które tworzy wykres drzewa zależności ze znakami końcowymi - jak, powiedzmy, w następującym pseudokodzie:

$ 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
        --- ...
...

Odpowiedzi:


23

Możesz to zrobić za pomocą skryptu bash

Kod źródłowy: „apt-rdepends-tree”

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

Biegać

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

Dane wyjściowe wyglądają tak:

# ./apt-rdepends-tree gcc
├─ gcc
│    ├─ cpp (>= 4:4.7.2-1)
│    └─ gcc-4.7 (>= 4.7.2-1)
└─ package-a
     ├─ package-b
     └─ package-c
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.