Ik “probeer te begrijpen wat grep -v grep hieronder doet:

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

Of is er een betere manier om de TCP-verbindingstest te vinden?

Opmerkingen

  • Raadpleeg de volgende keer eerst manpages. In dit geval man grep

Answer

Het sluit alle regels uit die de letterreeks grep bevatten van de vorige pipe-uitvoer.

Answer

Als u wilt controleren of u binnen 5 seconden een ssh-verbinding tot stand kunt brengen en een commando kunt uitvoeren, doet u gewoon:

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

Uw commando zoals het is, heeft weinig zin. Aangezien u geen commando opgeeft om op de externe server uit te voeren, wordt ssh uitgevoerd in de rlogin mode, waar een pseudo-terminal wordt aangevraagd en de login-shell van de externe gebruiker wordt gestart (of mogelijk een ForcedCommand).

Vervolgens “pas je verschillende filters toe op de uitvoer:

  • grep -v "Connection refused": filter elke regel uit de output die Connection refused bevat. Dat heeft weinig zin, aangezien die foutmelding, als hij zou verschijnen, op stderr zou zijn geschreven, niet de standaarduitvoer die grep filtert, en ook omdat:
  • grep "Connected to": selecteer alleen de regels die Connected to bevatten. Dat zou ook de regels uitsluiten die Connection refused bevatten, aangezien het onwaarschijnlijk is dat een regel beide bevat.
  • grep -v grep, verwijder ook de regels die grep bevatten (dus dat zijn regels die zowel Connected to als grep en niet Connection refused!)
  • wc -l: tel het aantal resulterende regels (dus de regels in ssh “s stdout die Connected to bevatten, behalve degene die ook grep of Connection refused). Merk op dat wc dat nummer alleen zal uitvoeren wanneer de verbinding is verbroken, wanneer de shell-sessie is beëindigd, zoals wanneer de gebruiker exit invoert . Maar nogmaals, aangezien de gebruiker “geen uitvoer ziet (aangezien het uiteindelijk allemaal naar wc gaat), zal de gebruiker weinig idee hebben dat hij om die sessie te beëindigen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *