strace -p $(netstat -tnp|awk -F'[ /]+' "/:$(netstat -tnp|awk -F'[ :]+'
"/\/telnet/{print \$5}") /&&/apache2/{print \$7}")
Atau, diformat untuk membaca lebih mudah, dan dengan bendera strace OP utuh:
sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \$5}") / && /apache2/ {print \$7}")
Kerusakan, terdalam terlebih dahulu:
netstat -tnp | awk -F'[ :]+' "/\/telnet/ {print \$5}"
Tunjukkan pada saya, tanpa menyelesaikan alamat IP ke nama DNS, semua koneksi TCP aktif. Pipa itu untuk awk, yang mencetak bidang kelima pada setiap garis yang berakhir /telnet
, di mana bidang dipisahkan oleh satu atau lebih spasi dan titik dua. Bidang ini akan menjadi port sumber.
Untuk meningkatkan : Bisa dibuat lebih kuat dengan menambahkan a | head -n 1
ke bagian akhir atau bagian ;exit
dalam aksi awk, tetapi versi asli Anda kurang setara, jadi saya tidak ingin membuatnya lebih lama.
netstat -tnp | awk -F'[ /]+' "/:**** / && /apache2/ {print \$7}")
Di ****
sini adalah bagian yang sudah saya jelaskan di atas. Di sini, saya mencari baris apa pun netstat -tnp
yang memiliki port yang sama dengan port sumber yang saya temukan di atas, dan dimiliki oleh Apache; ketika saya menemukannya, saya mencetak bidang ketujuh (dibatasi oleh satu atau lebih spasi atau garis miring). Ini adalah PID anak Apache.
Untuk meningkatkan : Selain hanya mengembalikan satu PID (melalui metode yang sama seperti di atas), hal terbesar yang dapat saya bayangkan adalah menjadi lebih diskriminatif ketika benar-benar cocok dengan dport dibandingkan dengan sesuatu yang lain yang kebetulan cocok dengan polanya. Ini akan mudah dilakukan dengan menambahkan titik dua ke FS ( -F
), tetapi masalah terjadi dalam situasi IPv4 dan IPv6 campuran, di mana mungkin ada titik dua dalam alamat itu sendiri, dan dengan demikian bisa menjadi jahat dengan cepat. Ini tampaknya cukup kuat, terutama dengan ruang gerak.
sudo strace -o /tmp/strace -f -s4096 -r -p
Ini adalah salinan langsung dari pertanyaan awal Anda; Saya tidak memodifikasinya sama sekali.
Jika Anda mengizinkan saya beberapa karakter tambahan, versi yang saya jalankan mungkin:
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}")