strace -p $(netstat -tnp|awk -F'[ /]+' "/:$(netstat -tnp|awk -F'[ :]+'
"/\/telnet/{print \$5}") /&&/apache2/{print \$7}")
Lub sformatowane w celu łatwiejszego czytania i przy nienaruszonych flagach śledzenia PO:
sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \$5}") / && /apache2/ {print \$7}")
Podział, od najbardziej wewnętrznego:
netstat -tnp | awk -F'[ :]+' "/\/telnet/ {print \$5}"
Pokaż, bez rozpoznawania adresów IP na nazwy DNS, wszystkie aktywne połączenia TCP. Pipe to awk, który drukuje piąte pole na dowolnej linii kończącej się na /telnet
, gdzie pola są oddzielone jedną lub więcej spacjami i dwukropkami. To pole będzie portem źródłowym.
Aby poprawić : można by uczynić znacznie bardziej niezawodnym przez dodanie | head -n 1
do końca lub ;exit
wewnętrznej części awk akcji, ale w twojej oryginalnej wersji brakowało odpowiednika, więc nie chciałem, aby ten był dłuższy.
netstat -tnp | awk -F'[ /]+' "/:**** / && /apache2/ {print \$7}")
****
Oto część I już wyjaśnione powyżej. Tutaj szukam dowolnej linii, netstat -tnp
która ma ten sam port co port źródłowy, którą odkryłem powyżej i jest własnością Apache; kiedy go znajdę, wypisuję siódme pole (ograniczone jedną lub kilkoma spacjami lub ukośnikami). To jest PID dziecka Apache.
Aby poprawić : oprócz zwracania tylko jednego PID (tymi samymi metodami, co powyżej), największą rzeczą, jaką mogę sobie wyobrazić, jest bardziej dyskryminujące, jeśli chodzi o faktyczne dopasowanie dport w przeciwieństwie do czegoś innego, co akurat pasuje. Byłoby to łatwe, dodając dwukropki do FS ( -F
), ale problem występuje w mieszanych sytuacjach IPv4 vs. IPv6, w których w samym adresie mogą znajdować się dwukropki i jako takie mogą stać się nieprzyjemne dość szybko. Wydawało się to cholernie solidne, szczególnie w przypadku tylnego miejsca.
sudo strace -o /tmp/strace -f -s4096 -r -p
To jest bezpośrednia kopia z twojego oryginalnego pytania; Ja przynajmniej tego nie zmodyfikowałem.
Jeśli pozwolisz mi na kilka dodatkowych znaków, wersją, którą uruchomię, może być:
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}")