
다음과 같이 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