Website-Suche

Wie man herausfindet, welches Paket einen Befehl in Linux bereitstellt


Auf Linux-Systemen werden Befehle typischerweise von Paketen bereitgestellt, die aus den Repositorien der Distribution installiert werden. Um herauszufinden, welches Paket einen bestimmten Befehl bereitstellt, können Sie paketverwaltungsspezifische Werkzeuge Ihrer Linux-Distribution verwenden. Dies kann nützlich sein, um fehlende Befehle zu installieren oder Paketabhängigkeitsprobleme zu beheben.

Finden Sie, welches Paket einen bestimmten Befehl in Linux bereitstellt

Um herauszufinden, welches Paket einen bestimmten Befehl unter verschiedenen Linux-Distributionen bereitstellt, verwendet man im Allgemeinen das für die eigene Distribution spezifische Paketverwaltungssystem (z. B. Apk, Apt, DNF, Pacman, Zypper usw.).

So können Sie es für einige der gebräuchlichsten Linux-Distributionen tun:

1. Identifizieren Sie das Paket, das einen Linux-Befehl in Alpine Linux besitzt

In Alpine Linux können Sie den Paketmanager apk verwenden, um herauszufinden, welches Paket einen bestimmten Befehl bereitstellt.

# apk search -e pstree
pstree-2.40-r1

Finden Sie heraus, welches Paket den angegebenen Befehl in Alpine Linux bereitstellt

Dieser Befehl sucht im Alpine-Linux-Paket-Repository nach Paketen, die sich auf den Befehl pstree beziehen.

Hier ist eine Aufschlüsselung des Befehls:

  • apk ist das Paketverwaltungsprogramm für Alpine Linux, ähnlich wie apt für Debian-basierte Distributionen oder yum für Red Hat-basierte Distributionen.
  • search ist der Befehl, um nach Paketen in den Repositories zu suchen.
  • -e oder --exact ist eine Option, die apk anweist, nach einem genauen Paketnamen zu suchen, anstatt eine Teilstringsuche durchzuführen.
  • pstree ist der Paketname oder der Befehl, nach dem Sie suchen.

Durch das Ausführen von apk search -e pstree wird Alpine Linux seine Paket-Repositories nach allen Paketen durchsuchen, die den Befehl pstree bereitstellen oder genau "pstree" heißen.

Dies kann Ihnen helfen, das Paket, das das pstree-Dienstprogramm enthält, zu finden und zu installieren, falls es auf Ihrem Alpine-Linux-System noch nicht installiert ist.

2. Finde die Paketquelle eines Linux-Befehls in Arch Linux, EndeavourOS und Manjaro Linux

Unter Arch Linux und seinen Varianten wie EndeavourOS und Manjaro Linux können Sie den Befehl pacman mit den Optionen -F oder -Qo verwenden, um nach der Datei (oder dem Befehl) in Paketen zu suchen.

Zum Beispiel zeigt der folgende Befehl die Pakete an, die den Befehl grep enthalten:

$ pacman -F grep

Der Befehl pacman -F grep wird verwendet, um herauszufinden, welches Paket bzw. welche Pakete eine bestimmte Datei oder einen bestimmten Befehl bereitstellen.

Hier ist, was die verschiedenen Teile des Befehls bedeuten:

  • pacman: Dies ist der Paketmanager für Arch Linux.
  • -F (oder --files): Diese Option weist pacman an, nach Paketen zu suchen, die eine bestimmte Datei enthalten.
  • grep: Dies ist die Datei oder der Befehl, nach dem Sie suchen. In diesem Fall ist es der grep-Befehl.

Wenn Sie pacman -F grep ausführen, durchsucht der Paketmanager seine Paketdatenbanken und listet alle installierten Pakete auf, die eine Datei oder ein ausführbares Programm namens grep enthalten.

Die Ausgabe dieses Befehls zeigt typischerweise den Paketnamen bzw. die Paketnamen und den vollständigen Pfad bzw. die vollständigen Pfade der Datei bzw. Dateien, die grep entsprechen. Zum Beispiel könnte die Ausgabe ungefähr so aussehen:

core/grep 3.11-1
    usr/bin/grep
[...]

Dies zeigt an, dass der grep-Befehl vom grep-Paket aus dem core-Repository bereitgestellt wird und die ausführbare Datei sich unter /usr/bin/grep befindet.

Wenn mehrere Pakete Dateien bereitstellen, die mit grep übereinstimmen, werden sie alle aufgelistet. Umgekehrt, wenn kein Paket eine Datei namens grep bereitstellt, gibt der Befehl keine Ausgabe zurück.

Sie können auch den Befehl pacman -Qo verwenden, um herauszufinden, welches Paket eine bestimmte Datei oder einen bestimmten Befehl besitzt oder bereitstellt.

$ pacman -Qo grep

Hier ist, was die verschiedenen Teile des Befehls bedeuten:

  • pacman: Dies ist der Paketmanager für Arch Linux.
  • -Q: Diese Option weist pacman an, die lokale Paketdatenbank abzufragen.
  • -o (oder --owns): Diese Option gibt an, dass Sie nach dem Paket suchen möchten, das eine bestimmte Datei besitzt.
  • grep: Dies ist die Datei oder der Befehl, nach dem Sie suchen. In diesem Fall ist es der grep-Befehl.

Wenn Sie pacman -Qo grep ausführen, wird pacman alle auf Ihrem System installierten Pakete durchsuchen und das/die Paket(e) finden, das/die die Datei oder ausführbare Datei mit dem Namen grep enthält oder bereitstellt.

Die Ausgabe dieses Befehls zeigt typischerweise den Paketnamen/die Paketnamen an, die die Datei(en) besitzen, die grep entsprechen. Zum Beispiel könnte die Ausgabe ungefähr so aussehen:

/usr/bin/grep is owned by grep 3.11-1

Dies zeigt, dass der grep-Befehl (befindlich unter /usr/bin/grep) vom grep-Paket bereitgestellt wird.

Wenn mehrere Pakete Dateien bereitstellen, die grep entsprechen, werden sie alle aufgelistet. Wenn kein Paket eine Datei mit dem Namen grep besitzt, gibt der Befehl keine Ausgabe zurück.

Dieser Befehl ist nützlich, wenn Sie herausfinden müssen, zu welchem Paket eine bestimmte Datei oder ein bestimmter Befehl auf Ihrem Arch-Linux-System gehört. Er kann Ihnen helfen, fehlende Dateien oder Abhängigkeiten zu beheben oder beim gezielten Neuinstallieren von Paketen zu unterstützen, die bestimmte Komponenten bereitstellen.

Der Hauptunterschied zwischen pacman -F grep und pacman -Qo grep besteht darin, dass -F die Paketdatenbanken nach Paketen durchsucht, die eine bestimmte Datei enthalten, während -Qo die bereits auf Ihrem System installierten Dateien durchsucht und herausfindet, welche Pakete sie besitzen.

3. Das Paket für einen Linux-Befehl in Debian, Ubuntu und Derivaten finden

Auf Debian-basierten Systemen (wie Ubuntu) können Sie den Befehl dpkg mit der Option -S verwenden, um nach dem Paket zu suchen, das eine bestimmte Datei installiert hat.

Wenn die Datei jedoch noch nicht installiert ist, möchten Sie den Befehl apt-file verwenden. Stellen Sie zunächst sicher, dass apt-file installiert ist und seine Datenbank aktualisiert wird:

$ sudo apt update
$ sudo apt install apt-file
$ sudo apt-file update

Suchen Sie dann nach dem Paket, das einen bestimmten Befehl bereitstellt, zum Beispiel den Befehl pstree, mit dem folgenden Befehl:

$ apt-file search pstree

Beispielausgabe:

criu: /usr/lib/python3/dist-packages/pycriu/images/pstree_pb2.py
manpages-ja: /usr/share/man/ja/man1/pstree.1.gz
psmisc: /usr/bin/pstree
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

Finden Sie, welches Paket einen bestimmten Befehl in Linux bereitstellt

Wie Sie in der obigen Ausgabe bemerkt haben, stellt das psmisc-Paket den Befehl pstree bereit. Dieser Ansatz ermöglicht es Ihnen, das Paket zu identifizieren, das installiert werden muss, oder sicherzustellen, dass pstree auf Ihrem System verfügbar ist.

Oder, wenn Sie pstree bereits installiert haben und nur bestätigen möchten, dass pstree aus diesem Paket stammt, könnten Sie Folgendes verwenden:

$ dpkg -S pstree

4. Entdecken des Pakets für einen bestimmten Befehl in Fedora, CentOS, RHEL und deren Derivaten

Auf Fedora und anderen RPM-basierten Systemen (wie AlmaLinux, CentOS, RHEL und Rocky Linux) können Sie den Befehl dnf verwenden. Auf älteren Systemen müssen Sie möglicherweise yum verwenden.

Zum Beispiel, um nach Paketen zu suchen, die Dateien bereitstellen, die dem Muster */pstree entsprechen, würden Sie ausführen:

$ dnf provides */pstree

Hier ist eine Aufschlüsselung dessen, was der Befehl macht:

  • dnf: Dies ist der DNF-Paketmanager-Befehl.
  • provides: Dieser Unterbefehl teilt DNF mit, nach Paketen zu suchen, die eine bestimmte Datei oder Funktion bereitstellen.
  • */pstree: Dies ist ein Glob-Muster, das mit jeder Datei namens pstree übereinstimmt. Der Teil * bedeutet „beliebige Zeichen“ vor dem Dateinamen.

Wenn Sie diesen Befehl ausführen, durchsucht DNF seine Paketdatenbanken und listet alle verfügbaren Pakete auf, die eine Datei mit dem Namen pstree enthalten. Diese Datei ist typischerweise die ausführbare Datei für das pstree-Dienstprogramm, das einen Prozessbaum anzeigt.

Die Ausgabe dieses Befehls zeigt die Paketnamen und Versionsnummern an, die die Datei pstree bereitstellen. Zum Beispiel könnte die Ausgabe wie folgt aussehen:

psmisc-23.6-4.fc39.x86_64 : Utilities for managing processes on your system
Repo        : fedora
Matched from:
Provide    : /usr/bin/pstree

Dies weist darauf hin, dass die pstree-Datei (befindlich unter /usr/bin/pstree) hauptsächlich vom psmisc-Paket, Version 23.6-4, aus dem Fedora-Repository bereitgestellt wird.

Durch die Verwendung des dnf provides Befehls können Sie herausfinden, welches Paket bzw. welche Pakete Sie installieren müssen, um eine bestimmte Datei oder ein bestimmtes Dienstprogramm auf Ihrem System zu erhalten.

5. Identifizierung des mit einem Linux-Befehl in SUSE, openSUSE verbundenen Pakets

Auf SUSE und openSUSE können Sie den Befehl zypper se --provides verwenden, um nach Paketen zu suchen, die die angegebene Datei oder ausführbare Datei bereitstellen.

$ zypper se --provides '/usr/bin/grep'

Hier ist eine Aufschlüsselung des Befehls:

  • zypper: Dies ist die Befehlszeilenschnittstelle für den ZYpp-Paketmanager.
  • se: Dies ist eine Abkürzung für den search Unterbefehl, der nach Paketen sucht.
  • --provides: Diese Option weist zypper an, nach Paketen zu suchen, die eine bestimmte Datei oder Fähigkeit bereitstellen.
  • '/usr/bin/grep': Dies ist die Datei- oder ausführbare Pfad, nach dem Sie suchen. In diesem Fall ist es der Pfad für den grep-Befehl, der typischerweise unter /usr/bin/grep zu finden ist.

Wenn Sie diesen Befehl ausführen, durchsucht zypper seine Paketdatenbanken und listet alle verfügbaren Pakete auf, die die Datei /usr/bin/grep enthalten oder bereitstellen.

Die Ausgabe dieses Befehls zeigt die Paketnamen, Versionen und Repository-Informationen für die Pakete an, die die angegebene Datei bereitstellen. Zum Beispiel könnte die Ausgabe wie folgt aussehen:

Loading repository data...
Reading installed packages...

S | Name                    | Summary                                 | Type
--+-------------------------+------------------------------------------+-------
  | grep-3.11-3          | Pattern matching utilities               | package
[...]

Diese Ausgabe zeigt, dass die Datei /usr/bin/grep hauptsächlich vom grep-Paket (Version 3.11-3) bereitgestellt wird.

6. Das Paket hinter einem Linux-Befehl in NixOS finden

In NixOS Linux können Sie mit dem Dienstprogramm nix-env herausfinden, welches Paket einen bestimmten Befehl bereitstellt.

Zum Beispiel, um herauszufinden, welches Paket den Befehl pstree bereitstellt, würden Sie ausführen:

$ nix-env -qaP pstree

Dies wird alle installierten Pakete durchsuchen und den Paketnamen sowie den Pfad ausgeben, wenn eine Übereinstimmung gefunden wird.

Beispielausgabe:

nixpkgs.pstree  pstree-2.39

Zeigt an, dass der Befehl pstree vom Paket pstree-2.39 bereitgestellt wird.

Sie können auch den Befehl nix search verwenden, um den Namen des Pakets zu finden, das einen bestimmten Befehl bereitstellt. Obwohl dieser Befehl noch experimentell ist, können Sie ihn verwenden, um nach einem Paket zu suchen.

Es kann beim ersten Mal langsam sein, aber nachfolgende Durchläufe werden zwischengespeicherte Ergebnisse verwenden.

Zum Beispiel, um das Paket zu finden, das den Befehl pstree enthält, führen Sie Folgendes aus:

$ nix --extra-experimental-features "nix-command flakes" search nixpkgs pstree

Beispielausgabe:

* 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

7. Aufdecken der Ursprünge von Befehlen in Gentoo

Wir können herausfinden, welches Paket einen bestimmten Befehl bereitstellt, indem wir das equery-Tool aus dem Paket app-portage/gentoolkit in Gentoo Linux verwenden.

Stellen Sie sicher, dass Sie app-portage/gentoolkit installiert haben:

# emerge --ask app-portage/gentoolkit

Um nach einem Paket zu suchen, das einen bestimmten Befehl bereitstellt, verwenden Sie equery mit der Option belongs:

equery belongs /path/to/command

Ersetzen Sie /path/to/command durch den vollständigen Pfad zu dem Befehl, den Sie suchen.

Wenn Sie den Pfad des Befehls nicht kennen, können Sie den Befehl whereis verwenden, um ihn zu finden.

# whereis pstree

Beispielausgabe:

# whereis pstree
pstree: /usr/bin/pstree /usr/share/man/man1/pstree.1.bz2

Finden wir nun heraus, welches Paket den Befehl pstree bereitstellt, mit dem Befehl:

# equery belongs /usr/bin/pstree

Dies gibt den Paketnamen und die Kategorie aus, die den grep-Befehl bereitstellen, z. B.:

 * Searching for /usr/bin/pstree ... 
sys-process/psmisc-23.6 (/usr/bin/pstree)

Daraus geht hervor, dass der pstree-Befehl vom sys-apps/psmisc-Paket bereitgestellt wird.

Ermitteln, welches Paket einen Befehl in Gentoo bereitstellt

Wenn Sie nur nach einem Befehlsnamen suchen möchten, ohne den vollständigen Pfad anzugeben, können Sie stattdessen die Option hasuse verwenden:

# equery hasuse search-term

Dies wird nach Paketen suchen, die ein bestimmtes USE-Flag haben oder ein bestimmtes ausführbares Programm bereitstellen.

Fazit

Die Paketmanager der meisten wichtigen Linux-Distributionen bieten integrierte Optionen, um das Paket zu identifizieren, das einen bestimmten Befehl oder eine bestimmte Datei bereitstellt. Sie ermöglichen es Ihnen, die Paketdatenbanken zu durchsuchen und das Quellpaket für einen beliebigen Befehl oder eine beliebige Datei zu finden.

Diese Fähigkeit ist oft hilfreich, um fehlende Abhängigkeiten zu beheben, Pakete selektiv neu zu installieren und sicherzustellen, dass Ihr System die notwendigen Komponenten installiert hat.

Verwandte Lektüre: Wie man das Paket findet, das eine bestimmte Datei in Linux bereitstellt