Eu sou bastante novo no strace / netstat / etc. Estou usando este comando para obter um rastreamento do processo apache que lida com minha solicitação (telnet). Existe uma maneira de simplificá-lo um pouco?
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')
Obrigado!
bash
command-line-interface
strace
Andrei Serdeliuc
fonte
fonte
Respostas:
Eu posso melhorar um pouco o Mark Henderson, com $ () em vez de `` e remover o grep com um sed melhor:
Pessoalmente, acho que os backticks dificultam a leitura; além disso, eles não aninham, ao contrário da sintaxe $ ()
fonte
strace
está no telnet, não no processo Apache que está sendo veiculado.strace -p $(ss -npt|sed -n "/:$(ss -npt|sed -n '/telnet/s/^.*\?:\([0-9]\+\).*/\1/p') \+u/s/.*,\(.*\),.*/\1/p")
Contanto que você tenha apenas um em
telnet
execução, este serástrace
o servidor correspondente, se houver.Se não houver um ( por exemplo, você
telnet
ed passado para um servidor externo),strace
falhará comstrace: option requires an argument -- 'p'
fonte
Ou formatado para facilitar a leitura e com os sinalizadores de rastreamento do OP intactos:
Desagregação, a mais interna primeiro:
Mostre-me, sem resolver endereços IP para nomes DNS, todas as conexões TCP ativas. Canalize para awk, que imprime o quinto campo em qualquer linha que termina em
/telnet
, onde os campos são separados por um ou mais espaços e dois pontos. Este campo será a porta de origem.Para melhorar : poderia ser muito mais robusto adicionando um
| head -n 1
ao final ou um;exit
dentro da parte de ação do awk, mas sua versão original não possuía um equivalente, por isso não queria prolongar essa.A
****
aqui é a parte que eu já expliquei acima. Aqui, estou procurando por qualquer linhanetstat -tnp
que tenha a mesma porta que a porta de origem que descobri acima e seja de propriedade do Apache; quando o encontro, imprimo o sétimo campo (delimitado por um ou mais espaços ou barras). Este é o PID do filho Apache.Para melhorar : além de retornar apenas um PID (através dos mesmos métodos acima), a maior coisa que posso imaginar é ser mais discriminativo quando se trata de realmente corresponder ao dport em oposição a outra coisa que se encaixa no padrão. Isso seria fácil adicionando dois pontos ao FS (
-F
), mas o problema ocorre em situações mistas de IPv4 vs. IPv6, onde pode haver dois pontos no próprio endereço e, como tal, podem se tornar desagradáveis rapidamente. Isso parecia bastante robusto, especialmente com o espaço à direita.Esta é uma cópia direta da sua pergunta original; Eu não o modifiquei nem um pouco.
Se você me permitir alguns caracteres extras, a versão que eu executaria pode ser:
fonte
Tente isso, espero que ajude:
fonte
strace
é para otelnet
Apache, não.