如何查找在Linux中提供特定文件的包
此简短教程解释了一些不同的方法来查找在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