![OpenSUSE:查找没有存储库的所有包](https://linux22.com/image/26859/OpenSUSE%EF%BC%9A%E6%9F%A5%E6%89%BE%E6%B2%A1%E6%9C%89%E5%AD%98%E5%82%A8%E5%BA%93%E7%9A%84%E6%89%80%E6%9C%89%E5%8C%85.png)
我刚刚通过将所有存储库更改为目标 12.2(而不是 12.1),从 OpenSUSE 12.1 升级到 OpenSUSE 12.2。现在我已经升级了,我发现了一堆没有存储库*的软件包,其中YaST 软件管理器版本栏中用红色文本标记。我可以滚动浏览这些并删除每一个,但我想知道是否齐普搜索 ( zypper se
) 或软件经理有什么方法可以同时定位/选择所有这些。
*- 这些包有一个存储库(OpenSUSE 12.1 等),但由于我用 12.2 存储库替换了这些存储库,它们不再具有存储库关联。这不会产生问题,因为 12.2 存储库应该包含运行系统所需的所有内容。
答案1
rpm -qa --qf '%-30{DISTRIBUTION} %{NAME}\n'| sort
为您提供软件包使用的所有存储库的列表。找到你不想要的那些留给读者作为练习。:-)
。
答案2
使用马丁的回答/guidance,我编写了一个快速脚本来删除一串包zremove.sh
:
#!/bin/sh
pkgs=""
while read line
do
pkgs="$pkgs $line"
done
zypper rm $pkgs
注意到我的所有“没有存储库”的包都有一个分布开放SUSE 12.1在里面转速查询时,我发出此命令来查找并删除所有这些:
rpm -qa --qf '%{DISTRIBUTION} : %{NAME}\n' | grep "openSUSE 12.1 :" | sed 's/openSUSE 12.1 : //' | sudo zremove.sh
这通常不能回答如何在没有后备存储库的情况下查找所有包的问题,但它确实解决了我最初的问题。
答案3
Repository: @System
当您对它们执行 a 操作时,将显示“丢失”其存储库或直接从 .rpm 文件安装的软件包zypper info
。所以理论上应该可以用 a 找到它们,zypper packages --repo @System --installed-only
但这在 libzypp 中仍然缺失(openSUSE Bug 770239 - “zypper pa”缺乏对 @System repo 的支持)。
作为一种解决方法,人们必须zypper info
对每个已安装的软件包进行操作,并为那些拥有存储库的人进行过滤@System
:
rpm -qa --queryformat="%{n}\n" | while read p; do zypper info $p | grep -q '^Repository: @System' && echo $p; done
相当慢,但可以完成工作。
答案4
以下命令列出了所有已安装的软件包,这些软件包不再具有引用的存储库或rpm
直接通过以下方式安装:
LC_ALL=C zypper pa --installed | awk '$0 ~ /^i/ && $3 == "@System" {print $5}'