在 Ubuntu Linux 中,如何列出从“universe”存储库安装的软件包?

在 Ubuntu Linux 中,如何列出从“universe”存储库安装的软件包?

在 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

相关内容