strace -p $(netstat -tnp|awk -F'[ /]+' "/:$(netstat -tnp|awk -F'[ :]+'
"/\/telnet/{print \}") /&&/apache2/{print \}")
Ou formatado para facilitar a leitura e com os sinalizadores de strace do OP intactos:
sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \}") / && /apache2/ {print \}")
Divisão, primeiro mais interno:
netstat -tnp | awk -F'[ :]+' "/\/telnet/ {print \}"
Mostre-me, sem resolver endereços IP para nomes DNS, todas as conexões TCP ativas. Pipe that 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 porção de ação do awk, mas sua versão original não tinha um equivalente, então Eu não queria fazer isso mais tempo.
netstat -tnp | awk -F'[ /]+' "/:**** / && /apache2/ {print \}")
O ****
aqui é a parte que eu já expliquei acima. Aqui, estou procurando por qualquer linha em netstat -tnp
que tenha a mesma porta que a porta de origem que eu 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 da criança do Apache.
Para melhorar : Além de apenas retornar um PID (pelos 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. Isso só acontece para se encaixar no padrão. Isso teria sido fácil, adicionando-se dois pontos ao FS ( -F
), mas o problema ocorre em situações mistas de IPv4 versus IPv6, onde pode haver dois pontos no próprio endereço e, como tal, pode ficar muito rápido. Isso parecia bastante robusto, especialmente com o espaço à direita.
sudo strace -o /tmp/strace -f -s4096 -r -p
Esta é uma cópia direta da sua pergunta original; Eu não modifiquei nem um pouco.
Se você me permitir alguns caracteres extras, a versão que eu executei pode ser:
sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \;exit}") / && /apache2/ {print \;exit}")