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

5초 내에 SSH 연결을 설정할 수 있는지 확인하고 명령을 실행하려면 다음을 수행하세요.

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

당신의 명령은 거의 의미가 없습니다. 원격 서버에서 실행할 명령을 제공하지 않으므로 의사 터미널이 요청되고 원격 사용자의 로그인 셸이 시작되는 모드(또는 ForcedCommand) ssh에서 실행됩니다 .rlogin

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

  • grep -v "Connection refused": 다음의 모든 라인을 필터링합니다.산출을 포함하고 있습니다 Connection refused. 해당 오류 메시지가 grep필터링되는 표준 출력이 아닌 stderr에 기록될 경우 이는 의미가 없으며 다음 과 같은 이유도 있습니다.
  • grep "Connected to": 가 포함된 행만 선택합니다 Connected to. 또한 Connection refused한 줄에 두 가지가 모두 포함될 가능성이 없으므로 포함된 줄도 제외됩니다 .
  • grep -v grep, 또한 다음을 포함하는 줄을 제거합니다 grep(그래서 Connected toand grep와 not 을 모두 포함하는 줄이 됩니다 Connection refused!).
  • wc -l: 결과 라인의 수를 셉니다(따라서 또는를 포함하는 라인을 제외하고 ssh포함하는 의 표준 출력 의 라인 ). 사용자가 를 입력할 때와 같이 연결이 닫힐 때, 즉 쉘 세션이 종료될 때 해당 숫자만 출력 됩니다 . 그러나 사용자는 출력을 전혀 볼 수 없으므로( 결국 모든 출력이 진행되므로) 사용자는 해당 세션을 종료하기 위해 입력해야 한다는 단서가 거의 없습니다.Connected togrepConnection refusedwcexitwcexit

답변2

grep이전 파이프 출력에서 ​​문자 시퀀스를 포함하는 모든 행을 제외합니다 .

관련 정보