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

abe*_*ier 0 fedora dnf

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

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

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

Mar*_*ler 5

rpm -q curl
Run Code Online (Sandbox Code Playgroud)

如果安装了指定的包,将返回空状态(成功)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
Run Code Online (Sandbox Code Playgroud)

效果很好。

一种更通用的方法是询问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)"),而不必知道这些东西位于哪个软件包中。