strace -p $(netstat -tnp|awk -F'[ /]+' "/:$(netstat -tnp|awk -F'[ :]+'
"/\/telnet/{print \$5}") /&&/apache2/{print \$7}")
또는 더 쉽게 읽을 수 있도록 형식화되고 OP의 strace 플래그를 그대로 유지합니다.
sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \$5}") / && /apache2/ {print \$7}")
가장 먼저 분류 :
netstat -tnp | awk -F'[ :]+' "/\/telnet/ {print \$5}"
IP 주소를 DNS 이름으로 확인하지 않고 모든 활성 TCP 연결을 표시하십시오. awk로 파이프하면 /telnet
필드는 하나 이상의 공백과 콜론으로 구분되는로 끝나는 행에 다섯 번째 필드를 인쇄합니다 . 이 필드는 소스 포트가됩니다.
개선 : awk | head -n 1
의 끝 부분이나 ;exit
내부에 a 를 추가하여 훨씬 더 견고하게 만들 수는 있지만 원래 버전에는 해당 기능이 부족 하므로이 버전을 더 길게 만들고 싶지 않았습니다.
netstat -tnp | awk -F'[ /]+' "/:**** / && /apache2/ {print \$7}")
****
여기에 위에서 이미 설명한 부분 이 있습니다. 여기서, netstat -tnp
위에서 발견 한 소스 포트와 동일한 포트를 가지며 Apache가 소유 한 라인을 찾고 있습니다 . 찾을 때 일곱 번째 필드를 인쇄합니다 (하나 이상의 공백 또는 슬래시로 구분). 이것은 Apache 자식의 PID입니다.
개선하기 : (위와 동일한 방법을 통해) 하나의 PID 만 반환하는 것 외에도 패턴에 맞는 다른 것과는 달리 dport를 실제로 일치시킬 때 더 차별적이라고 생각할 수 있습니다. FS ( -F
)에 콜론을 추가하여 쉽게 수행 할 수 있었지만, 주소 자체에 콜론이있을 수있는 IPv4와 IPv6 혼합 상황에서는 문제가 발생하여 다소 빨리 불쾌해질 수 있습니다. 이것은 특히 후행 공간에서 꽤 강력 해 보였습니다.
sudo strace -o /tmp/strace -f -s4096 -r -p
이것은 원래 질문에서 직접 복사 한 것입니다. 최소한 수정하지 않았습니다.
몇 가지 추가 문자를 허용하면 내가 실행하는 버전은 다음과 같습니다.
sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \$5;exit}") / && /apache2/ {print \$7;exit}")