strace -p $(netstat -tnp|awk -F'[ /]+' "/:$(netstat -tnp|awk -F'[ :]+'
"/\/telnet/{print \$5}") /&&/apache2/{print \$7}")
Oder zum leichteren Lesen formatiert und mit intakten Strace-Flags des OP:
sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \$5}") / && /apache2/ {print \$7}")
Zusammenbruch, innerste zuerst:
netstat -tnp | awk -F'[ :]+' "/\/telnet/ {print \$5}"
Zeigen Sie mir alle aktiven TCP-Verbindungen, ohne IP-Adressen in DNS-Namen aufzulösen. Leiten Sie das an awk weiter, wodurch das fünfte Feld in einer Zeile gedruckt wird, die mit endet /telnet
, wobei die Felder durch ein oder mehrere Leerzeichen und Doppelpunkte getrennt sind. Dieses Feld ist der Quellport.
Zur Verbesserung : Könnte durch Hinzufügen eines | head -n 1
am Ende oder ;exit
innerhalb des Aktionsbereichs der awk wesentlich robuster gemacht werden , aber Ihrer Originalversion fehlte ein Äquivalent, sodass ich diese nicht länger machen wollte.
netstat -tnp | awk -F'[ /]+' "/:**** / && /apache2/ {print \$7}")
Das ****
hier ist der Teil, den ich oben bereits erklärt habe. Hier suche ich nach einer Zeile netstat -tnp
, die denselben Port wie der oben entdeckte Quellport hat und Apache gehört. Wenn ich es finde, drucke ich das siebte Feld (begrenzt durch ein oder mehrere Leerzeichen oder Schrägstriche). Dies ist die PID des Apache-Kindes.
Zur Verbesserung : Abgesehen davon, dass nur eine PID zurückgegeben wird (über die gleichen Methoden wie oben), kann ich mir nur vorstellen, dass ich diskriminierender bin, wenn es darum geht, den dport tatsächlich abzugleichen, im Gegensatz zu etwas anderem, das zufällig zum Muster passt. Dies wäre einfach durch Hinzufügen von Doppelpunkten zum FS ( -F
) möglich gewesen, aber das Problem tritt in gemischten IPv4- und IPv6-Situationen auf, in denen die Adresse selbst möglicherweise Doppelpunkte enthält und als solche ziemlich schnell unangenehm werden kann. Dies schien verdammt robust zu sein, besonders mit dem nachlaufenden Raum.
sudo strace -o /tmp/strace -f -s4096 -r -p
Dies ist eine direkte Kopie Ihrer ursprünglichen Frage. Ich habe es nicht im geringsten geändert.
Wenn Sie mir ein paar zusätzliche Zeichen erlauben, könnte die folgende Version lauten:
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}")