查询从指定仓库安装的包有哪些

从参数上看,命令dnf repoquery --installed --repo=everything貌似可以实现这个功能,但实际输出为空。本脚本可以查询从某一个仓库(everything/update/epel)安装的包有哪些,或者查询从命令行手动安装的包(本地rpm)有哪些。

package-repo-query.sh

#!/bin/bash

# 检查是否提供了仓库参数
if [ -z "$1" ]; then
	echo "错误:请提供要查询的仓库名称作为参数。"
	echo "用法:$0 <仓库名称>"
	echo "示例:$0 update  或  $0 @commandline"
	exit 1
fi

# 规范化仓库名称(处理带@和不带@的情况)
repo_name="$1"
if [[ "$repo_name" != @* && ("$repo_name" = "System" || "$repo_name" = "commandline") ]]; then
	repo_name="@$repo_name"
fi

echo "正在查找从 '$repo_name' 仓库安装的包..."

# 遍历所有已安装的包
rpm -qa | while read -r pkg; do
	# 使用dnf查询包信息,提取仓库信息
	repo_info=$(yum info "$pkg" 2>/dev/null | grep -oP 'From repo\s+:\s+\K.*')

	# 检查仓库信息是否匹配(支持部分匹配,如"update"匹配"updates")
	if [[ -n "$repo_info" && "$repo_info" == *"$repo_name"* ]]; then
		echo "$pkg"
	fi
done

posted @ 2025-07-24 14:23  wanghongwei-dev  阅读(15)  评论(0)    收藏  举报