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
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 aConnection 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 agrep
szűr, és azért is, mert: -
grep "Connected to"
: csak azokat a sorokat válassza ki, amelyek tartalmazzák aConnected to
sorokat. Ez kizárná azokat a sorokat is, amelyekConnection 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 agrep
sort (tehát azok a sorok lennének, amelyek tartalmazzák mind aConnected to
, mind agrep
és nemConnection refused
!) -
wc -l
: számolja meg a kapott sorok számát (tehát a vonalak assh
“stdout-ban, amelyConnected to
-et tartalmaz, kivéve azokat, amelyek tartalmazzák agrep
vagy aConnection refused
). Ne feledje, hogy awc
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 awc
címre kerül), a felhasználónak alig lesz fogalma arról, hogy meg kell adnia aexit
az adott munkamenet befejezéséhez.
man grep