在 Ubuntu 10.04 LTS 服务器上,我想列出已安装的软件包并查看它们来自哪个存储库。
列出已安装的软件包很容易,但它不包括存储库的名称(例如“main”或“universe”)。而且这些信息不在 中/var/lib/dpkg/status
,所以dpkg-query
也不会显示。
我想要获得一份“不受支持”的软件列表,即不是来自“主”存储库的软件,并且 Ubuntu 不保证其安全更新。
注意:这是一个服务器。它没有安装 X、GNOME 或 KDE。
答案1
好的,我知道该怎么做了:
aptitude search "~i" -F "%s# %p"
当然,可以通过 grep 轻松找到“universe”存储库中的项目:
aptitude search "~i" -F "%s# %p" | grep universe
答案2
您可以为 dpkg 命令的输出提供自定义格式(使用 -f 选项)。尝试使用 Origin 变量执行类似操作:
dpkg-query -f='${Package} ${Version}\t${Origin}\n' --get-selections
此页面上有更多有关格式参数的信息: http://www.tin.org/bin/man.cgi?section=1&topic=dpkg-query
默认格式字符串为“${Package}\t${Version}\n”。实际上,状态文件中的所有其他字段(即用户定义字段)也可以请求。它们将按原样打印,但不对它们进行转换或错误检查。要获取 dpkg 维护者的名称和已安装的版本,您可以运行:
dpkg-query -W -f='${Package} ${Version}\t${Maintainer}\n' dpkg
答案3
我尝试了 aptitude search ~i -F "%s# %p"
在 ubuntu 12.04 和 14.04 中,但它没有显示存储库。
所以我写了这个小脚本:
# more origins.sh
#!/bin/bash
for i in $(dpkg -l |grep ^ii |awk -F' ' '{print $2}'); do
apt-cache showpkg "$i"|head -3|grep -v '^Versions'|cut -d'(' -f2|cut -d')' -f1|sed -e 's/^Package: //;' | paste -d '\t' - -
done
然后
bash origins.sh|grep universe
答案4
这不完全是答案,但可能会有所帮助。前几天一位同事向我展示了这一点。您可以使用以下命令找出包的来源:
apt-cache policy <package-name>
例如:
apt-cache policy xterm
xterm:
Installed: 271-1ubuntu2.1
Candidate: 271-1ubuntu2.1
Version table: *** 271-1ubuntu2.1 0
500 http://mirror.internode.on.net/pub/ubuntu/ubuntu/ precise-updates/main amd64 Packages
100 /var/lib/dpkg/status
271-1ubuntu2 0
500 http://mirror.internode.on.net/pub/ubuntu/ubuntu/ precise/main amd64 Packages