首頁 > 系統教程 > Linux > 如何查找哪個軟件包在Linux中提供命令

如何查找哪個軟件包在Linux中提供命令

Christopher Nolan
發布: 2025-03-19 09:12:11
原創
455 人瀏覽過

Linux系統中的命令通常由發行版倉庫安裝的軟件包提供。要確定哪個軟件包提供特定命令,您可以使用特定於Linux發行版的包管理工具。這對於安裝缺失的命令或排查軟件包依賴關係非常有用。

目錄

    1. 在Alpine Linux中識別擁有Linux命令的軟件包
    1. 在Arch Linux、EndeavourOS和Manjaro Linux中查找Linux命令的軟件包來源
    1. 在Debian、Ubuntu及其衍生版中查找Linux命令的軟件包
    1. 在Fedora、CentOS、RHEL及其衍生版中查找特定命令的軟件包
    1. 在SUSE、openSUSE中識別與Linux命令關聯的軟件包
    1. 在NixOS中查找Linux命令背後的軟件包
    1. 在Gentoo中揭示命令來源
  • 結論

在Linux中查找提供特定命令的軟件包

要在各種Linux發行版上查找哪個軟件包提供某個命令,通常使用特定於您發行版的包管理系統(例如Apk、Apt、DNF、Pacman、Zypper等)。

以下是如何在一些最常見的Linux發行版中執行此操作的方法:

1. 在Alpine Linux中識別擁有Linux命令的軟件包

在Alpine Linux中,您可以使用apk包管理器來查找哪個軟件包提供特定命令。

 <code># apk search -e pstree pstree-2.40-r1</code>
登入後複製

How To Find Which Package Provides A Command In Linux

此命令搜索Alpine Linux軟件包存儲庫中與pstree命令相關的軟件包。

以下是命令的細分:

  • apk是Alpine Linux的包管理實用程序,類似於基於Debian的發行版的apt或基於Red Hat的發行版的yum。
  • search是搜索存儲庫中軟件包的命令。
  • -e或--exact是一個選項,它告訴apk搜索確切的軟件包名稱,而不是執行子字符串搜索。
  • pstree是您要搜索的軟件包名稱或命令名稱。

通過運行apk search -e pstree,Alpine Linux將搜索其軟件包存儲庫,查找提供pstree命令或精確命名為“pstree”的任何軟件包。

如果pstree實用程序尚未安裝在您的Alpine Linux系統上,這可以幫助您找到並安裝包含pstree實用程序的軟件包。

2. 在Arch Linux、EndeavourOS和Manjaro Linux中查找Linux命令的軟件包來源

在Arch Linux及其變體(如EndeavourOS和Manjaro Linux)上,您可以使用帶有-F或-Qo標誌的pacman命令來搜索軟件包中的文件(或命令)。

例如,以下命令將顯示包含grep命令的軟件包:

 <code>$ pacman -F grep</code>
登入後複製

命令pacman -F grep用於查找提供特定文件或命令的軟件包。

以下是命令不同部分的含義:

  • pacman:這是Arch Linux的包管理器。
  • -F(或--files):此選項告訴pacman搜索包含特定文件的軟件包。
  • grep:這是您要搜索的文件或命令。在本例中,它是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:這是Arch Linux的包管理器。
  • -Q:此選項告訴pacman查詢本地軟件包數據庫。
  • -o(或--owns):此選項指定您要搜索擁有特定文件的軟件包。
  • grep:這是您要搜索的文件或命令。在本例中,它是grep命令。

當您運行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搜索已安裝在系統上的文件並查找擁有它們的軟件包。

3. 在Debian、Ubuntu及其衍生版中查找Linux命令的軟件包

在基於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></strong></code><mark> psmisc: /usr/bin/pstree</mark>
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 
登入後複製

How To Find Which Package Provides A Command In Linux

正如您在上面的輸出中註意到的那樣,psmisc軟件包提供了pstree命令。這種方法允許您識別安裝所需的軟件包或確保pstree在您的系統上可用。

或者,如果您已經安裝了pstree並且只想確認pstree來自此軟件包,則可以使用:

 <code>$ dpkg -S pstree</code>
登入後複製

4. 在Fedora、CentOS、RHEL及其衍生版中查找特定命令的軟件包

在Fedora和其他基於RPM的系統(如AlmaLinux、CentOS、RHEL和Rocky Linux)上,您可以使用dnf命令。在較舊的系統上,您可能需要使用yum。

例如,要搜索提供與模式*/pstree匹配的文件的軟件包,您可以運行:

 <code>$ dnf provides */pstree</code>
登入後複製

以下是命令的功能細分:

  • dnf:這是DNF包管理器命令。
  • provides:此子命令告訴DNF搜索提供特定文件或功能的軟件包。
  • */pstree:這是一個glob模式,它匹配任何名為pstree的文件。 *部分錶示文件名之前的“任何字符”。

當您運行此命令時,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命令,您可以找到需要安裝哪些軟件包才能在您的系統上獲得特定文件或實用程序。

5. 在SUSE、openSUSE中識別與Linux命令關聯的軟件包

在SUSE和openSUSE上,您可以使用zypper se --provides命令搜索提供指定文件或可執行文件的軟件包。

 <code>$ zypper se --provides '/usr/bin/grep'</code>
登入後複製

以下是命令的細分:

  • zypper:這是ZYpp包管理器的命令行界面。
  • se:這是search子命令的縮寫,它搜索軟件包。
  • --provides:此選項告訴zypper搜索提供特定文件或功能的軟件包。
  • '/usr/bin/grep':這是您要搜索的文件或可執行文件路徑。在本例中,它是grep命令的路徑,通常位於/usr/bin/grep。

當您運行此命令時,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)提供。

6. 在NixOS中查找Linux命令背後的軟件包

在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>
登入後複製

7. 在Gentoo中揭示命令來源

我們可以使用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></strong></code><mark> /usr/bin/pstree</mark> /usr/share/man/man1/pstree.1.bz2
登入後複製

現在讓我們使用命令找出哪個軟件包提供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軟件包提供。

How To Find Which Package Provides A Command In Linux

如果您只想搜索命令名稱而不指定完整路徑,則可以使用hasuse選項:

 <code># equery hasuse search-term</code>
登入後複製

這將搜索具有特定USE標誌或提供特定可執行文件的軟件包。

結論

大多數主要Linux發行版的包管理器都提供內置選項來識別提供特定命令或文件的軟件包。它們允許您搜索軟件包數據庫並找到任何給定命令或文件的源軟件包。

此功能通常有助於排查缺失的依賴項、選擇性地重新安裝軟件包以及確保您的系統已安裝必要的組件。

相關文章:如何在Linux中查找提供特定文件的軟件包

以上是如何查找哪個軟件包在Linux中提供命令的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板