stdout에는 쓸 수 있지만 파일에는 쓸 수 없습니다.

stdout에는 쓸 수 있지만 파일에는 쓸 수 없습니다.

내가 방문한 URL의 추적을 유지하고 싶기 때문에 다음과 같은 명령줄을 사용합니다.

tcpdump -ien1 -v -X 'tcp 포트 80' | sed -nl 's/^.0x[0-9a-f]{4}:.{43}(.)$/\1/p' |perl break.pl |perl -pe 's/(GET|POST).(.?).HTTP/1....호스트:.([a-zA-Z._0-9-])../"\nBEGURL ".localtime().": $1 http://$3$2\n"/ge' | grep "^BEGURL"

한 줄에 하나의 URL로 제대로 작동합니다. 하지만 만약 내가 그렇게 한다면

tcpdump -ien1 -v -X 'tcp 포트 80' | sed -nl 's/^.0x[0-9a-f]{4}:.{43}(.)$/\1/p' |perl break.pl |perl -pe 's/(GET|POST).(.?).HTTP/1....호스트:.([a-zA-Z._0-9-])../"\nBEGURL ".localtime().": $1 http://$3$2\n"/ge' | grep "^BEGURL">> /tmp/아웃

(끝에 주목하세요 >> /tmp/out) 그러면 파일은 비어있습니다! 이유를 아시나요? 나에게는 완전히 비논리적입니다.

또한 stdout 및 stderr을 /tmp/out으로 리디렉션하려고 시도했지만 여전히 비어 있습니다. 파일에 쓰기 액세스 권한이 있습니다. 나는 그것이 무엇인지 전혀 모른다. stdout과 stderr 외에 다른 것이 있습니까 ??

어떤 도움을 위해.

답변1

"나도 stdout 및 stderr을 /tmp/out으로 리디렉션하려고 시도했습니다"라고 말하면 이 방법을 시도했다는 의미일 수 있습니다. 하지만 문제가 될 가능성이 가장 높은 것 같습니다. 따라서 끝에 2>&1을 추가해 보세요.

그렇지 않은 경우 디버깅에 도움이 되도록 첫 번째 명령에 2>/dev/null을 추가하고 여전히 출력이 나오는지 확인하십시오.

또한 테스트를 위해 명령을 단순화할 수 있습니까? 예를 들어, 다음과 같이 작동합니까?

tcpdump -ien1 -v -X 'tcp port 80' >> /tmp/out

답변2

불과 며칠 전에도 같은 문제가 발생했습니다. 옵션 을 사용해 -w패킷을 파일에 쓰십시오. 자세한 내용은 을 참조하십시오 man tcpdump.

관련 정보