Output visivo (ASCII) albero delle dipendenze Debian sul terminale?


19

Non sono sicuro che si tratti più di una domanda SuperUser o UnixLinux, ma proverò qui ...

Di recente, ho trovato questo:

# 710689 - aptitude: usa il carattere unicode negli alberi - Log dei report dei bug di Debian

Sarebbe bello quando aptitude usasse i caratteri unicode per gli alberi negli elenchi delle dipendenze, ad esempio invece di:

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

...

... e ho pensato: wow, mi piace molto quell'output dell'albero di arte ASCII, non sapevo che aptitudepotesse farlo! Quindi, inizio a fare casino per un'ora con le aptitudeopzioni della riga di comando - e semplicemente non riesco a ottenere quell'output? Quindi la mia domanda iniziale era: da dove proviene quell'output ?!

Dopo un po ', mi sono reso conto che sul mio sistema, alla aptitudefine , si collegava a symlink /usr/bin/aptitude-curses; e ho finalmente capito che aptitudeha cursesun'interfaccia!:/

Quindi, finalmente corro aptitudesenza argomenti - e quindi l' cursesinterfaccia si avvia, e posso vedere qualcosa del genere:

attitudine-curses terminale

... così ovviamente, quei personaggi dell'albero ASCII provengono dall'interfaccia delle maledizioni.

Quindi mi chiedevo: esiste uno strumento Debian / apt, che produrrà un albero ASCII "visivo" - ma con effettive dipendenze dei pacchetti?

Conosco il debito - Grafici di dipendenza del pacchetto (anche raccomandazione del software - Come visualizzare visivamente le dipendenze di un pacchetto? - Chiedi a Ubuntu ); ma preferirei avere qualcosa nel terminale, simile a un albero di directory (piuttosto che ai grafici "non ordinati" [in termini di posizione del nodo] debtree, generati da graphviz"s" dot.

Ho visto anche C'è qualcosa che mostrerà le dipendenze visivamente, come un albero? , che raccomanda:

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

... il che è positivo, perché elenca innanzitutto le dipendenze immediate del pacchetto richiesto; e quindi le dipendenze dei pacchetti di dipendenza di primo livello, e così via - ma non viene visualizzato come un albero (e in realtà aptitudel' cursesinterfaccia mostra semplicemente le informazioni installate quando si espande il nodo di dipendenza; non si espande in ulteriori dipendenze).

Quindi, la domanda è: esiste uno strumento che produrrebbe un grafico ad albero delle dipendenze con caratteri terminali - come, diciamo, nel seguente pseudocodice:

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

Risposte:


23

Puoi farlo con lo script bash

Codice sorgente: "apt-rdepends-tree"

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

Correre

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

L'output è simile al seguente:

# ./apt-rdepends-tree gcc
├─ gcc
│    ├─ cpp (>= 4:4.7.2-1)
│    └─ gcc-4.7 (>= 4.7.2-1)
└─ package-a
     ├─ package-b
     └─ package-c
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.