o que grep -v grep faz

o que grep -v grep faz

Estou tentando entender o que grep -v grepacontece abaixo:

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

Ou existe uma maneira melhor de encontrar o teste de conexão TCP?

Responder1

Se você quiser verificar se consegue estabelecer uma conexão ssh em 5 segundos e executar um comando, basta fazer:

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

Seu comando tal como está faz pouco sentido. Como você não fornece um comando para rodar no servidor remoto, sshele rodará no rloginmodo onde um pseudo-terminal é solicitado e o shell de login do usuário remoto é iniciado (ou possivelmente um ForcedCommand).

Então, você está aplicando vários filtros à saída:

  • grep -v "Connection refused": filtre qualquer linha dosaídaIsso contém Connection refused. Isso faz pouco sentido, pois a mensagem de erro, se aparecesse, seria escrita em stderr, não na saída padrão que grepestá filtrando, e também porque:
  • grep "Connected to": selecione apenas as linhas que contêm Connected to. Isso também excluiria as linhas que contêm, Connection refusedpois é improvável que uma linha contenha ambos.
  • grep -v grep, remova também as linhas que contêm grep(de modo que seriam linhas que contêm Connected toe grepe não Connection refused!)
  • wc -l: conte o número de linhas resultantes (portanto, as linhas no sshstdout de 's que contêm, Connected toexceto aquelas que também contêm grepou' Connection refused). Observe que wcesse número só será exibido quando a conexão for fechada, quando a sessão do shell for encerrada, como quando o usuário digita exit. Mas, novamente, como o usuário não verá nenhuma saída (já que tudo acabará wceventualmente), o usuário terá poucas pistas de que precisa entrar exitpara encerrar a sessão.

Responder2

Exclui todas as linhas que contêm a sequência de letras grepda saída anterior do pipe.

informação relacionada