Megpróbálom megérteni, mit csinál a grep -v grep alább:

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

Vagy van egy jobb módszer a TCP-kapcsolatteszt megtalálásához?

Megjegyzések

  • Kérjük, legközelebb először keresse fel a man oldalakat. Ebben az esetben man grep

Válasz

Kizár minden sort, amely tartalmazza a grep betűsorokat az előző cső kimenetéből.

Válasz

Ha ellenőrizni szeretné, hogy 5 másodpercen belül létre tud-e hozni egy ssh kapcsolatot és futtatni egy parancsot, tegye a következőket:

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

A parancsodnak nincs értelme. Amint nem ad meg parancsot a távoli kiszolgálón való futtatáshoz, ssh a rlogin mód, ahol ál-terminált kérnek, és elindul a távoli felhasználó bejelentkezési héja (vagy esetleg egy ForcedCommand).

Ezután több szűrőt alkalmaz a kimenetre:

  • grep -v "Connection refused": kiszűr minden sort a Connection refused elemet tartalmazó output . Ennek kevés értelme van, mivel a hibaüzenetet, ha megjelenik, a stderr-re írnák, nem pedig a standard kimenetet, amelyet a grep szűr, és azért is, mert:
  • grep "Connected to": csak azokat a sorokat válassza ki, amelyek tartalmazzák a Connected to sorokat. Ez kizárná azokat a sorokat is, amelyek Connection refused -et tartalmaznak, mivel nem valószínű, hogy egy sor mindkettőt tartalmazza.
  • grep -v grep, távolítsa el azokat a sorokat is, amelyek tartalmazzák a grep sort (tehát azok a sorok lennének, amelyek tartalmazzák mind a Connected to, mind a grep és nem Connection refused!)
  • wc -l: számolja meg a kapott sorok számát (tehát a vonalak a ssh “stdout-ban, amely Connected to -et tartalmaz, kivéve azokat, amelyek tartalmazzák a grep vagy a Connection refused). Ne feledje, hogy a wc csak akkor adja ki ezt a számot, ha a kapcsolat lezárult, amikor a shell munkamenet befejeződött, például amikor a felhasználó megadja a következőt: exit . De még egyszer, mivel a felhasználó nem lát semmilyen kimenetet (mivel végül az egész a wc címre kerül), a felhasználónak alig lesz fogalma arról, hogy meg kell adnia a exit az adott munkamenet befejezéséhez.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük