Я совершенно новичок в strace / netstat / и т.д. Я использую эту команду для отслеживания процесса apache, обрабатывающего мой запрос (telnet), есть ли способ немного его упростить?
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')
Спасибо!
bash
command-line-interface
strace
Андрей Серделюк
источник
источник
Ответы:
Я могу немного улучшить Марк Хендерсона, используя $ () вместо `` и удалив grep с помощью лучшего sed:
Лично я думаю, что черты затрудняют чтение; кроме того, они не вкладываются, в отличие от синтаксиса $ ()
источник
strace
входит в телнет, а не в обслуживающий его процесс Apache.strace -p $(ss -npt|sed -n "/:$(ss -npt|sed -n '/telnet/s/^.*\?:\([0-9]\+\).*/\1/p') \+u/s/.*,\(.*\),.*/\1/p")
Пока у вас есть только один
telnet
запущенный, это будетstrace
соответствующий сервер, если таковой имеется.Если его нет ( например, вы
telnet
последний раз редактировали внешний сервер),strace
произойдет сбой сstrace: option requires an argument -- 'p'
источник
Или, отформатированный для более легкого чтения, и с целыми флагами OP:
Разбивка, сначала внутренняя:
Покажите мне, без разрешения IP-адресов для DNS-имен, все активные соединения TCP. Передайте это в awk, который печатает пятое поле в любой строке, заканчивающейся на
/telnet
, где поля разделены одним или несколькими пробелами и двоеточиями. Это поле будет портом источника.Для улучшения : можно сделать намного более надежным, добавив
| head -n 1
в конец или;exit
внутри часть действия awk, добавив в конец действия, но вашей оригинальной версии не хватало эквивалента, поэтому я не хотел делать его длиннее.****
Здесь часть я уже объяснил выше. Здесь я ищу любую линиюnetstat -tnp
с тем же портом, что и порт источника, который я обнаружил выше, и принадлежит Apache; когда я нахожу его, я печатаю седьмое поле (ограниченное одним или несколькими пробелами или косой чертой). Это PID ребенка Apache.Для улучшения : Помимо возвращения только одного PID (с помощью тех же методов, что и выше), самое большое, что я могу себе представить, это быть более разборчивым, когда речь идет о фактическом сопоставлении dport, а не о чем-то еще, что просто соответствует шаблону. Это было бы легко сделать, добавив двоеточия в FS (
-F
), но проблема возникает в смешанных ситуациях IPv4 и IPv6, где в самом адресе могут быть двоеточия, и, как таковые, они могут довольно быстро стать неприятными. Это казалось чертовски крепким, особенно в конце.Это прямая копия вашего оригинального вопроса; Я не изменил это ни в малейшей степени.
Если вы позволите мне добавить несколько дополнительных символов, возможно, будет использоваться следующая версия:
источник
Попробуйте это, надеюсь, это поможет:
источник
strace
S вtelnet
, не Apache.