grep -v grep
가 아래에서 수행하는 작업을 이해하려고합니다.
ssh $server -p $port -o "ConnectTimeout 5" | grep -v "Connection refused" | grep "Connected to" | grep -v grep | wc -l
또는 TCP 연결 테스트를 찾는 더 좋은 방법이 있습니까?
댓글
Answer
이전 파이프 출력에서 문자 시퀀스 grep
를 포함하는 모든 줄을 제외합니다.
Answer
5 초 이내에 SSH 연결을 설정하고 명령을 실행할 수 있는지 확인하려면 다음을 수행하십시오.
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
를 포함하는 출력 . 해당 오류 메시지가 표시되는 경우grep
가 필터링하는 표준 출력이 아니라 stderr에 작성되며 다음과 같은 이유 때문에 의미가 거의 없습니다. -
grep "Connected to"
:Connected to
를 포함하는 줄만 선택합니다. 또한Connection refused
가 포함 된 줄은 제외됩니다. 한 줄에 둘 다 포함 할 가능성이 낮기 때문입니다. -
grep -v grep
,grep
가 포함 된 줄도 제거합니다 (그러면Connected to
및grep
가 아니라Connection refused
!) -
wc -l
: 결과 줄 수를 계산합니다.grep
또는 iv도 포함하는 경우를 제외하고Connected to
를 포함하는ssh
“의 표준 출력 id = “9fdcd41b43″>
). wc
는 사용자가 exit
를 입력 할 때와 같이 셸 세션이 종료 될 때 연결이 닫힐 때만 해당 번호를 출력합니다. . 그러나 다시 말하지만 사용자는 출력을 볼 수 없기 때문에 (결국 모든 것이 wc
로 이동하기 때문에) 사용자는 해당 세션을 종료합니다.
man grep