что делает grep -v grep

что делает grep -v grep

Я пытаюсь понять, что grep -v grepпроисходит ниже:

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

Или есть лучший способ найти тест TCP-соединения?

решение1

Если вы хотите проверить, что можете установить SSH-соединение в течение 5 секунд и выполнить команду, просто выполните:

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

Ваша команда в ее нынешнем виде не имеет особого смысла. Поскольку вы не предоставляете команду для запуска на удаленном сервере, sshбудет запущен в rloginрежиме, в котором запрашивается псевдотерминал и запускается оболочка входа удаленного пользователя (или, возможно, ForcedCommand).

Затем вы применяете к выходным данным несколько фильтров:

  • grep -v "Connection refused": отфильтровать любую строку извыходкоторый содержит Connection refused. Это не имеет особого смысла, так как сообщение об ошибке, если бы оно появилось, было бы записано в stderr, а не в стандартный вывод, который grepфильтруется, а также потому, что:
  • grep "Connected to": выбрать только строки, содержащие Connected to. Это также исключит строки, содержащие , Connection refusedпоскольку маловероятно, что строка будет содержать оба.
  • grep -v grep, также удалите строки, содержащие grep(то есть это будут строки, содержащие и Connected to, grepи не Connection refused!)
  • wc -l: подсчитать количество результирующих строк (то есть строк в sshstdout , которые содержат , Connected toза исключением тех, которые также содержат grepили Connection refused). Обратите внимание, что wcэто число будет выведено только при закрытии соединения, когда сеанс оболочки был завершен, например, когда пользователь вводит exit. Но опять же, поскольку пользователь не увидит никакого вывода (так как все wcв конечном итоге переходит в ), пользователь не будет иметь ни малейшего представления о том, что ему нужно ввести exitдля завершения сеанса.

решение2

Он исключает все строки, содержащие последовательность букв grepиз предыдущего вывода конвейера.

Связанный контент