![如何找到提供文件的包(跨发行版)](https://linux22.com/image/218803/%E5%A6%82%E4%BD%95%E6%89%BE%E5%88%B0%E6%8F%90%E4%BE%9B%E6%96%87%E4%BB%B6%E7%9A%84%E5%8C%85%EF%BC%88%E8%B7%A8%E5%8F%91%E8%A1%8C%E7%89%88%EF%BC%89.png)
我想从脚本中检查命令是否存在,并在必要时建议安装相应的软件包。
在 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 函数来连接它