如何监视打开了哪些文件


9

是否有一个工具可以监视哪些进程打开系统上的哪些文件,以便您可以跟踪哪个进程一直与特定文件保持联系?

Lsof可以确定您是否在进程打开文件时运行它,但是如果它是一个短暂运行的进程,每隔一段时间运行一次,则无法使用lsof捕获它。需要一些使用内核跟踪的东西。


您检查过inotify吗?见@基斯的答案在这里例如:askubuntu.com/questions/25442/... 有一对夫妇对我的答案链接在这里:askubuntu.com/questions/29566/...
belacqua

@jgbelacua这些都不是我要找的东西。Inotify可以告诉您何时触摸了给定的文件,lsof可以告诉您进程打开了哪些文件,或者哪个进程打开了文件,但是我需要弄清楚哪个进程一直在触摸文件,然后关闭它才能运行lsof来捕获它。
psusi 2011年

Answers:


7

您也许可以使用审核系统。它有点重量级,但是这样的东西应该可以工作(在/etc/audit/audit.rules中):

# delete all other rules
-D

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

然后我认为您需要重新启动auditd:

sudo service audit restart

(如果未安装,则在经过审核的程序包中。)然后可以在/var/log/audit/audit.log中找到罪魁祸首。


完善!那正是我想要的。
psusi 2011年

0

不幸的是,Linux用于允许人们监视文件的机制是inotify,它不能提供足够的信息来提取有用的数据:您只能获得文件名和执行的操作。

我试过使用这样的东西:

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

这将侦听指定目录上的inotify事件,并针对每个事件运行lsof来尝试捕获触摸文件的进程。不幸的是,对于我测试过的大多数访问(例如,使用编辑器写入文件),LSOF命令只是速度较慢,并且无法赶上令人讨厌的过程。

如果您的进程对有问题的文件执行了一些更密集的IO,则您的工作量可能会有所不同。祝好运。


0

fnotifystat是一个旨在监视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

每60秒显示前10个活动文件,直到停止:

sudo fnotifystat -t 10 60

每10秒仅显示6次文件活动性:

sudo fnotifystat 10 6

显示雷鸟的文件活动和进程ID 1827:

sudo fnotifystat -p thunderbird,1827

在5分钟内显示每个文件通知事件和前20个活动活动文件:

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

只显示/ sys和/ proc上的每个文件通知事件,而没有定期统计信息:

sudo fnotifystat -n -i /sys,/proc

有关更多信息,请参见fnotifystat手册页,它是一个非常灵活的工具。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.