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></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
正如您在上面的輸出中註意到的那樣,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></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軟件包提供。
如果您只想搜索命令名稱而不指定完整路徑,則可以使用hasuse選項:
<code># equery hasuse search-term</code>
這將搜索具有特定USE標誌或提供特定可執行文件的軟件包。
大多數主要Linux發行版的包管理器都提供內置選項來識別提供特定命令或文件的軟件包。它們允許您搜索軟件包數據庫並找到任何給定命令或文件的源軟件包。
此功能通常有助於排查缺失的依賴項、選擇性地重新安裝軟件包以及確保您的系統已安裝必要的組件。
相關文章:如何在Linux中查找提供特定文件的軟件包
以上是如何查找哪個軟件包在Linux中提供命令的詳細內容。更多資訊請關注PHP中文網其他相關文章!