GNU/Linux >> Belajar Linux >  >> Linux

Mencegat input dan output dari executable tertentu

Opsi 1 adalah memodifikasi kode sumber aplikasi pemanggil dan menyisipkan tee ke saluran keluaran untuk mendapatkan salinan keluaran untuk ditinjau pada tahap itu.

Opsi 2 adalah menulis skrip pembungkus di sekitar file yang dapat dieksekusi yang dimaksud. Skrip cepat yang meneruskan stdin dan argumen ke aplikasi sebenarnya, lalu mengarahkan output ke lokasi untuk Anda tinjau dan juga mengeluarkannya kembali dengan cara yang sama seperti aplikasi seharusnya hanya beberapa baris untuk disiapkan. Taruh di tempat khusus dan tambahkan lokasi itu ke depan variabel PATH Anda, lalu jalankan aplikasi Anda.

#!/bin/sh
cat - | /path/to/realapp [email protected] | tee /tmp/debug_output

Anda dapat memperoleh banyak informasi tentang suatu program dengan memanggilnya di bawah strace . Ini menunjukkan setiap panggilan sistem yang dibuat oleh program, yang kadang-kadang bisa menjadi terlalu banyak informasi, tetapi bisa sangat membantu untuk menemukan apa yang salah.

Pendekatan pertama adalah menjalankan aplikasi besar Anda di bawah strace . Ini kemungkinan akan menghasilkan banyak output dan memperlambat aplikasi Anda.

strace -s9999 -efile,process -f -o bigapp.strace bigapp

Jika aplikasi besar bersifat interaktif, Anda dapat memilih untuk memulainya, dan menyambungkan strace ke aplikasi tersebut setelah Anda siap memicu penghitungan. Catat ID proses aplikasi, misalnya 12345, dan jalankan

strace -s9999 -efile,process -f -o bigapp-calculations.strace -p12345

Jika cukup mengamati executable eksternal itu, maka seperti jawaban lain yang telah disarankan, ganti executable itu dengan skrip pembungkus. Anda dapat memindahkan file yang dapat dieksekusi ke nama yang berbeda dan meletakkan skrip pembungkus di tempatnya, atau meletakkan skrip pembungkus di depan file yang dapat dieksekusi biasa di PATH , atau konfigurasikan aplikasi untuk memanggil skrip pembungkus Anda alih-alih yang dapat dieksekusi biasa, apa pun yang nyaman. Buat skrip pembungkus itu

#!/bin/sh
exec strace -s9999 -efile -o auxapp-$$.strace /path/to/original/executable "[email protected]"

Penjelasan parameter strace yang digunakan:

  • -e memilih panggilan sistem untuk dilacak. Anda dapat menentukan panggilan sistem berdasarkan nama atau menggunakan beberapa kategori seperti file (open , close , read , write , …) dan process (fork , execve , …).
  • -f membuat strace mengikuti garpu, yaitu melacak subproses serta proses asli.
  • -o memilih nama file yang berisi jejak. $$ adalah konstruksi shell yang mewakili ID proses dari proses shell (karena penggunaan exec dalam skrip pembungkus terakhir, itu juga akan menjadi ID proses aplikasi tambahan).
  • -s9999 membuatnya menampilkan banyak byte untuk read dan write dan panggilan lainnya.

Daripada mengubah jalur Anda, Anda harus memindahkan biner yang Anda minati dari "binary" ke "binary.orig" lalu menggantinya dengan skrip. Anda mengatakan bahwa Anda tertarik dengan argumennya, jadi Anda juga ingin menuliskannya ke file. Anda mungkin juga akan tertarik dengan keluaran dari perintah "env". Itu membuang semua variabel lingkungan yang sedang aktif. Variabel lingkungan sering digunakan oleh satu program untuk memengaruhi perilaku program lain yang dipanggilnya.


Linux
  1. Cara menangkap sesi terminal dan output dengan perintah skrip Linux

  2. Bagaimana Cara Kerja Input Keyboard Dan Output Teks?

  3. Menghapus Karakter Kontrol (termasuk Kode / Warna Konsol) Dari Output Skrip?

  1. Paksa Output Ke Input (buffer) Seperti “33[6n” Dalam Skrip?

  2. Mencegat Input Dan Output Dari Executable Tertentu?

  3. Menjalankan skrip Python dari PHP

  1. Bekerja dengan Input Output dan Error Redirection di Linux

  2. Bagaimana cara ftp dan Mengunduh file dari Skrip Shell UNIX?

  3. MYSQL berbeda dalam Keluaran dari skrip