Saya cukup baru untuk strace / netstat / dll. Saya menggunakan perintah ini untuk mendapatkan jejak proses apache yang menangani permintaan saya (telnet), apakah ada cara untuk menyederhanakannya sedikit?
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')
Terima kasih!
bash
command-line-interface
strace
Andrei Serdeliuc
sumber
sumber
Jawaban:
Saya dapat meningkatkan sedikit pada Mark Henderson, dengan $ () daripada `` dan menghapus grep dengan sed yang lebih baik:
Secara pribadi saya pikir backtick membuatnya sulit dibaca; lebih jauh, mereka tidak bersarang, tidak seperti sintaksis $ ()
sumber
strace
masuk ke telnet, bukan ke proses Apache yang menyajikannya.strace -p $(ss -npt|sed -n "/:$(ss -npt|sed -n '/telnet/s/^.*\?:\([0-9]\+\).*/\1/p') \+u/s/.*,\(.*\),.*/\1/p")
Selama Anda hanya memiliki satu yang
telnet
berjalan, ini akanstrace
menjadi server yang sesuai jika ada.Jika tidak ada ( mis. Anda terakhir kali
telnet
ke server eksternal),strace
akan gagalstrace: option requires an argument -- 'p'
sumber
Atau, diformat untuk membaca lebih mudah, dan dengan bendera strace OP utuh:
Kerusakan, terdalam terlebih dahulu:
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.Di
****
sini adalah bagian yang sudah saya jelaskan di atas. Di sini, saya mencari baris apa punnetstat -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.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:
sumber
Coba ini, semoga membantu:
sumber
strace
ke dalamtelnet
, bukan Apache.