¿Qué hace grep -v grep?

¿Qué hace grep -v grep?

Estoy tratando de entender qué grep -v grepsignifica a continuación:

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

¿O existe una mejor manera de encontrar la prueba de conexión TCP?

Respuesta1

Si desea comprobar que puede establecer una conexión ssh en 5 segundos y ejecutar un comando, simplemente haga:

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

Tu orden tal como está tiene poco sentido. Como no proporciona un comando para ejecutar en el servidor remoto, sshse ejecutará en el rloginmodo en el que se solicita un pseudo-terminal y se inicia el shell de inicio de sesión del usuario remoto (o posiblemente un ForcedCommand).

Luego, estás aplicando varios filtros a la salida:

  • grep -v "Connection refused": filtra cualquier línea delproduccióneso contiene Connection refused. Eso tiene poco sentido ya que el mensaje de error, si apareciera, se escribiría en stderr, no en la salida estándar que grepse está filtrando, y también porque:
  • grep "Connected to": seleccione sólo las líneas que contienen Connected to. Eso también excluiría las líneas que contienen, Connection refusedya que es poco probable que una línea contenga ambas.
  • grep -v grep, elimine también las líneas que contienen grep(¡por lo que serían líneas que contienen tanto Connected toy grepcomo no Connection refused!)
  • wc -l: cuenta el número de líneas resultantes (por lo que las líneas en sshla salida estándar que contienen Connected toexcepto aquellas que también contienen grepo Connection refused). Tenga en cuenta que wcsolo generará ese número cuando se cierre la conexión, cuando la sesión de shell haya finalizado, como cuando el usuario ingresa exit. Pero, de nuevo, dado que el usuario no verá ningún resultado (ya que todo terminará wceventualmente), el usuario tendrá poca idea de que necesita ingresar exitpara finalizar esa sesión.

Respuesta2

Excluye todas las líneas que contienen la secuencia de letras grepde la salida de canalización anterior.

información relacionada