o que grep -v grep faz

1

Estou tentando entender o que o grep -v grep faz 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?

    
por Romeo Ninov 23.11.2017 / 12:16

2 respostas

3

Exclui todas as linhas que contêm a seqüência de letras grep da saída do pipe anterior.

    
por 23.11.2017 / 12:17
5

Se você quiser verificar se pode estabelecer uma conexão ssh dentro de 5 segundos e executar um comando, faça:

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

Seu comando como é faz pouco sentido. Como você não fornece um comando para executar no servidor remoto, ssh será executado no modo rlogin , em que um pseudo-terminal é solicitado e o shell de login do usuário remoto é iniciado (ou possivelmente um ForcedCommand ).

Em seguida, você está aplicando vários filtros à saída:

  • grep -v "Connection refused" : filtra qualquer linha da saída que contenha Connection refused . Isso faz pouco sentido, já que a mensagem de erro, se aparecesse, seria escrita em stderr, não a saída padrão que grep está 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 refused , já que é improvável que uma linha contenha as duas.
  • grep -v grep , também remove as linhas que contêm grep (de modo que seriam linhas que contenham Connected to e grep e não Connection refused !)
  • wc -l : conta o número de linhas resultantes (portanto, as linhas no stdout de ssh que contêm Connected to , exceto aquelas que também contêm grep ou Connection refused ). Observe que wc só produzirá esse número quando a conexão for fechada, quando a sessão do shell tiver sido encerrada, como quando o usuário digita exit . Mas, novamente, como o usuário não verá nenhuma saída (já que tudo vai para wc eventualmente), o usuário terá pouca noção de que precisa inserir exit para finalizar essa sessão.
por 23.11.2017 / 12:45