Bagaimana saya tahu file apa yang dieksekusi ketika saya membuka aplikasi?

12

Saya ingin tahu apa yang terjadi di balik layar ketika saya membuka beberapa aplikasi. Misalnya, ketika saya membuka firefox, saya ingin tahu file mana yang dibaca dan yang dijalankan. Apakah ada cara untuk melakukan ini? Bahkan membuka firefox dari terminal tidak menunjukkan informasi apa pun. OS: Ubuntu 12.04

nitishch
sumber

Jawaban:

21

Gunakan strace!

Contoh: Daftar semua file yang dibuka oleh Firefox selama sesi:

strace -f firefox 2>&1 | grep 'open('

Menghasilkan sesuatu seperti ini jika Anda membuka instance kedua FireFox: http://pastebin.com/iRqxgiWN (Opsi '-f' hanya membuat strace follow forks fork.)

Contoh 2: Daftar semua proses yang dijalankan oleh FireFox:

strace -f firefox 2>&1 | grep -P 'exec[vlpe]*\('

Menghasilkan sesuatu seperti ini ketika mengunjungi YouTube:

[pid 25020] execve("/usr/lib/firefox/plugin-container", ["/usr/lib/firefox/plugin-containe"..., "/usr/lib/adobe-flashplugin/libfl"..., "-greomni", "/usr/lib/firefox/omni.ja", "-appomni", "/usr/lib/firefox/browser/omni.ja", "-appdir", "/usr/lib/firefox/browser", "15198", "false", "plugin"], [/* 57 vars */]) = 0
[pid 25024] execve("/bin/sh", ["sh", "-c", "ps x | grep netscape"], [/* 57 vars */]) = 0
[pid 25025] execve("/bin/ps", ["ps", "x"], [/* 57 vars */] <unfinished ...>
[pid 25026] execve("/bin/grep", ["grep", "netscape"], [/* 57 vars */]) = 0

Anda dapat melakukan ini dengan banyak panggilan sistem lainnya juga ...

Dengan mencocokkan parameter open()dalam greppencarian Anda, Anda juga dapat mengetahui dalam mode apa file telah dibuka:

Cukup tambahkan | grep -P 'O_RDONLY|O_RDWR'(karakter utama pipa penting!) Untuk memfilter akses baca atau | grep -P 'O_WRONLY|O_RDWR'untuk akses tulis ke perintah Anda ...

EDIT :

Seperti yang disebutkan dalam komentar Anda juga dapat menggunakan strace -fe open firefoxuntuk mendaftar semua file yang dibuka oleh FireFox. Anda juga dapat menggunakan strace -fe trace=file firefoxuntuk mendaftar semua operasi file yang dilakukan oleh FireFox yang memiliki path file sebagai argumen (buka, stat, lstat, chmod, akses, ...).

Banyak lagi tersedia! Lihat halaman manual strace (1) .

alexander255
sumber
1
Saya agak terkejut bahwa firefox akan menjalankan shell untuk menangkap "netscape" dari daftar proses.
Michael
1
strace memiliki kemampuan penyaringan bawaan yang luas. Cobalah strace -e openuntuk hanya menunjukkan panggilan ke open(), misalnya.
John Kugelman
@Michael memunculkan shell karena menggunakan pipa ("|") yang merupakan sintaksis shell. Anda dapat mengatur pipa yang sama secara manual dari kode tetapi jauh lebih mudah untuk membiarkan shell melakukannya - selama Anda tahu tidak ada peluang kode escape shell dilewatkan dari pengguna, yang dapat menyebabkan kerentanan keamanan.
Alistair Buxton
1

sebenarnya ada mode yang dinamai sebagai mode verbose tetapi saya tidak yakin firefox memiliki opsi seperti itu. Beberapa biasanya memiliki itu. Tetapi tidak masalah, setiap aplikasi akan terdiri dari log-nya. Jadi Anda dapat memeriksa aktivitas aplikasi dengan memeriksa data log-nya.

Jika Anda ingin mengaktifkan log untuk firefox maka Anda dapat memeriksanya

http://bertrandbenoit.blogspot.in/2011/09/activate-logging-for-mozilla.html

setiap aktivitas aplikasi di Ubuntu Anda dapat memeriksa dengan log spesifik mereka. Semua aplikasi akan login di /var/logdirektori.

rɑːdʒɑ
sumber