Je suis assez nouveau dans strace / netstat / etc. J'utilise cette commande pour obtenir une trace du processus apache qui gère ma demande (telnet), existe-t-il un moyen de le simplifier un peu?
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')
Merci!
bash
command-line-interface
strace
Andrei Serdeliuc
la source
la source
Réponses:
Je peux améliorer un peu celui de Mark Henderson, avec $ () au lieu de `` et supprimer le grep avec un meilleur sed:
Personnellement, je pense que les contre-coups rendent la lecture difficile; de plus, ils ne s'emboîtent pas, contrairement à la syntaxe $ ()
la source
strace
est dans le telnet, pas dans le processus Apache qui le sert.strace -p $(ss -npt|sed -n "/:$(ss -npt|sed -n '/telnet/s/^.*\?:\([0-9]\+\).*/\1/p') \+u/s/.*,\(.*\),.*/\1/p")
Tant que vous n'en avez qu'un seul en
telnet
cours d'exécution, ce serastrace
le serveur correspondant le cas échéant.S'il n'y en a pas ( par exemple, vous avez
telnet
édité sur un serveur externe en dernier),strace
échouera avecstrace: option requires an argument -- 'p'
la source
Ou, formaté pour une lecture plus facile, et avec les indicateurs de strace de l'OP intacts:
Répartition, la plus intérieure en premier:
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.La
****
voici la partie que je l' ai déjà expliqué ci-dessus. Ici, je recherche n'importe quelle lignenetstat -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.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:
la source
Essayez ceci, j'espère que cela vous aidera:
la source
strace
dans letelnet
, pas Apache.