如何检查多个软件包中的一个是否未安装

如何检查多个软件包中的一个是否未安装

如何检查 Fedora 中是否安装了某个软件包?

假设我已经安装了curl ca-certificates gnupg2 lldb python3-minimal gcc libc6-dev,我想检查if其中是否有任何未安装。

到目前为止我唯一能想到的就是调用dnf list installed并手动比较输出。

答案1

rpm -q curl

如果安装了指定的包curl,将返回空状态(成功),如果没有,则返回失败代码;例如

rpm -q curl > /dev/null || printf "curl not installed\n"
rpm -q gnupg2 > /dev/null && printf "gnupg2 installed\n"
if rpm -q gcc > /dev/null ; then
  ;
else
  printf "Missing GCC; will not be able to compile naught from nothing!\n"
fi

效果很好。

一种更通用的方法是询问dnf repoquery --installed;例如dnf repoquery --installed --whatprovides python3可以用来检测哪个包包含 python3.但是,您需要通过类似if [ -z "$(dnf repoquery --installed --whatprovides python3)" ].优点在于能够询问是否有某个软件包安装了/usr/bin/foo( dnf repoquery --installed -f /usr/bin/foo) 或某些库的 pkg-config ( dnf repoquery --installed --whatprovides "pkgconfig(libcurl)"),而不必知道这些东西位于哪个软件包中。

相关内容