Zypper:如何列出不在存储库中的已安装软件包

Zypper:如何列出不在存储库中的已安装软件包

在使用 Zypper 进行包管理的系统中(在我的情况下是 openSuse),如何获取与当前启用的存储库无关的所有已安装包的列表?

实际问题:升级发行版时(例如,从 openSuse 12.1 升级到 12.2),我会禁用所有已启用的非标准存储库。通常,我只是为了获取特定工具的新版本而添加它们,但默认情况下,更新后的发行版会包含该新版本。但有时,会从存储库安装其他软件包,但我不知道如何检测这些软件包。系统可以正常运行,但这些软件包永远不会更新,因为我在升级后删除了提供存储库。

答案1

这与 zypper 查询有些混乱。

1)查找来自非 opensuse-distribution-repositories 的已安装软件包:

zypper search -s | grep "i |" | grep -vi "| patch" | grep -vi "| opensuse" > list1.txt

2)查找可从 openSUSE 存储库获得的软件包(无论是否已安装):

zypper search -s | grep "v |" | grep -vi "| patch" | grep -i "| opensuse" > list2.txt

3) 找出列表 1 中未在列表 2 中出现的包:

cat list1.txt | cut -d " " -f3 | cut -d " " -f1 | while read line
do
    if [ "$(cat list2.txt | grep -i $line)" = "" ]; then
        echo "$line"
    fi
done

这应该可以解决这个问题(在 openSUSE 11.3 上测试)。

答案2

这个选项pa可能更合适:

zypper pa -i

列出所有已安装的软件包及其可用版本和存储库。您可以使用以下标志选择仅列出属于特定存储库的软件包-r

zypper pa -i -r openSUSE-12.1

从那里开始,您可以使用@ernestopheles 提出的策略来找到符合您需求的策略。

答案3

在较新版本的 openSUSE 中,您可以使用

zypper pa --orphaned

列出这些包。

相关内容