Tutoriel Linux

Unter Linux hingegen: eine Binärdatei und deren Handbuch finden

Débutant5 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

Sie haben gerade ein Tool installiert, wissen aber nicht mehr, ob es sich in /usr/bin /usr/local/bin oder anderswo. Die Bestellung wo ist Es kann die Binärdatei, den Quellcode und die Manpages abrufen. Allerdings beantwortet es nicht die wichtigste Frage vor jedem Eingriff: Welche Datei wird Ihre Shell tatsächlich ausführen?

Um eine Änderung der fehlerhaften Installation zu vermeiden, drücke ich die Daumen. wo ist mit Befehl -v ArtDiese Befehle suchen nicht nach demselben. Dieser Unterschied erweist sich schnell als nützlich, wenn mehrere Versionen eines Programms, eines Alias ​​oder einer Bash-Funktion denselben Namen haben.

Tux verwendet eine Lupe, um unter mehreren Pfaden eine Linux-Binärdatei und ihre Manpage zu finden.

Wonach sucht Whereis wirklich?

Der einfachste Anwendungsfall besteht darin, den Namen eines Befehls ohne Optionen anzugeben:

Wo ist Bash?
whereis ssh
whereis nginx

Die Ausgabe kann mehrere Pfade in derselben Zeile enthalten. wo ist Es sucht nach drei Dateitypen: Binärdateien, Quellcode und der zugehörigen Dokumentation. Es untersucht bekannte Linux-Speicherorte und berücksichtigt dabei auch … WEG und von MANPATHEs scannt daher nicht einfach nur die ausführbaren Dateien, die Ihre Shell starten kann.

Sie können die Suche auf die für Sie relevanten Typen beschränken:

whereis -b bash
whereis -m bash
whereis -s bash
  • -B sucht nach Binärdateien;
  • -M Sucht nach Handbuchseiten und Infodateien;
  • -S Suche nach Quellen.

Eine ergebnislose Quellcodesuche bedeutet nicht zwangsläufig, dass das Programm falsch installiert ist. Distributionen installieren häufig die Binärdatei und das Handbuch, ohne den Quellcode einzubinden. /usr/srcUm die tatsächlich auf Ihrem Rechner untersuchten Dateien anzuzeigen, verwenden Sie:

wo ist -l

Dort Wo ist die Handbuchseite? Diese Pfade und die verfügbaren Optionen werden detailliert beschrieben. Dieser Befehl führt keine rekursive Dateisuche durch. Um eine beliebige Datei in einer Verzeichnisstruktur zu finden, verwenden Sie die Anleitung unter [Link einfügen]. finden Sie unter Linux.

Überprüfen Sie den Befehl, der tatsächlich von der Shell ausgeführt wurde.

Wenn Ihr Ziel darin besteht, zu wissen, was erscheint, wenn Sie Folgendes eingeben , Nginx Oder montool, beginnen mit Befehl -v :

Befehl -v python3

Befehl -v meintool

Dieser Befehl folgt der Namensauflösung der Shell. Je nach angegebenem Namen kann er den Pfad zu einer ausführbaren Datei, einem integrierten Befehl, einer Funktion oder die Definition eines Alias ​​anzeigen. Sein Rückgabewert ermöglicht es Ihnen außerdem, das Vorhandensein eines Befehls in einem Skript zu überprüfen.

if command -v mytool >/dev/null 2>&1; then
    echo "Mein Tool ist verfügbar"

    echo "mytool wurde nicht gefunden" >&2
fi

wo ist Für diesen Test. Wenn keine passende Datei gefunden wird, kann einfach der Name gefolgt von einem Doppelpunkt angezeigt und mit einem Null-Rückgabewert beendet werden. Das Skript würde dann fälschlicherweise schlussfolgern, dass der Befehl existiert.

Art geht noch weiter, indem erklärt wird, wie Bash den Namen interpretiert:

CD-Typ
ls-Typ

Typ -P ls
  • CD-Typ weist darauf hin CD ist ein interner Shell-Befehl;
  • ls-Typ zeigt die erste verwendete Definition an;
  • Typ -a ls Zeigt Aliase, Funktionen, integrierte Funktionen und ausführbare Dateien mit diesem Namen an;
  • Typ -P ls erzwingt die Suche nach einer ausführbaren Datei in .

Dort GNU Bash-artige Dokumentation Dies beschreibt die Ergebnisse präzise. Wenn Sie Zsh, Fish oder eine andere Shell verwenden, konsultieren Sie deren Dokumentation: Die Auflösung von Aliasen und Funktionen ist nicht überall gleich.

welche Python3
welche nginx

Es sucht typischerweise nach einer ausführbaren Datei in WEGDas Problem besteht darin, dass es sich oft um ein externes Programm handelt, das den genauen Zustand der aktuellen Shell nicht kennt. Je nach Implementierung und Distribution kann es einen Alias, eine Funktion oder einen integrierten Befehl ignorieren. Für einen Test in einem Shell-Skript, Befehl -v ist besser geeignet. Um eine Namenskollision in einer interaktiven Sitzung zu verstehen, Geben Sie -a ein bietet weitere Informationen.

Ein einfaches Beispiel verdeutlicht den Unterschied:

alias ll='ls -lah'
wo ist ll
was werde
Befehl -v ll
Typ II

Die Datei mit dem Namen konnte nicht gefunden werden. weil der Alias ​​keine Binärdatei ist. Befehl -v Und Art Sie sehen jedoch Bashs bekannte Definition. Der Artikel über Alias ​​unter Linux erklärt, wie man diese überprüfen und umgehen kann, ohne die Konfiguration zu löschen.

Mehrere Installationen desselben Programms identifizieren

Kollisionen treten häufig nach der manuellen Installation auf. /usr/local/bin, die Hinzufügung von $HOME/.local/bin /optBeginnen Sie mit dem Vergleich der Ergebnisse:

whereis python3
type -a python3
Befehl -v python3
type -P python3
readlink -f "$(type -P python3)"

kann mehrere Binärdateien und Handbücher anzeigen. Geben Sie -a ein Befehl -v bestätigt die erste Wahl, dann readlink -f Löst alle potenziellen symbolischen Verknüpfungen auf. Überprüfen Sie abschließend den Paketbesitzer der Datei:


rpm -qf "$(type -P python3)"
pacman -Qo "$(type -P python3)"

tar.gz-Archive unter Linux zeigt, warum eine Kopie in /usr/local/bin muss nachverfolgbar bleiben.

Bash merkt sich auch bestimmte Pfade, die bereits aufgelöst wurden. Nach dem Verschieben oder Ersetzen einer ausführbaren Datei leeren Sie diesen Cache und überprüfen Sie es dann erneut:

Hash -l
Hash -r
Befehl -v python3
type -a python3

Wenn die falsche Datei zuerst geladen wird, korrigieren Sie die Reihenfolge. WEG anstatt eine zufällige Binärdatei zu löschen. Die Anleitung dazu PATH unter Linux beschreibt den temporären Test und die dauerhafte Modifikation.

Beschränken Sie whereis auf einen bestimmten Ordner

Zur Steuerung der unter installierten Software /optSie können die Suchpfade für Binärdateien oder Handbücher ersetzen. Die Option -F markiert das Ende der Ordnerliste und den Beginn der zu durchsuchenden Namen:

whereis -b -B /opt/mytool/bin /usr/local/bin -f mytool
whereis -m -M /opt/mytool/share/man -f mytool

Diese gezielte Suche ermöglicht es Ihnen, den Inhalt einer Installation zu überprüfen, ohne die gesamte Festplatte zu scannen. Sie ändert auch nichts. noch der von der Shell ausgeführte Befehl. Beachten Sie daher vor dem Entfernen oder Ersetzen eines Programms die folgende Reihenfolge:

  • Befehl -v um die aktive Definition herauszufinden;
  • Start Geben Sie -a ein Kollisionen erkennen;
  • Lösen Sie die Links mit auf readlink -f ;
  • Überprüfen Sie das Eigentümerpaket der Datei;
  • verwenden wo ist um die Binärdateien und die zugehörige Dokumentation zu finden.

WEG ohne versehentlich die korrekte Version zu löschen.

sudo apt update && sudo apt upgrade