was macht grep -v grep

was macht grep -v grep

Ich versuche zu verstehen, was das grep -v grepFolgende bewirkt:

ssh  $server -p $port -o "ConnectTimeout 5" |   grep -v "Connection refused" | grep "Connected to" | grep -v grep | wc -l

Oder gibt es eine bessere Möglichkeit, einen TCP-Verbindungstest zu finden?

Antwort1

Wenn Sie überprüfen möchten, ob Sie innerhalb von 5 Sekunden eine SSH-Verbindung herstellen und einen Befehl ausführen können, gehen Sie wie folgt vor:

if ssh -o BatchMode=yes -o ConnectTimeout=5 -p "$port" "$server" true; then
  printf '%s\n' "$server is up"
fi

Ihr Befehl macht in dieser Form wenig Sinn. Da Sie keinen Befehl zur Ausführung auf dem Remote-Server angeben, sshwird er in dem Modus ausgeführt rlogin, in dem ein Pseudo-Terminal angefordert und die Login-Shell des Remote-Benutzers gestartet wird (oder möglicherweise ein ForcedCommand).

Anschließend wenden Sie mehrere Filter auf die Ausgabe an:

  • grep -v "Connection refused": Filtern Sie alle Zeilen aus demAusgabedas enthält Connection refused. Das macht wenig Sinn, da die Fehlermeldung, wenn sie erscheinen würde, auf stderr geschrieben würde und nicht auf die gefilterte Standardausgabe grep, und außerdem, weil:
  • grep "Connected to": Wählen Sie nur die Zeilen aus, die enthalten Connected to. Dadurch werden auch die Zeilen ausgeschlossen, die enthalten Connection refused, da es unwahrscheinlich ist, dass eine Zeile beides enthält.
  • grep -v grep, entfernen Sie auch die Zeilen, die enthalten grep(das wären also Zeilen, die sowohl als Connected toauch grepals auch nicht enthalten Connection refused!)
  • wc -l: Zählen Sie die Anzahl der resultierenden Zeilen (also die Zeilen in sshder Standardausgabe von , die enthalten, Connected toaußer denen, die auch grepoder enthalten Connection refused). Beachten Sie, dass wcdiese Zahl nur ausgegeben wird, wenn die Verbindung geschlossen wird, wenn die Shell-Sitzung beendet wurde, z. B. wenn der Benutzer eingibt exit. Da der Benutzer jedoch keine Ausgabe sieht (da alles wcirgendwann an geht), hat er kaum eine Ahnung, dass er eingeben muss, exitum diese Sitzung zu beenden.

Antwort2

Es schließt alle Zeilen aus, die die Buchstabenfolge grepaus der vorherigen Pipe-Ausgabe enthalten.

verwandte Informationen