종료되지 않은 입력 소스의 라인 수를 계산할 수 있는 방법이 있습니까? 예를 들어, 요청 수를 계산하기 위해 일정 기간 동안 다음을 실행하고 싶습니다.
ngrep -W byline port 80 and dst host 1.2.3.4 | grep ":80" | wc
분명히 이것은 작동하지 않습니다. 내가 그것을 Ctrl죽일 때 C, 나는 그것으로부터 어떤 결과도 얻지 못합니다 wc
. 가능하다면 파일 생성을 피하고 싶습니다.
답변1
Ctrl터미널에서 +를 입력하면 전경 프로세스 그룹으로 전송됩니다. 이벤트에서 살아남고 출력을 생성하려면 신호를 무시하도록 해야 합니다.CSIGINT
wc
해결책은 하위 쉘에서 실행 하고 wc
실행하기 전에 상위 쉘을 SIGINT
무시하도록 설정하는 것입니다 wc
. wc
이 설정은 상속되며 SIGINT
프로세스 그룹으로 전송될 때 사라지지 않습니다. 파이프의 나머지 부분은 사라지고 wc
다른 쪽 끝에서는 프로세스 없이 파이프에서 읽기만 수행됩니다. 이렇게 하면 파이프가 wc
표시되고 EOF
그 수를 인쇄하고 종료됩니다.
ngrep -W byline port 80 and dst host 1.2.3.4 | grep ":80" | (trap '' INT ; wc)
답변2
현재 카운트를 읽은 후 계속 카운트하는 방법은 다음과 같습니다.
종료되지 않는 테스트 입력 소스는 ping입니다.
$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.041 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.028 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.025 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.045 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.032 ms
64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.030 ms
^C
다른 솔루션의 경우 라인 수를 읽고 실행 명령을 중단할 시기를 결정해야 합니다.
하지만 이상적으로는 현재 행 수만 알고 싶습니다. 그렇죠?
그렇다면 행 수를 세어보면 어떨까요? 작업에 적합한 도구는 다음과 같습니다.nl
, 각 줄 앞에 현재 개수를 추가합니다.
$ ping 127.0.0.1 | nl
1 PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
2 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.040 ms
3 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.022 ms
4 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.025 ms
5 64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.021 ms
6 64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.022 ms
7 64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.022 ms
8 64 bytes from 127.0.0.1: icmp_seq=7 ttl=64 time=0.021 ms
9 64 bytes from 127.0.0.1: icmp_seq=8 ttl=64 time=0.029 ms
^C
답변3
당신은 그것을 사용할 수 있습니다 :
$ ngrep -W byline port 80 and dst host 1.2.3.4 | grep ":80" |
perl -nle 'system("clear");print $.'
perl
인쇄하기 전에 이전 출력을 지우고 어떤 줄이 있는지 추적합니다.
답변4
즉흥적으로 행동하는 대신 시간 제한을 지정하려는 경우 이 방법을 사용할 수 있습니다.
(cmdpid=$BASHPID; (sleep 300; Kill $cmdpid) & exec ngrep(ngrep 매개변수)) | grep ":80" |
에서 영감을 받다이 답변본질적으로 SU에 관한 최근 질문입니다.5분 후에 실행 중인 프로그램을 중지하고 계속하는 방법은 무엇입니까?