나는 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 와 notgrep
을 모두 포함하는 줄이 됩니다 !)Connected to
grep
Connection refused
wc -l
: 결과 줄 수를 계산합니다(따라서 stdout에 포함되어 있고 또는 포함하는ssh
줄은 제외 ). 이 숫자는 연결이 닫힐 때, 셸 세션이 종료될 때(예: 사용자가 들어갈 때)에만 출력 됩니다 . 그러나 사용자는 출력을 볼 수 없기 때문에( 결국 모든 일이 발생하므로) 사용자는 세션을 종료하기 위해 입력이 필요하다는 사실을 거의 알지 못합니다.Connected to
grep
Connection refused
wc
exit
wc
exit
답변2
grep
이전 파이프라인 출력의 문자 시퀀스를 포함하는 모든 줄을 제외합니다.