如何查找在Linux中提供特定文件的包

时间:2020-03-21 11:43:42  来源:igfitidea点击:

此简短教程解释了一些不同的方法来查找在Linux中提供特定文件的包。
当我们手动编译并安装包时,这可能很有用。
当我们从源编译包时,有机会我们可能会收到错误的错误,例如"无规则",以"<somefile>"所需的"无规则"。
停止。
"我们可能不知道哪个软件包提供丢失的文件。
在这种情况下,我们可以轻松地查找提供这些缺失文件的软件包,并如本教程中所述在Linux框中安装它们。

找到在Linux中提供特定文件的包

Arch Linux,Antergos,Manjaro Linux:

在基于ARCH的情况下,有一个名为PKGFILE的小命令行工具,用于搜索来自包的文件。

Pkgfile使用Arch Linux预安装。
如果不是,可以使用以下命令安装:

$sudo pacman -S pkgfile

然后,运行以下命令用pkgfile数据库同步:

$sudo pkgfile -u

现在,我们可以找到提供特定文件的包,例如alisp.h,使用命令:

$pkgfile alisp.h
extra/alsa-lib

在上面的输出中看到,Alsa-lib包提供了Alisp.h文件。
而且,包可从另外的存储库中获取。
我们现在可以安装此软件包,如下所示。

$sudo pacman -S alsa-lib

要列出alsa-lib包提供的所有文件,请运行:

$pkgfile -l alsa-lib

Rhel,Centos,Fedora:

在基于yum的系统中,如Rhel及其克隆等CentOS,Scienific Linux,我们可以使用以下命令找到拥有特定文件的包:

$yum whatprovides '*filename'

在Fedora上,使用以下命令(而不是:

$dnf provides '*filename'

如果该文件已在系统中已有,例如可以说出/bin/ls,则可以找到使用命令拥有文件的包:

# rpm -qf /bin/ls
coreutils-8.22-18.el7.x86_64

我们还可以使用repoquery命令如下:

$repoquery -f /bin/ls

如果系统中没有repoquery命令,请安装yum-utils包。

$sudo yum install yum-utils

或者,

$sudo dnf install yum-utils

Debian,Ubuntu,Linux Mint:

在任何基于DEB的系统中,我们可以使用APT文件工具找到提供某个文件的包。

安装apt-file,如下所示,如果未安装它已显示:

$sudo apt-get install apt-file

如果我们刚刚安装了APT文件,则系统范围的缓存可能为空。
我们需要以root身份运行"APT-File Update"以更新缓存。
我们还可以将"APT-File Update"作为普通用户运行,以在用户的主目录中使用缓存。

让我们使用命令更新数据库缓存:

$sudo apt-file update

然后,然后搜索包含特定文件的软件包,例如Alisp.h,具有命令:

$apt-file find alisp.h

或者,

$apt-file search alisp.h

示例是:

libasound2-dev: /usr/include/alsa/alisp.h

好吧,libasound2-dev它是!我们可以使用命令安装此软件包:

$sudo apt-get install libasound2-dev

如果我们已经拥有该文件,并且只想知道它所属的包,我们可以使用DPKG命令,如下所示。

$dpkg -S $(which alisp.h)

或者,

$dpkg -S `which alisp.h`

如果我们了解文件的完整路径,例如例如/bin/ls,则可以搜索使用以下命令所属的软件包:

$dpkg -S /bin/ls
coreutils: /bin/ls

SUSE/OPENSUSE:

在SUSE和OpenSuse上,运行以下命令以查找某个文件所属的包。

$zypper wp alisp.h

或者,

$zypper se --provides --match-exact alisp.h