Próbuję zrozumieć, co grep -v grep
robi poniżej:
ssh $server -p $port -o "ConnectTimeout 5" | grep -v "Connection refused" | grep "Connected to" | grep -v grep | wc -l
A może jest lepszy sposób na znalezienie testu połączenia TCP?
Komentarze
Odpowiedź
Wyklucza wszystkie wiersze zawierające sekwencję liter grep
z poprzedniego potoku.
Odpowiedź
Jeśli chcesz sprawdzić, czy możesz nawiązać połączenie ssh w ciągu 5 sekund i uruchomić polecenie, po prostu wykonaj:
if ssh -o BatchMode=yes -o ConnectTimeout=5 -p "$port" "$server" true; then printf "%s\n" "$server is up" fi
Twoje polecenie nie ma większego sensu. Ponieważ nie podasz polecenia do uruchomienia na serwerze zdalnym, ssh
będzie działać w rlogin
tryb, w którym żądany jest pseudoterminal i uruchamiana jest powłoka logowania zdalnego użytkownika (lub ForcedCommand).
Następnie „stosujesz kilka filtrów do wyjścia:
-
grep -v "Connection refused"
: odfiltruj dowolną linię z wyjście , które zawieraConnection refused
. Nie ma to sensu, ponieważ ten komunikat o błędzie, gdyby się pojawił, byłby zapisywany na stderr, a nie na standardowym wyjściu filtrującymgrep
, a także dlatego, że: -
grep "Connected to"
: wybierz tylko te wiersze, które zawierająConnected to
. Wykluczyłoby to również wiersze zawierająceConnection refused
, ponieważ jest mało prawdopodobne, aby wiersz zawierał oba te elementy. -
grep -v grep
, usuń także wiersze zawierającegrep
(tak, aby były to wiersze zawierające zarównoConnected to
, jak igrep
a nieConnection refused
!) -
wc -l
: policz liczbę wynikowych wierszy (więc wiersze wssh
„standardowym wyjściu, które zawieraConnected to
z wyjątkiem tych, które zawierają równieżgrep
lubConnection refused
). Pamiętaj, żewc
wyświetli ten numer tylko wtedy, gdy połączenie zostanie zamknięte, po zakończeniu sesji powłoki, na przykład gdy użytkownik wejdzie doexit
. Ale z drugiej strony, ponieważ użytkownik „nie widzi żadnych danych wyjściowych (ponieważ ostatecznie wszystko trafia dowc
), będzie miał niewielkie pojęcie, że musi wprowadzićexit
, aby zakończyć tę sesję.
man grep