문자열 명령의 이상한 동작

문자열 명령의 이상한 동작

mysql 트래픽을 캡처하고 이 트래픽을 다음과 같이 strings 명령에 전달하려고 합니다.

tcpdump -i any -s 0 -l -w - dst port 3306 | strings

이는 예상대로 작동하며 모든 mysql 쿼리를 인쇄합니다.

select * from mytables
show databases

/tmp/out그러나 출력을 파일로 리디렉션하려고 하면 출력이 파일 로 인쇄되지 않습니다 .

tcpdump -i any -s 0 -l -w - dst port 3306 | strings > /tmp/out

누군가 위 명령의 동작과 출력을 파일로 리디렉션하지 않는 이유를 설명해 주시겠습니까?

답변1

나는 해결책을 얻었다:

실제로 strings 명령은 버퍼링됩니다. 다음을 사용하여 버퍼링을 비활성화했습니다.

stdbuf -i0 -o0 -e0 command

따라서 전체 명령을 다음과 같이 변경하면 출력이 /tmp/final 파일로 이동하기 시작합니다.

tcpdump -i any -s 0 -l -w - dst port 3306 | stdbuf -i0 -o0 -e0 strings > /tmp/final 

인용하다

관련 정보