Yritän ymmärtää, mitä grep -v grep tekee alla:

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

Vai onko olemassa parempi tapa löytää TCP-yhteystesti?

Kommentit

  • Ota ensi kerralla ensin yhteyttä man-sivuihin. Tässä tapauksessa man grep

Vastaa

Se sulkee pois kaikki rivit, jotka sisältävät kirjainsekvenssin grep edellisestä putkilähdöstä.

Vastaa

Jos haluat tarkistaa, että voit luoda ssh-yhteyden 5 sekunnin kuluessa ja suorittaa komennon, tee vain:

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

Komennolla ei ole mitään järkeä. Kun et anna komentoa, joka suoritetaan etäpalvelimella, ssh suoritetaan kohdassa rlogin -tila, jossa pseudopäätettä pyydetään ja etäkäyttäjän kirjautumiskuori käynnistetään ForcedCommand).

Sitten käytät useita suodattimia tulosteeseen:

  • grep -v "Connection refused": suodata kaikki rivit tuotos , joka sisältää Connection refused. Tällä ei ole juurikaan merkitystä, koska virheilmoitus, jos se ilmestyisi, kirjoitettaisiin stderr: ään, ei vakiolähtöön, jota grep suodattaa, ja myös siksi, että:
  • grep "Connected to": valitse vain rivit, jotka sisältävät Connected to. Tämä sulkisi myös pois rivit, jotka sisältävät Connection refused, koska on epätodennäköistä, että rivi sisältää molempia.
  • grep -v grep, poista myös rivit, jotka sisältävät grep (niin että ne olisivat rivit, jotka sisältävät sekä Connected to että grep eikä Connection refused!)
  • wc -l: lasketaan tuloksena olevien rivien määrä (joten rivit ssh ”-sovelluksessa, joka sisältää Connected to paitsi ne, jotka sisältävät myös grep tai Connection refused). Huomaa, että wc tuottaa kyseisen numeron vain, kun yhteys on suljettu, kun shell-istunto on lopetettu, kuten silloin, kun käyttäjä kirjoittaa exit . Mutta sitten jälleen kerran, koska käyttäjä ei näe mitään lähtöä (koska kaikki menee lopulta wc: lle), käyttäjällä ei ole juurikaan aavistustakaan, että hänen on syötettävä exit lopettaa istunto.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *