Ich bin ziemlich neu in strace / netstat / etc. Ich verwende diesen Befehl, um eine Spur des Apache-Prozesses zu erhalten, der meine Anfrage (Telnet) verarbeitet. Gibt es eine Möglichkeit, dies ein wenig zu vereinfachen?
sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -antlp | \
grep $(lsof -p `pidof telnet` | grep TCP | \
perl -n -e'/localhost:(\d+)/ && print $1') | grep apache2 | \
perl -n -e'/ESTABLISHED (\d+)/ && print $1')
Vielen Dank!
bash
command-line-interface
strace
Andrei Serdeliuc
quelle
quelle
Antworten:
Ich kann Mark Hendersons ein wenig verbessern, mit $ () anstelle von `` und den Grep mit einem besseren Sed entfernen:
Persönlich denke ich, dass die Backticks das Lesen erschweren; Außerdem werden sie im Gegensatz zur Syntax $ () nicht verschachtelt
quelle
strace
sich im Telnet und nicht im Apache-Prozess, der es bereitstellt.strace -p $(ss -npt|sed -n "/:$(ss -npt|sed -n '/telnet/s/^.*\?:\([0-9]\+\).*/\1/p') \+u/s/.*,\(.*\),.*/\1/p")
Solange nur einer
telnet
ausgeführt wird, wirdstrace
der entsprechende Server angezeigt, falls vorhanden.Wenn es keinen gibt ( z. B. wenn Sie zuletzt
telnet
auf einen externen Server gegangen sind),strace
schlägt dies fehlstrace: option requires an argument -- 'p'
quelle
Oder zum leichteren Lesen formatiert und mit intakten Strace-Flags des OP:
Zusammenbruch, innerste zuerst:
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.Das
****
hier ist der Teil, den ich oben bereits erklärt habe. Hier suche ich nach einer Zeilenetstat -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.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:
quelle
Versuchen Sie dies, hoffe es hilft:
quelle
strace
in dentelnet
, nicht Apache.