将可视化 (ASCII) Debian 依赖树输出到终端?

sda*_*aau 26 linux aptitude debian apt

我不确定这是否更像是 SuperUser 或 UnixLinux 问题,但我会在这里尝试...

最近,我发现了这个:

#710689 - aptitude:在树中使用 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
Run Code Online (Sandbox Code Playgroud)

...

...我想 - 哇,我真的很喜欢那个 ASCII 艺术树输出,不知道aptitude可以做到这一点!所以,我开始用aptitude命令行开关弄乱了一个小时- 我根本无法获得该输出?所以我最初的问题是 - 该输出首先来自哪里?!

过了一会儿,我意识到在我的系统上,aptitude最终符号链接到/usr/bin/aptitude-curses; 我终于意识到aptitude有一个curses接口!:/

所以,我终于在aptitude没有任何参数的情况下运行了- 所以curses界面启动了,我可以看到这样的东西:

能力诅咒终端

...很明显,这些 ASCII 树字符来自 Curses 界面。

所以我想知道 - 是否有一个 Debian/apt 工具,它会输出这样一个“可视化”的 ASCII 树 - 但有实际的软件包依赖关系?

我知道Debree - 包依赖关系图(还有软件推荐 - 如何直观地显示包的依赖关系? - 问 Ubuntu);但我宁愿在终端中有一些东西,类似于目录树(而不是debtreegraphviz'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)
...
Run Code Online (Sandbox Code Playgroud)

... 这很好,因为它首先列出了所需包的直接依赖项;然后是一级依赖包的依赖,依此类推——但它没有被可视化为树(实际上,当你展开依赖节点时,它aptitudecurses界面只显示安装的信息;它不会扩展到进一步的依赖)。

所以,问题是 - 是否有一种工具可以生成带有终端字符的依赖树图 - 例如,在以下伪代码中:

$ 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
        --- ...
...
Run Code Online (Sandbox Code Playgroud)

小智 28

你可以用 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
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

# ./apt-rdepends-tree gcc
?? gcc
?    ?? cpp (>= 4:4.7.2-1)
?    ?? gcc-4.7 (>= 4.7.2-1)
?? package-a
     ?? package-b
     ?? package-c
Run Code Online (Sandbox Code Playgroud)