在Ubuntu 10.04 LTS服务器上,我想列出已安装的软件包并查看它们来自哪个存储库。
列出已安装的软件包很简单,但不包括存储库的名称(如“main”或“universe”)。 而这个信息不在/var/lib/dpkg/status ,所以dpkg-query也不会显示它。
我想获得“不受支持”软件的列表,即不是来自“主”存储库的软件,而且Ubuntu不保证安全更新。
注意:这是一个服务器。 它没有安装X,GNOME或KDE。
好吧,我想出了如何做到这一点:
aptitude search "~i" -F "%s# %p"
当然可以很容易地从“universe”存储库中find项目:
aptitude search "~i" -F "%s# %p" | grep universe
您可以为dpkg命令的输出提供自定义格式(使用-f选项)。 像这样尝试使用Originvariables:
dpkg-query -f='${Package} ${Version}\t${Origin}\n' --get-selections
有关此页面上的格式参数的更多信息: http : //www.tin.org/bin/man.cgi? section=1&topic=dpkg- query
默认的格式string是“$ {Package} \ t $ {Version} \ n”。 实际上,状态文件中的所有其他字段(即用户定义字段)也可以被请求。 他们将被打印,但是没有转换和错误检查。 要获得dpkg维护者的名称和安装的版本,可以运行:
dpkg-query -W -f ='$ {Package} $ {Version} \ t $ {Maintainer} \ n'dpkg
我试过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
这不完全是一个答案,但可能会用来帮助。 有一天同事给我看了这个。 你可以使用这个命令找出软件包的位置:
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