Jestem całkiem nowy w strace / netstat / itp. Używam tego polecenia, aby uzyskać ślad procesu apache obsługującego moje żądanie (telnet), czy istnieje sposób, aby to nieco uprościć?
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')
Dzięki!
bash
command-line-interface
strace
Andrei Serdeliuc
źródło
źródło
Odpowiedzi:
Mogę trochę poprawić Mark Henderson za pomocą $ () zamiast `` i usuwanie grep za pomocą lepszego sed:
Osobiście uważam, że backticks utrudniają czytanie; ponadto nie zagnieżdżają się, w przeciwieństwie do składni $ ()
źródło
strace
się w telnecie, a nie w procesie Apache, który go obsługuje.strace -p $(ss -npt|sed -n "/:$(ss -npt|sed -n '/telnet/s/^.*\?:\([0-9]\+\).*/\1/p') \+u/s/.*,\(.*\),.*/\1/p")
Tak długo, jak masz tylko jeden
telnet
uruchomiony, będziestrace
to odpowiedni serwer, jeśli taki istnieje.Jeśli nie ma ani jednego ( np ty
telnet
ed do zewnętrznego serwera ostatni),strace
nie powiedzie sięstrace: option requires an argument -- 'p'
źródło
Lub sformatowane w celu łatwiejszego czytania i przy nienaruszonych flagach śledzenia PO:
Podział, od najbardziej wewnętrznego:
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.****
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.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ć:
źródło
Wypróbuj to, mam nadzieję, że to pomoże:
źródło
strace
dotyczytelnet
, nie Apache.