Soy bastante nuevo en strace / netstat / etc. Estoy usando este comando para obtener un rastro del proceso de apache que maneja mi solicitud (telnet), ¿hay alguna manera de simplificarlo un poco?
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')
¡Gracias!
bash
command-line-interface
strace
Andrei Serdeliuc
fuente
fuente
Respuestas:
Puedo mejorar un poco a Mark Henderson, con $ () en lugar de `` y eliminando el grep con un mejor sed:
Personalmente, creo que los backticks dificultan la lectura; además, no anidan, a diferencia de la sintaxis $ ()
fuente
strace
está en el telnet, no en el proceso de Apache que lo sirve.strace -p $(ss -npt|sed -n "/:$(ss -npt|sed -n '/telnet/s/^.*\?:\([0-9]\+\).*/\1/p') \+u/s/.*,\(.*\),.*/\1/p")
Siempre que solo tenga uno en
telnet
ejecución, este serástrace
el servidor correspondiente, si lo hay.Si no hay uno ( p . Ej. , Lo
telnet
editó a un servidor externo en último lugar),strace
fallará constrace: option requires an argument -- 'p'
fuente
O, formateado para una lectura más fácil, y con los indicadores de strace del OP intactos:
Desglose, lo más interno primero:
Muéstrame, sin resolver las direcciones IP a los nombres DNS, todas las conexiones TCP activas. Canalice eso a awk, que imprime el quinto campo en cualquier línea que termine en
/telnet
, donde los campos están separados por uno o más espacios y dos puntos. Este campo será el puerto de origen.Para mejorar : podría hacerse mucho más robusto agregando un
| head -n 1
al final o;exit
dentro de la parte de acción del awk, pero su versión original carecía de un equivalente, por lo que no quería alargarla.El
****
aquí es la parte ya he explicado, arriba. Aquí, estoy buscando cualquier líneanetstat -tnp
que tenga el mismo puerto que el puerto de origen que descubrí anteriormente, y es propiedad de Apache; cuando lo encuentro, imprimo el séptimo campo (delimitado por uno o más espacios o barras). Este es el PID del niño Apache.Para mejorar : además de devolver solo un PID (a través de los mismos métodos que el anterior), lo más importante que puedo imaginar es ser más discriminatorio cuando se trata de hacer coincidir el dport en lugar de algo más que simplemente se ajusta al patrón. Esto habría sido fácil de hacer agregando dos puntos al FS (
-F
), pero el problema ocurre en situaciones mixtas de IPv4 frente a IPv6, donde podría haber dos puntos en la dirección en sí, y como tal podría volverse desagradable bastante rápido. Esto parecía bastante robusto, especialmente con el espacio final.Esta es una copia directa de su pregunta original; No lo modifiqué en lo más mínimo.
Si me permite algunos caracteres adicionales, la versión que ejecutaría podría ser:
fuente
Prueba esto, espero que ayude:
fuente
strace
está en eltelnet
, no en Apache.