Programm finden, das die Bedingung erfüllt

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Projekt lernst du, wie du ein Skript erstellen kannst, das überprüft, ob ein Programm auf einem bestimmten Port läuft, und den vollständigen Pfad des Programms ausgibt oder "OK", wenn kein Programm läuft.

👀 Vorschau

## Beispiel
$ cd /home/labex/project
$ sh get.sh 3000
/usr/lib/code-server/lib/node
$ sh get.sh 43000
OK

🎯 Aufgaben

In diesem Projekt wirst du lernen:

  • Wie du ein Zsh-Skript erstellen
  • Wie du die lsof-Befehl verwendest, um zu überprüfen, ob ein Port belegt ist
  • Wie du die ps-Befehl verwendest, um den vollständigen Pfad eines laufenden Programms zu erhalten

🏆 Errungenschaften

Nach Abschluss dieses Projekts wirst du in der Lage sein:

  • Ein Skript zu schreiben, das das auf einem bestimmten Port laufende Programm identifizieren kann
  • Probleme mit Portkonflikten in deiner Entwicklungsumgebung zu beheben
  • Den Prozess der Überprüfung auf laufende Programme an bestimmten Ports zu automatisieren

Erstellen des get.sh-Skripts

In diesem Schritt erstellst du das get.sh-Skript, das überprüft, ob ein Programm auf einem bestimmten Port läuft.

  1. Öffne einen Texteditor und erstelle in dem Verzeichnis /home/labex/project eine neue Datei namens get.sh.

  2. Füge folgenden Code hinzu, um zu überprüfen, ob eine Portnummer als Argument übergeben wurde:

    ## Überprüfen, ob eine Portnummer als Argument übergeben wurde
    if [ -z "$1" ]; then
      echo "Bitte geben Sie eine Portnummer an."
      exit 1
    fi

    Dieser Code überprüft, ob das Skript mit einer Portnummer als Argument aufgerufen wurde. Wenn nicht, wird eine Fehlermeldung ausgegeben und das Skript beendet.

  3. Füge folgenden Code hinzu, um die Portnummer zu erhalten:

    ## Die Portnummer erhalten
    port=$1

    Dieser Code speichert die übergebene Portnummer in der Variablen port.

  4. Speichere die get.sh-Datei.

Überprüfen, ob ein Programm auf dem angegebenen Port läuft

In diesem Schritt fügst du den Code hinzu, um zu überprüfen, ob ein Programm auf dem angegebenen Port läuft.

  1. Füge folgenden Code zum get.sh-Skript hinzu:

    ## Überprüfen, ob der Port belegt ist
    process=$(lsof -i :$port -sTCP:LISTEN -Fp | sed 's/^p//')

    Dieser Code verwendet den lsof-Befehl, um zu überprüfen, ob ein Prozess auf dem angegebenen Port hört. Die Ausgabe wird in der process-Variablen gespeichert.

  2. Füge folgenden Code hinzu, um zu überprüfen, ob ein Programm läuft:

    ## Überprüfen, ob ein Programm läuft
    if [ -z "$process" ]; then
      echo "OK"
    else
      ## Den vollständigen Pfad des Programms erhalten
      path=$(ps -p $process -o args=)
      echo "$path" | awk '{print $1}'
    fi

    Dieser Code überprüft, ob die process-Variable leer ist (d.h., kein Programm läuft auf dem angegebenen Port). Wenn sie leer ist, gibt das Skript "OK" aus. Wenn ein Programm läuft, verwendet das Skript den ps-Befehl, um den vollständigen Pfad des Programms zu erhalten und ihn auszugeben.

  3. Speichere die get.sh-Datei.

Testen des get.sh-Skripts

In diesem Schritt wirst du das get.sh-Skript testen, um sicherzustellen, dass es wie erwartet funktioniert.

  1. Öffne ein Terminal und navigiere zum Verzeichnis /home/labex/project.

  2. Führe das get.sh-Skript mit einer Portnummer als Argument aus:

    $ sh get.sh 3000
    /usr/lib/code-server/lib/node

    Dies sollte den vollständigen Pfad des auf Port 3000 laufenden Programms ausgeben.

  3. Führe das get.sh-Skript mit einer nicht belegten Portnummer aus:

    $ sh get.sh 43000
    OK

    Dies sollte "OK" ausgeben, da kein Programm auf Port 43000 läuft.

  4. Wenn das Skript wie erwartet funktioniert, hast du das Projekt abgeschlossen.

Herzlichen Glückwunsch! Du hast ein Skript erstellt, das überprüfen kann, ob ein Programm auf einem bestimmten Port läuft, und den vollständigen Pfad des Programms ausgibt oder "OK", wenn kein Programm läuft.

✨ Lösung prüfen und üben

Zusammenfassung

Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Labs absolvieren, um deine Fähigkeiten zu verbessern.