strace -p $(netstat -tnp|awk -F'[ /]+' "/:$(netstat -tnp|awk -F'[ :]+'
"/\/telnet/{print \$5}") /&&/apache2/{print \$7}")
หรือจัดรูปแบบเพื่อให้อ่านง่ายขึ้นและด้วยสถานะ strace ของ OP ไม่เปลี่ยนแปลง:
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
โดยที่ฟิลด์ถูกคั่นด้วยช่องว่างและโคลอนอย่างน้อยหนึ่งรายการ ฟิลด์นี้จะเป็นพอร์ตต้นทาง
วิธีปรับปรุง : สามารถเพิ่มความแข็งแกร่งได้มากขึ้นโดยการเพิ่ม a | head -n 1
ไปยังส่วนท้ายหรือส่วน;exit
ในแอ็คชั่นของ awk แต่เวอร์ชันดั้งเดิมของคุณขาดความเท่าเทียมกันดังนั้นฉันจึงไม่ต้องการทำให้มันยาวขึ้น
netstat -tnp | awk -F'[ /]+' "/:**** / && /apache2/ {print \$7}")
****
นี่คือส่วนหนึ่งที่ผมได้อธิบายไปแล้วข้างต้น ที่นี่ฉันกำลังมองหาบรรทัดใด ๆnetstat -tnp
ที่มีพอร์ตเดียวกับพอร์ตต้นทางที่ฉันค้นพบด้านบนและเป็นของ Apache เมื่อฉันพบฉันพิมพ์เขตข้อมูลที่เจ็ด (คั่นด้วยช่องว่างหนึ่งหรือหลายช่องหรือทับ) นี่คือ PID ของลูก Apache
เพื่อปรับปรุง : นอกเหนือจากการคืนค่า 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}")