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

  • Następnym razem zapoznaj się najpierw ze stronami podręcznika. W tym przypadku man grep

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 zawiera Connection 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ącym grep, a także dlatego, że:
  • grep "Connected to": wybierz tylko te wiersze, które zawierają Connected to. Wykluczyłoby to również wiersze zawierające Connection refused, ponieważ jest mało prawdopodobne, aby wiersz zawierał oba te elementy.
  • grep -v grep, usuń także wiersze zawierające grep (tak, aby były to wiersze zawierające zarówno Connected to, jak i grep a nie Connection refused!)
  • wc -l: policz liczbę wynikowych wierszy (więc wiersze w ssh „standardowym wyjściu, które zawiera Connected to z wyjątkiem tych, które zawierają również grep lub Connection refused). Pamiętaj, że wc 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 do exit . Ale z drugiej strony, ponieważ użytkownik „nie widzi żadnych danych wyjściowych (ponieważ ostatecznie wszystko trafia do wc), będzie miał niewielkie pojęcie, że musi wprowadzić exit, aby zakończyć tę sesję.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *