当前位置: 首页>>技术教程>>正文


如何列出我从特定存储库安装的所有软件包?

, ,

问题描述

如何列出我从特定存储库安装的所有软件包?

如何列出Ubuntu主存档中不可用的所有已安装软件包,还可以查看它们来自哪些存储库? (如果我知道这个问题的答案,我可以在特定的PPA名称列表中查找我的第一个问题的答案。)

最佳解决办法

展开Ubuntu软件中心中的”Installed Software”项目。您将看到已启用的所有不同存储库的列表。单击仓库将显示您从每个仓库安装的软件包。

apt,package-management,ubuntu

次佳解决办法

似乎没有安装包的来源记录。

如果您可以从下载相同名称的包中获取该位置,则可通过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)

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1855.html,未经允许,请勿转载。