问题描述
如何列出我从特定存储库安装的所有软件包?
如何列出Ubuntu主存档中不可用的所有已安装软件包,还可以查看它们来自哪些存储库? (如果我知道这个问题的答案,我可以在特定的PPA名称列表中查找我的第一个问题的答案。)
最佳解决办法
展开Ubuntu软件中心中的”Installed Software”项目。您将看到已启用的所有不同存储库的列表。单击仓库将显示您从每个仓库安装的软件包。
次佳解决办法
似乎没有安装包的来源记录。
如果您可以从下载相同名称的包中获取该位置,则可通过apt-cache policy
获取。以下(相当难看)脚本为我做了诀窍:
LC_ALL=C dpkg-query --showformat='${Package}:${Status}\n' -W '*' \
| fgrep ':install ok installed' \
| cut -d: -f1 \
| (while read pkg; do
inst_version=$(apt-cache policy $pkg \
| fgrep Installed: \
| awk '{ print $2 }');
origin=$(apt-cache policy "$pkg" \
| fgrep " *** ${inst_version}" -C1 \
| tail -n 1 \
| cut -c12-);
echo $pkg $origin;
done)
请注意,它非常脆弱,因为它对apt-cache policy
的输出做出了假设,这可能会在不同版本之间发生变化……
第三种解决办法
打开Synaptic Package Manager,然后单击左侧栏底部的”Origin”按钮。它会列出你的来源。选择源以查看可用/已安装的包。
第四种办法
此脚本列出了PPA中已安装和可用的软件包:
#!/bin/sh
# Give PPA name as an argument, e.g. ppa:oibaf/graphics-drivers
name1="$(echo "$1"|cut -d: -f2|cut -d/ -f1)"
name2="$(echo "$1"|cut -d/ -f2)"
awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' \
/var/lib/apt/lists/*"$name1"*"$name2"*Packages |
xargs dpkg-query -W -f='${Status} ${Package}\n' 2>/dev/null | awk '/^[^ ]+ ok installed/{print $4}'
我申请了this。
BTW至于从使用中去除PPA,使用ppa-purge程序;我已经创建了它的改进版本here。
第五种办法
在Quantal(12.10)下,需要删除原点线中的空间。
LC_ALL=C dpkg-query --showformat='${Package}:${Status}\n' -W '*' \
| fgrep ':install ok installed' \
| cut -d: -f1 \
| (while read pkg; do
inst_version=$(apt-cache policy $pkg \
| fgrep Installed: \
| cut -d: -f2-);
origin=$(apt-cache policy "$pkg" \
| fgrep " ***${inst_version}" -C1 \
| tail -n 1 \
| cut -c12-);
echo $pkg $origin;
done)