Cara memonitor file apa yang dibuka

9

Apakah ada alat untuk memantau proses apa yang membuka file apa pada sistem sehingga Anda dapat melacak proses mana yang terus menyentuh file tertentu?

Lsof dapat mengetahuinya jika Anda menjalankannya saat proses membuka file, tetapi jika itu adalah proses yang berlangsung singkat yang berjalan sesekali, Anda tidak dapat menangkapnya dengan lsof. Butuh sesuatu yang menggunakan penelusuran kernel.

psusi
sumber
Sudahkah Anda memeriksa notifikasi? Lihat jawaban @ Kees di sini sebagai contoh: askubuntu.com/questions/25442/... Ada beberapa tautan pada jawaban saya di sini: askubuntu.com/questions/29566/…
belacqua
@ jgbelacua tak satu pun dari itu yang saya cari. Inotify dapat memberi tahu Anda ketika file yang diberikan disentuh, dan lsof dapat memberi tahu Anda file apa yang prosesnya buka, atau proses apa yang memiliki file terbuka, tetapi saya perlu mencari tahu proses apa yang terus menyentuh file, lalu menutupnya sebelum saya bisa jalankan lsof untuk menangkapnya.
psusi

Jawaban:

7

Anda mungkin dapat menggunakan sistem audit untuk itu. Ini sedikit kelas berat, tetapi sesuatu seperti ini seharusnya bekerja (di /etc/audit/audit.rules):

# delete all other rules
-D

# watch the file in question
-w /path/to/file -p rwxa

dan kemudian saya pikir Anda perlu me-restart auditd:

sudo service audit restart

(Jika Anda belum menginstalnya, itu ada dalam paket auditd.) Pelakunya kemudian dapat ditemukan di /var/log/audit/audit.log.

taneli
sumber
Sempurna! Itulah tepatnya yang saya cari.
psusi
0

Sayangnya mekanisme yang digunakan Linux untuk memungkinkan seseorang untuk memonitor file tidak sah, yang tidak memberikan informasi yang cukup untuk mengekstrak data yang berguna: Anda hanya mendapatkan nama file dan tindakan yang telah dilakukan.

Saya sudah mencoba menggunakan sesuatu seperti ini:

sudo inotifywait -mr somedir --format "%w%f" | while read file; do echo -n "$file => ";lsof -b $file; echo ""; done

Ini mendengarkan untuk memberitahukan acara pada direktori yang ditentukan dan untuk setiap acara itu berjalan lsof untuk mencoba menangkap proses yang menyentuh file. Sayangnya untuk sebagian besar akses yang saya uji (seperti menggunakan editor untuk menulis ke file) perintah LSOF hanya untuk memperlambat dan tidak berhasil menangkap proses yang menyinggung.

Jika proses Anda melakukan IO lebih intensif pada file yang bermasalah, maka jarak tempuh Anda mungkin bervariasi. Semoga berhasil.

Guss
sumber
0

fnotifystat adalah alat yang telah dirancang untuk menonton aktivitas file linux

sudo apt-get install fnotifystat
sudo fnotifystat
Total   Open  Close   Read  Write   PID  Process         Pathname
  7.0    1.0    1.0    5.0    0.0   2075 libvirtd        /proc/cpuinfo
  6.0    2.0    2.0    2.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu0/topology/physical_package_id
  6.0    2.0    2.0    2.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu1/topology/physical_package_id
  6.0    2.0    2.0    2.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu2/topology/physical_package_id
  6.0    2.0    2.0    2.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu3/topology/physical_package_id
  4.0    1.0    1.0    2.0    0.0   2075 libvirtd        /sys/devices/system/node
  4.0    1.0    1.0    2.0    0.0   2075 libvirtd        /sys/devices/system/node/node0
  4.0    2.0    2.0    0.0    0.0  15313 gnome-calendar  /usr/share/zoneinfo/Europe/London
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu0/topology/core_id
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu1/topology/core_id
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu1/topology/thread_siblings_list
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu2/topology/core_id
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu2/topology/thread_siblings_list
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu3/topology/core_id
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu3/topology/thread_siblings_list
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/online
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/present
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/node/node0/meminfo
  2.0    0.0    0.0    0.0    2.0  12174 xchat           /home/cking/.xchat2/xchatlogs/FreeNode-#ubuntu-release.log
  1.0    0.0    0.0    0.0    1.0  12174 xchat           /home/cking/.xchat2/xchatlogs/FreeNode-#ubuntu-desktop.log
  1.0    0.0    0.0    0.0    1.0  12174 xchat           /home/cking/.xchat2/xchatlogs/FreeNode-#ubuntu-devel.log
  1.0    0.0    0.0    0.0    1.0  12174 xchat           /home/cking/.xchat2/xchatlogs/FreeNode-#ubuntu-kernel.log

Tampilkan 10 file aktif teratas setiap 60 detik hingga berhenti:

sudo fnotifystat -t 10 60

Tampilkan aktivitas file setiap 10 detik hanya 6 kali:

sudo fnotifystat 10 6

Tampilkan aktivitas file thunderbird dan proses ID 1827:

sudo fnotifystat -p thunderbird,1827

Tampilkan setiap file beri tahu acara dan 20 file aktivitas aktif teratas dalam periode 5 menit:

sudo sudo notifystat -v -d -c 5m 1

Cukup tampilkan setiap file beri tahu acara di / sys dan / proc dan tidak ada statistik berkala:

sudo fnotifystat -n -i /sys,/proc

Lihat halaman manual fnotifystat untuk informasi lebih lanjut, ini alat yang cukup fleksibel.

Colin Ian King
sumber