strace -p $(netstat -tnp|awk -F'[ /]+' "/:$(netstat -tnp|awk -F'[ :]+'
"/\/telnet/{print \$5}") /&&/apache2/{print \$7}")
Oppure, formattato per una lettura più semplice e con i flag strace dell'OP intatti:
sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \$5}") / && /apache2/ {print \$7}")
Ripartizione, prima di tutto:
netstat -tnp | awk -F'[ :]+' "/\/telnet/ {print \$5}"
Fammi vedere, senza risolvere gli indirizzi IP in nomi DNS, tutte le connessioni TCP attive. Installa quello su awk, che stampa il quinto campo su qualsiasi linea che termina in /telnet
, dove i campi sono separati da uno o più spazi e due punti. Questo campo sarà la porta di origine.
Per migliorare : potrebbe essere reso molto più robusto aggiungendo un | head -n 1
alla fine o un ;exit
interno alla parte dell'azione di awk, ma la tua versione originale mancava di un equivalente, quindi non volevo prolungarlo.
netstat -tnp | awk -F'[ /]+' "/:**** / && /apache2/ {print \$7}")
Il ****
qui è la parte che ho già spiegato, al di sopra. Qui sto cercando qualsiasi linea netstat -tnp
che abbia la stessa porta della porta di origine che ho scoperto sopra ed è di proprietà di Apache; quando lo trovo, stampo il settimo campo (delimitato da uno o più spazi o barre). Questo è il PID del bambino Apache.
Per migliorare : Oltre a restituire un solo PID (tramite gli stessi metodi di cui sopra), la cosa più grande che posso immaginare è quella di essere più discriminante quando si tratta di abbinare effettivamente il dport al contrario di qualcos'altro che si adatta allo schema. Questo sarebbe stato facile da fare aggiungendo due punti a FS ( -F
), ma il problema si verifica in situazioni miste IPv4 contro IPv6, dove potrebbero esserci due punti nell'indirizzo stesso e come tali potrebbero diventare cattivi piuttosto rapidamente. Sembrava dannatamente robusto, specialmente con lo spazio finale.
sudo strace -o /tmp/strace -f -s4096 -r -p
Questa è una copia diretta della tua domanda originale; Non l'ho modificato per niente.
Se mi permettessi qualche personaggio in più, la versione che eseguirò potrebbe essere:
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}")