it-swarm.cn

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

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

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

51
Marius Gedminas

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

alt text

24
andrewsomething

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

如果您可以从中下载相同名称的包,那么可以通过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的输出进行了假设,这可能会在不同版本之间发生变化......

26
Riccardo Murri

打开Synaptic Package Manager,然后单击左侧栏底部的“Origin”按钮。它会列出你的来源。选择源以查看可用/已安装的包。

23
lovinglinux

此脚本列出了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}'

我申请

BTW至于从使用中去除PPA,使用ppa-purge程序;我已经创建了它的改进版本 这里

4
jarno

在Quantal(12.10)下,需要删除Origin行中的空格。

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)
3
Graham Dunn