如何找到提供文件的包(跨发行版)

如何找到提供文件的包(跨发行版)

我想从脚本中检查命令是否存在,并在必要时建议安装相应的软件包。

在 Debian 系统上,我常常dpgk寻找提供某些特定文件的软件包,例如:

$ dpkg -S */envsubst
gettext-base: /usr/bin/envsubst

是否有某种解决方案适用于所有 Linux 系统,或者至少适用于最常见的系统?

如果没有几行代码,一些开源库也是受欢迎的。

答案1

在支持 PackageKit 的发行版上,您可以使用它:

$ pkcon search file envsubst
Searching by file             [=========================]
Starting                      [=========================]
Loading cache                 [=========================]
Querying                      [=========================]
Finished                      [=========================]
Installed       gettext-base-0.21-4.amd64 (installed:debian-stable-main)        GNU Internationalization utilities for the base system
Installed       git-1:2.30.2-1+deb11u2.amd64 (installed:debian-stable-security-main)   fast, scalable, distributed revision control system

不幸的是,为了在各个发行版中获得更可靠的结果,您需要指定完整路径,这意味着在您的情况下,您必须尝试各种可能的安装位置。因此在 Debian 上:

$ pkcon search file /usr/bin/envsubst
Searching by file             [=========================]         
Loading cache                 [=========================]         
Querying                      [=========================]         
Finished                      [=========================]         
Installed       gettext-base-0.21-4.amd64 (installed:debian-stable-main)        GNU Internationalization utilities for the base system

在 RHEL 8 上:

$ pkcon search file /usr/bin/envsubst
Searching by file             [=========================]         
Finished                      [=========================]         
Installed       gettext-0.19.8.1-17.el8.x86_64 (installed:anaconda)             GNU libraries and utilities for producing multi-lingual messages
Available       gettext-0.19.8.1-14.el8.x86_64 (rhel-8-for-x86_64-baseos-rpms)  GNU libraries and utilities for producing multi-lingual messages

许多发行版还安装了它command-not-found,它会告诉您如何使给定的命令可用(如果可能),或建议拼写错误候选者。

答案2

您可以使用pkgs.org在线网络服务,因为它支持您想要的大多数发行版,不附属但非常有用

如果您想从 CLI 获得它,您可以每月支付 5 美元订阅该 API,并构建一个小型 bash 函数来连接它

相关内容