对于我安装的每个软件包,我想知道如果卸载它会安装哪些软件包。我需要的输出示例是 ( package: list of deps
):
abc: foo bar
bcd: baz abc
bdd: baz fuubar
附加
ppp
如果我检查使用以下命令删除软件包后真正会删除的内容apt-get
:
$ echo $(apt-get --dry-run remove ppp | grep '^Remv ' | cut -d' ' -f2)
gnome-ppp mint-meta-xfce network-manager-pptp-gnome network-manager-pptp wvdial pppoeconf pppoe pptp-linux pppconfig ppp
我发现它与apt-cache
show 给我的不同(我认为不包括递归依赖项):
$ apt-cache show ppp | grep '^Breaks: '
Breaks: network-manager (<= 0.8.0.999-1), network-manager-pptp (<= 0.8.0.999-1), pppdcapiplugin (<= 1:3.9.20060704+dfsg.1-1)
附录2
是否有dpkg --get-selections | cut -f1
可靠的方法来获取已安装软件包的列表以进行迭代?
答案1
您在这里问了几个不同的问题,我希望我至少能帮助一两个。
要列出所有已安装的软件包,请使用dpkg
在字段分隔列表中输出
dpkg -l
只需获取包列表,无需额外字段,以便您可以将其通过管道传输到其他地方。
dpkg -l | awk '{print $2 }' # Pipe to grep after the awk, or glob from dpkg
例如,如果我想删除旧内核,
apt-get purge `dpkg -l linux* | awk '{print $2}' | grep 3.0.0-12`
遍历所有不需要的依赖项的最简单方法是使用debfoster
.它以交互方式运行,并遍历您想要的内容及其依赖项,并可以删除或列出非递归依赖项。
要列出特定包的所有递归依赖项,
debfoster -d $PACKAGE ## PACKAGE is the specific package.
执行后,debfoster
您可以检查包还具有的任何依赖项,
debfoster -e $PACKAGE ## PACKAGE is the specific package.
列出“孤立”包的一个非常好的方法是使用deborphan
.不带选项运行deborphan
,它将列出所有“孤立”包。 “孤儿”是一个不依赖任何东西的包,并且您没有明确安装。
我还喜欢在全新安装后清理所有“孤立”的软件包。在我删除特定的软件包后,您可以通过以下方式获取错过的任何内容apt-get autoremove --purge
:
apt-get purge `deborphan`
最后,有时您不这样做--purge
,最终会得到包“剩余物”,新版本apt-get
可以自动删除它们。要从已运行的已卸载软件包中删除所有“剩余”,
apt-get autoclean
如果您没有新版本的apt-get
,您可以随时使用这些命令删除它们。如果不存在“剩余”文件,它们会出错,似乎自动清理偶尔会丢失一些文件。
dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs dpkg --purge
答案2
apt-cache show pkgname1 pkgname2...
将(除其他外)列出这些(运行时)依赖项。这通常就足够了,除非您将其送入机器进行进一步加工。如果您希望它完全符合您所说的格式,您可能需要编写一个脚本。
答案3
我认为你必须继续并为同一件事创建一个循环:
apt-cache depends libtext-wrapi18n-perl |xargs apt-cache depends
当然删除标题。