Snažím se pochopit, co grep -v grep dělá níže:

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

Nebo existuje lepší způsob, jak najít test připojení TCP?

Komentáře

  • Příště prosím nejprve prohlédněte manuálové stránky. V tomto případě man grep

odpověď

Vyloučí všechny řádky obsahující posloupnost písmen grep z předchozího výstupu kanálu.

Odpovědět

Pokud si chcete ověřit, že můžete do 5 sekund navázat ssh připojení a spustit příkaz, stačí udělat:

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

Váš příkaz, jaký má, nemá moc smysl. Protože neposkytujete příkaz ke spuštění na vzdáleném serveru, bude ssh spuštěn v rlogin režim, kde je vyžadován pseudoterminál a je spuštěno přihlašovací prostředí vzdáleného uživatele (případně i ForcedCommand).

Potom na výstup aplikujete několik filtrů:

  • grep -v "Connection refused": odfiltruje jakýkoli řádek z výstup , který obsahuje Connection refused. To dává malý smysl, protože tato chybová zpráva, pokud by se objevila, by byla napsána na stderr, nikoli na standardní výstup, který filtruje grep, a také proto, že:
  • grep "Connected to": vyberte pouze řádky, které obsahují Connected to. To by také vyloučilo řádky, které obsahují Connection refused, protože je nepravděpodobné, že by řádek obsahoval oba.
  • grep -v grep, také odstraňte řádky, které obsahují grep (aby to byly řádky, které obsahují Connected to i grep a ne Connection refused!)
  • wc -l: spočítat počet výsledných řádků (tedy řádky ve standardním ssh „výstupu, který obsahuje Connected to kromě těch, které také obsahují grep nebo Connection refused). Všimněte si, že wc vygeneruje toto číslo pouze v případě, že je připojení uzavřeno, když byla ukončena relace prostředí, jako když uživatel zadá exit . Ale znovu, protože uživatel nevidí žádný výstup (protože vše nakonec přejde na wc), bude mít uživatel malou tušení, že musí zadat exit ukončit relaci.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *