문자열 명령의 이상한 동작

문자열 명령의 이상한 동작

다음과 같이 mysql 트래픽을 캡처하고 해당 트래픽을 문자열 명령에 전달하려고 합니다.

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

나는 해결책을 얻었다:

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

stdbuf -i0 -o0 -e0 command

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

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

참고자료

관련 정보