GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So beheben Sie einen Befehl nicht gefunden-Fehler in Linux

Wenn Sie versuchen, einen Befehl auszuführen (mit oder ohne sudo ) und eine Fehlermeldung mit dem Inhalt „Befehl nicht gefunden“ erhalten, bedeutet dies, dass das Skript oder die Datei, die Sie ausführen möchten, nicht an dem von Ihrer PATH-Variable angegebenen Speicherort vorhanden ist. Was ist diese Variable und wie können Sie Befehle ausführen, die sie nicht finden kann?

Umgebungsvariablen verstehen

In der Informatik eine Variable ist ein Platzhalter für einen Wert, der sich ändern kann. Sie verwenden Variablen jeden Tag in normaler Sprache, obwohl Sie sie nicht als solche betrachten. Wenn Sie „mein Laptop“ sagen, verwenden Sie „Laptop“ als generische Variable oder Platzhalter für den Computer, den Sie bei sich tragen, unabhängig davon, ob es sich um einen Lenovo, Mac oder einen Raspberry Pi in einem schicken Gehäuse handelt.

Umgebungsvariablen sind spezielle Variablen, die Informationen über Ihre Anmeldesitzung enthalten. Viele dieser Variablen werden standardmäßig während der Installation oder Benutzererstellung festgelegt. Sie werden für die System-Shell, Anwendungen und Skripte gespeichert, um sie beim Ausführen von Befehlen zu verwenden.

Es gibt globale oder systemdefinierte Variablen und lokale oder benutzerdefinierte Variablen.

Globale Variablen

Globale Variablen sind in Ihrer Login-Shell vordefiniert, aber sie sind nicht unveränderlich und können entsprechend Ihren Einstellungen geändert oder gelöscht werden. Sie können den printenv verwenden oder env Befehle zum Anzeigen der Umgebungsvariablen auf Ihrem System:

$ env 
SHELL=/bin/bash 
SESSION_MANAGER=local/kiwi.homelinux.local:@/tmp/.ICE-unix/1906,unix/kiwi.homelinux.local:/tmp/.ICE-unix/19
06 
WINDOWID=153092103 
COLORTERM=truecolor 
XDG_CONFIG_DIRS=/home/tux/.config/kdedefaults:/etc/xdg:/etc/kde/xdg 
LESS=-XR 
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session1 
HISTCONTROL=:ignorespace:ignoredups:ignorespace:ignoredups 
PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/share/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig 
[...]

Die env Befehl gibt alle globalen Umgebungsvariablen aus. Bei Variablen wird zwischen Groß- und Kleinschreibung unterschieden, und alle Linux-Distributionen verwenden standardmäßig Großbuchstaben für Umgebungsvariablennamen.

[ Halten Sie Ihre bevorzugten Git-Befehle, Aliase und Tipps immer griffbereit. Laden Sie das Git-Spickzettel herunter. ]

Lokale Variablen

Eine lokale Variable existiert nur innerhalb einer bestimmten Shell. Wenn Sie also eine lokale Variable definieren, ist sie nur in Ihrer aktuellen Shell verfügbar. Es wird nicht weitergegeben oder bleibt in einer neuen Shell-Sitzung bestehen, es sei denn, Sie exportieren es als globale Variable.

Lokale Variablen werden oft in Kleinbuchstaben definiert, um zu vermeiden, dass eine globale Variable mit demselben Namen überschrieben wird.

Die Umgebungsvariable PATH

Die globale Umgebungsvariable PATH listet die Verzeichnisse auf, die Ihr System nach gültigen, ausführbaren Befehlen durchsucht. Standardmäßig enthält es Standardverzeichnisse, die normalerweise ausführbare Dateien wie /usr/bin speichern , /usr/local/bin , und so weiter.

Wenn Sie einen Befehl eingeben, z. B. grep oder vim , durchsucht Ihr System alle Verzeichnisse, die in Ihrer PATH-Variablen aufgelistet sind, in der Reihenfolge, in der sie aufgelistet sind, bis es eine ausführbare Datei mit demselben Namen findet. Sollte es keinen finden, gibt es den Fehler "Befehl nicht gefunden" aus.

$ printenv PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tux/.local/bin:/home/tux/bin

$ env $PATH
env: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tux/.local/bin:/home/tux/bin

5 Möglichkeiten zur Behebung von „Befehl nicht gefunden“-Fehlern

Es gibt mehrere Möglichkeiten, dieses Problem zu beheben. Hier sind fünf davon.

1. Geben Sie den Pfad an

Nicht alles, was Sie ausführen möchten, muss sich in Ihrem Weg befinden. Sie können Dateien direkt ausführen, indem Sie den Pfad zu der Datei angeben, die Sie ausführen möchten. Indem Sie den Speicherort der Datei identifizieren, umgehen Sie die Notwendigkeit, dass Ihr System Ihren Pfad überhaupt durchsucht.

Angenommen, Sie haben ein Skript namens hello die du laufen willst. Es befindet sich in Ihrem Home-Verzeichnis und Sie haben es bereits mit chmod +x als ausführbar markiert :

$ ~/hello
hello world

Indem Sie Ihrem System den Speicherort der Datei mitteilen, ist die PATH-Variable nie beteiligt, und die Datei wird wie erwartet ausgeführt.

2. Neuen Pfad hinzufügen

Alternativ können Sie Ihrem PATH ein neues Verzeichnis hinzufügen. Fügen Sie Ihre ausführbaren Dateien zu diesem Verzeichnis hinzu, und Sie können sie dann ausführen, ohne manuell einen Pfad anzugeben:

$ cp ~/hello ~/.local/bin
$ export PATH=$PATH:$HOME/.local/bin
$ printenv PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tux/.local/bin

Möglicherweise möchten Sie die neuen PATH-Umgebungsvariablen zu Ihrer Login-Shell hinzufügen, indem Sie sie in Ihre .bashrc aufnehmen Datei als neue Einstellungen.

3. Kopieren Sie eine Datei in einen vorhandenen Pfad

Wenn Sie Ihre Binärdatei oder Ihr Skript ausführen möchten, kopieren Sie es in einen der Verzeichnispfade, die bereits in der PATH-Umgebungsvariablen aufgelistet sind:

$ sudo cp ~/hello /usr/local/bin/
$ hello
hello world

4. Sagen Sie Bash, wo er suchen soll

Die wahrscheinlich einfachste Option, insbesondere für einmalige Skripte oder Anwendungen, besteht darin, Bash zu sagen, dass sie den PATH nicht berücksichtigen soll, sondern „hier suchen“. Setzen Sie dazu einen Punkt und einen Schrägstrich vor den Namen des Befehls, Skripts oder der Anwendung. Für das hello Skript, sieht es so aus:

$ sudo ./hello
hello world

Es werden keine dauerhaften Änderungen am System vorgenommen. Dies kann praktisch sein, wenn Sie ein Skript schreiben und es testen möchten, bevor Sie es an seinen normalen Speicherort kopieren oder verschieben (vermutlich entlang des PATH).

5. Paket installieren

Manchmal, wenn Sie versuchen, einen Befehl zu verwenden und Bash den Fehler „Befehl nicht gefunden“ anzeigt, kann dies daran liegen, dass das Programm nicht auf Ihrem System installiert ist. Korrigieren Sie dies, indem Sie ein Softwarepaket installieren, das den Befehl enthält. Wenn Sie beispielsweise Nmap nicht installiert haben, wird die Datei nmap Befehl schlägt fehl, wenn Sie ihn in ein Terminal eingeben:

$ nmap
nmap: command not found
$ sudo dnf install --assumeyes --quiet nmap
$ nmap
Nmap 7.92 ( https://nmap.org ) 
Usage: nmap [Scan Type(s)] [Options] {target specification}
[...]

[ Möchten Sie mehr erfahren? Registrieren Sie sich für eine kostenlose Testversion mit vollem Zugriff auf den Lehrplan von Red Hat. ]

Halte dich an den Pfad

Die PATH-Variable ist ein leistungsstarkes Tool, mit dem Sie anpassen können, wie Ihr System auf Befehle reagiert. Nehmen Sie sich also etwas Zeit, um sich damit vertraut zu machen. Es wird häufig beim Ausführen von Befehlen verwendet, um die ausführbare Befehlsdatei zu finden.

In diesem Lernprogramm haben Sie fünf Möglichkeiten kennengelernt, einen „Befehl nicht gefunden“-Fehler in Ihrem Terminal zu beheben – drei davon beruhen auf der PATH-Variablen. Jetzt, da Sie wissen, was Variablen sind und wie ausführbare Befehle gefunden werden, werden Sie nicht mehr so ​​verwirrt sein, wenn der Fehler „Befehl nicht gefunden“ auf Ihrem Bildschirm erscheint.


Linux
  1. So beheben Sie den Fehler „semanage command“ Not Found in CentOS

  2. Befehl yum-config-manager nicht gefunden [Fix]

  3. c_rehash :Fehler „Befehl nicht gefunden“ – Lösung

  4. Befehl nicht in Bash gefunden behoben

  5. Wie man den Ifconfig-Befehl behebt, der in Linux Ubuntu nicht gefunden wurde

5 Lösungen – So beheben Sie den Fehler „Zsh-Befehl nicht gefunden“ in Linux oder macOS

So beheben Sie den Fehler „Yum-Befehl nicht gefunden“ in Linux [Update 2022]

Make-Befehl nicht gefunden? So beheben Sie das Problem

Fehlerbehebung „Bash:Command Not Found“-Fehler in Linux

So beheben Sie, dass der Befehl „Ifconfig“ unter CentOS 7 nicht gefunden wurde

Behebung:Curl-Befehl hat keinen Fehler gefunden