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