Linux系统中的命令通常由发行版仓库安装的软件包提供。要确定哪个软件包提供特定命令,您可以使用特定于Linux发行版的包管理工具。这对于安装缺失的命令或排查软件包依赖关系非常有用。
目录
要在各种Linux发行版上查找哪个软件包提供某个命令,通常使用特定于您发行版的包管理系统(例如Apk、Apt、DNF、Pacman、Zypper等)。
以下是如何在一些最常见的Linux发行版中执行此操作的方法:
在Alpine Linux中,您可以使用apk包管理器来查找哪个软件包提供特定命令。
<code># apk search -e pstree pstree-2.40-r1</code>
此命令搜索Alpine Linux软件包存储库中与pstree命令相关的软件包。
以下是命令的细分:
通过运行apk search -e pstree,Alpine Linux将搜索其软件包存储库,查找提供pstree命令或精确命名为“pstree”的任何软件包。
如果pstree实用程序尚未安装在您的Alpine Linux系统上,这可以帮助您找到并安装包含pstree实用程序的软件包。
在Arch Linux及其变体(如EndeavourOS和Manjaro Linux)上,您可以使用带有-F或-Qo标志的pacman命令来搜索软件包中的文件(或命令)。
例如,以下命令将显示包含grep命令的软件包:
<code>$ pacman -F grep</code>
命令pacman -F grep用于查找提供特定文件或命令的软件包。
以下是命令不同部分的含义:
当您运行pacman -F grep时,包管理器将搜索其包数据库并列出所有包含名为grep的文件或可执行文件的已安装包。
此命令的输出通常会显示软件包名称和匹配grep的文件的完整路径。例如,输出可能如下所示:
<code>core/grep 3.11-1 usr/bin/grep [...]</code>
这表明grep命令由core存储库中的grep软件包提供,可执行文件位于/usr/bin/grep。
如果多个软件包提供与grep匹配的文件,则所有这些文件都将列出。相反,如果没有软件包提供名为grep的文件,则命令将不返回任何输出。
您还可以使用pacman -Qo命令查找哪个软件包拥有或提供特定文件或命令。
<code>$ pacman -Qo grep</code>
以下是命令不同部分的含义:
当您运行pacman -Qo grep时,pacman将搜索系统上所有已安装的软件包,并找到包含或提供名为grep的文件或可执行文件的软件包。
此命令的输出通常会显示拥有与grep匹配的文件的软件包名称。例如,输出可能如下所示:
<code>/usr/bin/grep is owned by grep 3.11-1</code>
这表明grep命令(位于/usr/bin/grep)由grep软件包提供。
如果多个软件包提供与grep匹配的文件,则所有这些文件都将列出。如果没有软件包拥有名为grep的文件,则命令将不返回任何输出。
此命令在您需要找出特定文件或命令属于Arch Linux系统上的哪个软件包时非常有用。它可以帮助您排查缺失的文件或依赖项,或帮助选择性地重新安装提供特定组件的软件包。
pacman -F grep和pacman -Qo grep之间的主要区别在于,-F搜索软件包数据库以查找包含特定文件的软件包,而-Qo搜索已安装在系统上的文件并查找拥有它们的软件包。
在基于Debian的系统(如Ubuntu)上,您可以使用带有-S选项的dpkg命令来搜索安装特定文件的软件包。
但是,如果文件尚未安装,则需要使用apt-file命令。首先,确保已安装apt-file并更新其数据库:
<code>$ sudo apt update $ sudo apt install apt-file $ sudo apt-file update</code>
然后,使用以下命令搜索提供特定命令(例如pstree命令)的软件包:
<code>$ apt-file search pstree</code>
示例输出:
<code>criu: /usr/lib/python3/dist-packages/pycriu/images/pstree_pb2.py manpages-ja: /usr/share/man/ja/man1/pstree.1.gz <strong><mark>psmisc: /usr/bin/pstree</mark></strong> psmisc: /usr/bin/pstree.x11 psmisc: /usr/share/man/de/man1/pstree.1.gz psmisc: /usr/share/man/fr/man1/pstree.1.gz psmisc: /usr/share/man/man1/pstree.1.gz psmisc: /usr/share/man/man1/pstree.x11.1.gz psmisc: /usr/share/man/pt_BR/man1/pstree.1.gz psmisc: /usr/share/man/ru/man1/pstree.1.gz psmisc: /usr/share/man/uk/man1/pstree.1.gz psmisc: /usr/share/pixmaps/pstree16.xpm psmisc: /usr/share/pixmaps/pstree32.xpm python-psutil-doc: /usr/share/doc/python-psutil-doc/examples/pstree.py recap: /usr/lib/recap/core/pstree systemtap-doc: /usr/share/systemtap/examples/process/pstree.meta systemtap-doc: /usr/share/systemtap/examples/process/pstree.stp tomoyo-tools: /usr/sbin/tomoyo-pstree tomoyo-tools: /usr/share/man/man8/tomoyo-pstree.8.gz</code>
正如您在上面的输出中注意到的那样,psmisc软件包提供了pstree命令。这种方法允许您识别安装所需的软件包或确保pstree在您的系统上可用。
或者,如果您已经安装了pstree并且只想确认pstree来自此软件包,则可以使用:
<code>$ dpkg -S pstree</code>
在Fedora和其他基于RPM的系统(如AlmaLinux、CentOS、RHEL和Rocky Linux)上,您可以使用dnf命令。在较旧的系统上,您可能需要使用yum。
例如,要搜索提供与模式*/pstree匹配的文件的软件包,您可以运行:
<code>$ dnf provides */pstree</code>
以下是命令的功能细分:
当您运行此命令时,DNF将搜索其软件包数据库并列出所有包含名为pstree的文件的可用软件包。此文件通常是pstree实用程序的可执行文件,它显示进程树。
此命令的输出将显示提供pstree文件的软件包名称和版本号。例如,输出可能如下所示:
<code>psmisc-23.6-4.fc39.x86_64 : Utilities for managing processes on your system Repo : fedora Matched from: Provide : /usr/bin/pstree</code>
这表明pstree文件(位于/usr/bin/pstree)主要由来自Fedora存储库的psmisc软件包(版本23.6-4)提供。
通过使用dnf provides命令,您可以找到需要安装哪些软件包才能在您的系统上获得特定文件或实用程序。
在SUSE和openSUSE上,您可以使用zypper se --provides命令搜索提供指定文件或可执行文件的软件包。
<code>$ zypper se --provides '/usr/bin/grep'</code>
以下是命令的细分:
当您运行此命令时,zypper将搜索其软件包数据库并列出所有包含或提供文件/usr/bin/grep的可用软件包。
此命令的输出将显示提供指定文件的软件包的名称、版本和存储库信息。例如,输出可能如下所示:
<code>Loading repository data... Reading installed packages... S | Name | Summary | Type -- ------------------------- ------------------------------------------ ------- | grep-3.11-3 | Pattern matching utilities | package [...]</code>
此输出表明文件/usr/bin/grep主要由grep软件包(版本3.11-3)提供。
在NixOS Linux中,您可以使用nix-env实用程序查找哪个软件包提供特定命令。
例如,要查找哪个软件包提供pstree命令,您可以运行:
<code>$ nix-env -qaP pstree</code>
这将搜索所有已安装的软件包,并在找到匹配项时打印出软件包名称和路径。
示例输出:
<code>nixpkgs.pstree pstree-2.39</code>
表明pstree命令由pstree-2.39软件包提供。
您还可以使用nix search命令查找提供特定命令的软件包的名称。虽然此命令仍在实验阶段,但您可以使用它来搜索软件包。
第一次运行时可能会很慢,但后续运行将使用缓存的结果。
例如,要查找包含pstree命令的软件包,请运行:
<code>$ nix --extra-experimental-features "nix-command flakes" search nixpkgs pstree</code>
示例输出:
<code>* legacyPackages.x86_64-linux.psmisc (23.6) A set of small useful utilities that use the proc filesystem (such as fuser, killall and pstree) * legacyPackages.x86_64-linux.pstree (2.39) Show the set of running processes as a tree</code>
我们可以使用Gentoo Linux中app-portage/gentoolkit软件包中的equery工具来查找哪个软件包提供特定命令。
确保您已安装app-portage/gentoolkit:
<code># emerge --ask app-portage/gentoolkit</code>
要搜索提供特定命令的软件包,请使用带有belongs选项的equery:
<code>equery belongs /path/to/command</code>
将/path/to/command替换为您要查找的命令的完整路径。
如果您不知道命令的路径,可以使用whereis命令来查找它。
<code># whereis pstree</code>
示例输出:
<code># whereis pstree pstree: <strong><mark>/usr/bin/pstree</mark></strong> /usr/share/man/man1/pstree.1.bz2</code>
现在让我们使用命令找出哪个软件包提供pstree命令:
<code># equery belongs /usr/bin/pstree</code>
这将输出提供grep命令的软件包名称和类别,例如:
<code> * Searching for /usr/bin/pstree ... sys-process/psmisc-23.6 (/usr/bin/pstree)</code>
表明pstree命令由sys-apps/psmisc软件包提供。
如果您只想搜索命令名称而不指定完整路径,则可以使用hasuse选项:
<code># equery hasuse search-term</code>
这将搜索具有特定USE标志或提供特定可执行文件的软件包。
大多数主要Linux发行版的包管理器都提供内置选项来识别提供特定命令或文件的软件包。它们允许您搜索软件包数据库并找到任何给定命令或文件的源软件包。
此功能通常有助于排查缺失的依赖项、选择性地重新安装软件包以及确保您的系统已安装必要的组件。
相关文章: 如何在Linux中查找提供特定文件的软件包
以上是如何查找哪个软件包在Linux中提供命令的详细内容。更多信息请关注PHP中文网其他相关文章!