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의사 터미널을 요청하고 원격 사용자의 로그인 셸(또는 ForcedCommand)을 시작하는 모드에서 실행됩니다.rlogin

그런 다음 출력에 여러 필터를 적용합니다.

  • grep -v "Connection refused":그 안의 모든 행을 필터링합니다.산출이는 Connection refused오류 메시지가 발생하면 필터링되는 표준 출력이 아닌 stderr에 기록되기 때문에 의미가 없습니다 grep.
  • grep "Connected to": 포함된 행만 선택합니다 Connected to. Connection refused행에 둘 다 포함될 가능성이 없으므로 포함된 행도 제외됩니다 .
  • grep -v grep, 그리고 포함된 줄도 삭제합니다 (따라서 and 와 not grep을 모두 포함하는 줄이 됩니다 !)Connected togrepConnection refused
  • wc -l: 결과 줄 수를 계산합니다(따라서 stdout에 포함되어 있고 또는 포함하는 ssh줄은 제외 ). 이 숫자는 연결이 닫힐 때, 셸 세션이 종료될 때(예: 사용자가 들어갈 때)에만 출력 됩니다 . 그러나 사용자는 출력을 볼 수 없기 때문에( 결국 모든 일이 발생하므로) 사용자는 세션을 종료하기 위해 입력이 필요하다는 사실을 거의 알지 못합니다.Connected togrepConnection refusedwcexitwcexit

답변2

grep이전 파이프라인 출력의 문자 시퀀스를 포함하는 모든 줄을 제외합니다.

관련 정보