strace -p $(netstat -tnp|awk -F'[ /]+' "/:$(netstat -tnp|awk -F'[ :]+'
"/\/telnet/{print \$5}") /&&/apache2/{print \$7}")
Або відформатований для легшого читання та недоторканих прапорців напруженої сили:
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-з'єднання. Pipe that to awk, який друкує п’яте поле на будь-якій лінії, що закінчується /telnet
, де поля розділені одним або декількома пробілами та двокрапками. Це поле буде вихідним портом.
Для вдосконалення : Можна зробити набагато надійнішим, додавши | head -n 1
до кінця чи ;exit
внутрішньої частини дії awk, але у вашій оригінальній версії не вистачало еквіваленту, тому я не хотів робити цю довшу.
netstat -tnp | awk -F'[ /]+' "/:**** / && /apache2/ {print \$7}")
****
Тут частина я вже пояснив вище. Тут я шукаю будь-яку лінію в netstat -tnp
такому ж порту, що і вихідний порт, який я виявив вище, і належить Apache; коли я знаходжу це, я друкую сьоме поле (відмежоване одним або декількома пробілами чи косою рисою). Це ПІД дитини Apache.
Для покращення : окрім лише повернення одного PID (за допомогою тих же методів, що і вище), найбільше, що я можу собі уявити, є більш дискримінаційним, коли мова йде про фактичне відповідність депорту на відміну від чогось іншого, що так трапляється, щоб відповідати шаблону. Це було б легко зробити, додавши колони до 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}")