strace -p $(netstat -tnp|awk -F'[ /]+' "/:$(netstat -tnp|awk -F'[ :]+'
"/\/telnet/{print \$5}") /&&/apache2/{print \$7}")
Ou, formaté pour une lecture plus facile, et avec les indicateurs de strace de l'OP intacts:
sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \$5}") / && /apache2/ {print \$7}")
Répartition, la plus intérieure en premier:
netstat -tnp | awk -F'[ :]+' "/\/telnet/ {print \$5}"
Montrez-moi, sans résoudre les adresses IP en noms DNS, toutes les connexions TCP actives. Dirigez cela vers awk, qui imprime le cinquième champ sur n'importe quelle ligne se terminant par /telnet
, où les champs sont séparés par un ou plusieurs espaces et deux-points. Ce champ sera le port source.
Pour améliorer : pourrait être rendu beaucoup plus robuste en ajoutant un | head -n 1
à la fin ou un ;exit
à l'intérieur de la partie action de l'awk, mais votre version originale manquait d'équivalent, donc je ne voulais pas prolonger celle-ci.
netstat -tnp | awk -F'[ /]+' "/:**** / && /apache2/ {print \$7}")
La ****
voici la partie que je l' ai déjà expliqué ci-dessus. Ici, je recherche n'importe quelle ligne netstat -tnp
qui a le même port que le port source que j'ai découvert ci-dessus et qui appartient à Apache; quand je le trouve, j'imprime le septième champ (délimité par un ou plusieurs espaces ou barres obliques). Il s'agit du PID de l'enfant Apache.
Pour améliorer : En plus de renvoyer un seul PID (via les mêmes méthodes que ci-dessus), la plus grande chose que j'imagine est d'être plus discriminant lorsqu'il s'agit de faire correspondre le dport par opposition à quelque chose d'autre qui se trouve correspondre au modèle. Cela aurait été facile à faire en ajoutant des deux-points à FS ( -F
), mais le problème se produit dans des situations mixtes IPv4 vs IPv6, où il pourrait y avoir des deux-points dans l'adresse elle-même, et en tant que tel, pourrait devenir méchant assez rapidement. Cela semblait sacrément robuste, surtout avec l'espace de fuite.
sudo strace -o /tmp/strace -f -s4096 -r -p
Il s'agit d'une copie directe de votre question d'origine; Je ne l'ai pas modifié du tout.
Si vous me permettez quelques caractères supplémentaires, la version que j'utiliserais pourrait être:
sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \$5;exit}") / && /apache2/ {print \$7;exit}")