Wie man Linux Exit-Codes zur Fehlersuche in Ihrem Linux-System verwendet

Sie können schneller mit Linux Exit-Codes Fehler beheben

Exit-Codes, auch bekannt als Rückgabecodes oder Exit-Status, sind numerische Signale, die ein Programm, ein Befehl oder ein Skript an das Betriebssystem (oder den aufrufenden Prozess) zurücksendet, wenn es seine Ausführung beendet. Sie müssen nicht durch möglicherweise lange Protokolldateien graben, um einen Fehler zu diagnostizieren – ein Exit-Code bietet oft einen schnellen Hinweis auf die Art des Problems.

Die allgemein akzeptierte Konvention ist, dass ein Programm, das erfolgreich ausgeführt wird, einen Exit-Code von 0 zurückgibt. Jede andere Zahl, typischerweise im Standardbereich von 1 bis 255, zeigt an, dass etwas schiefgegangen ist.

Der einfachste Weg, den Exit-Code des zuletzt ausgeführten Vordergrundbefehls in Unix-ähnlichen Shells (wie Bash oder Zsh) zu überprüfen, besteht darin, die spezielle Shell-Variable $? zu inspizieren. Führen Sie beispielsweise zuerst einen Befehl aus und überprüfen Sie dann seinen Exit-Code:

ls/nonexistent_directory  
echo$?

Anzeige der Exit-Codes des zuletzt ausgeführten Befehls

Der Befehl echo $? zeigt den numerischen Exit-Code an, der in der Variable $? gespeichert ist. Wenn Sie 0 sehen, bedeutet das, dass der vorherige Befehl erfolgreich abgeschlossen wurde. Ein Wert ungleich null wie 1, 2 oder 127 weist auf einen Fehler hin, und die spezifische Zahl bietet einen Hinweis auf die Art des Problems – möglicherweise eine fehlende Datei, ein nicht vorhandenes Verzeichnis oder unzureichende Berechtigungen.

Fehlersuche in Ihrem Skript mit Exit-Codes

Exit-Codes sind besonders nützlich, wenn Sie Shell-Skripte schreiben. Sie helfen Ihrem Skript zu bestimmen, ob etwas richtig oder falsch gelaufen ist, sodass es entscheiden kann, was als Nächstes zu tun ist.

Hier ist ein einfaches Beispiel, das eine Datei in einen Sicherungsordner kopiert und meldet, ob die Kopie erfolgreich war:

#!/bin/bash  
# Versuchen Sie, die Datei zu kopieren  
cp important_file.txt backup/  
  
# Überprüfen Sie, ob die Kopie erfolgreich war, indem Sie den Exit-Code überprüfen ($? enthält den Exit-Code des letzten Befehls)  
if[$?-eq0]; then  
echo"Backup erfolgreich!"  
else  
echo"Backup fehlgeschlagen mit Exit-Code $?"  
exit1# Beenden Sie das Skript mit einem Fehlercode, um anzuzeigen, dass etwas schiefgegangen ist.  
fi

Wenn der Befehl cp ausgeführt wird, gibt er einen Exit-Code zurück. Ein Exit-Code von 0 bedeutet, dass alles reibungslos verlief. Wenn der Code nicht 0 ist, ist etwas schiefgegangen – und das Skript gibt eine Fehlermeldung aus und beendet sich mit einem Code von 1.

Eigene Exit-Codes festlegen

Neben der Überprüfung der Exit-Codes von Befehlen können Sie auch eigene Exit-Codes definieren, um verschiedene Arten von Fehlern anzuzeigen. Diese Praxis macht Ihre Skripte informativer und ermöglicht es jedem, der sie verwendet, genau zu verstehen, welche Art von Problem aufgetreten ist.

Betrachten Sie dieses Skript:

#!/bin/bash  
# Überprüfen Sie, ob ein Argument (Dateiname) bereitgestellt wird.  
if[-z"$1"]; then  
echo"Verwendung: $0 "  
exit1# Exit-Code 1 zeigt an, dass kein Argument bereitgestellt wurde.  
fi  
  
# Überprüfen Sie, ob die als erstes Argument angegebene Datei existiert.  
if[!-f"$1"]; then  
echo"Fehler: Datei nicht gefunden"  
exit2# Benutzerdefinierter Exit-Code 2 zeigt an, dass die Datei nicht gefunden wurde.  
fi

Wenn jemand Ihr Skript ausführt und es fehlschlägt, kann er sich auf den Exit-Code beziehen, um den genauen Fehler zu bestimmen. In diesem Beispiel signalisiert der Exit-Code 1, dass der Benutzer kein erforderliches Argument bereitgestellt hat, während der Exit-Code 2 ausdrücklich anzeigt, dass die Datei nicht gefunden wurde. Dieser strukturierte Ansatz ist besonders nützlich, wenn Ihr Skript Teil eines größeren Systems ist oder wenn ein anderes Skript von seiner Ausgabe abhängt.

Liste der häufigsten Exit-Codes

Während verschiedene Programme ihre eigenen Exit-Codes definieren können, gibt es einige gängige Muster, die Sie bei vielen Befehlszeilenwerkzeugen sehen werden – insbesondere in Linux- und Unix-ähnlichen Systemen. Hier sind einige der am häufigsten vorkommenden:

  • 0: Alles gut! Das Programm wurde ohne Probleme ausgeführt.
  • 1: Etwas ist schiefgegangen, aber der Fehler ist nicht spezifisch. Dies ist wie das Auffangnetz der Exit-Codes.
  • 2: Missbrauch von Shell-Builtins. Dies kann auftreten, wenn Sie einen Befehl falsch verwenden, z. B. erforderliche Parameter vergessen.
  • 126: Der Befehl existiert, aber Sie haben keine Berechtigung, ihn auszuführen.
  • 127: Befehl nicht gefunden. Das bedeutet, dass der Befehl nicht existiert oder nicht im Systempfad ist. Überprüfen Sie Ihre Schreibweise.
  • 128: Ungültiges Exit-Argument. Sie haben eine Zahl verwendet, die als Exit-Code keinen Sinn macht.
  • 130: Programm durch Ctrl + C beendet. Dies geschieht, wenn Sie ein Programm manuell stoppen.
  • 137: Out-of-Memory (OOM)-Bedingung.
  • 255: Das Programm hat versucht, einen Exit-Code außerhalb des gültigen Bereichs zurückzugeben.

Einige spezifische Programme haben ihre eigenen einzigartigen Exit-Codes. Zum Beispiel gibt grep 0 zurück, wenn es Übereinstimmungen findet, 1, wenn es keine Übereinstimmungen findet, und 2, wenn ein Fehler auftritt. Außerdem können Entwickler technisch gesehen fast jede Zahl verwenden (normalerweise 0 bis 255 in Unix-ähnlichen Systemen).

Befehle basierend auf Erfolg oder Misserfolg verketten

Bash bietet auch zwei praktische Operatoren && und ||, mit denen Sie Befehle je nach Erfolg oder Misserfolg des vorherigen Befehls verketten können:

  • && (UND-Operator): Führt den nächsten Befehl nur aus, wenn der vorherige erfolgreich war (Exit-Code 0).
  • || (ODER-Operator): Führt den nächsten Befehl nur aus, wenn der vorherige fehlgeschlagen ist (nicht-null Exit-Code).

Wenn Sie beispielsweise ein Verzeichnis erstellen und dann sofort in dieses wechseln möchten, möchten Sie möglicherweise eine Fehlermeldung anzeigen, wenn das Erstellen des Verzeichnisses fehlschlägt oder das Wechseln nicht funktioniert:

mkdir new_directory &&cd new_directory ||echo"Fehler beim Erstellen und Zugreifen auf das Verzeichnis"

Hier versucht mkdir new_directory, den Ordner zu erstellen. Wenn das funktioniert, wird der Code sofort cd new_directory ausgeführt. Wenn einer der Schritte fehlschlägt, kommt der ||-Operator zum Einsatz und druckt die Fehlermeldung.

Fazit

Exit-Codes mögen wie ein kleines Detail erscheinen, aber sie sind Teil dessen, was Befehlszeilenwerkzeuge so leistungsfähig macht. Sie schaffen eine gemeinsame Sprache für Programme, um über Erfolg und Misserfolg zu kommunizieren, was für den Aufbau komplexer Systeme unerlässlich ist.

Wenn Sie neu in der Arbeit mit der Befehlszeile sind, gewöhnen Sie sich daran, echo $? zu überprüfen, wenn Befehle sich nicht wie erwartet verhalten. Bald werden Sie Exit-Codes in Ihren eigenen Skripten verwenden und dieses einfache, aber effektive Kommunikationssystem zu schätzen wissen.