Unix 中是否有任何可用的工具/命令来监视特定文件的读/写。
我还想收集每次访问文件时读取的数据量。
答案1
简短的回答:据我所知,没有。
vmstat
(运行vmstat 1
以立即了解它的作用;^C
退出)可以向您显示完整系统IO 使用(BI
以及BO
列、块入和块出可能是最直接有用的)。我发现它在大多数安静的系统上非常有用。
strace
(运行strace -o /tmp/ls ls /tmp
;然后查看/tmp/ls
文件以查看它提供的数据)可以让您通过所有 write() 调用跟踪程序的执行路径,并为您感兴趣的文件描述符添加请求的大小。从好的方面来说,它可以编写脚本,并且专门针对该文件的程序。从坏的方面来说,它会减慢程序的执行速度(也许它会运行非常缓慢地),并且会完全错过所有使用mmap(2)
内存区域的磁盘 IO。
您可以编写一个库,用LD_PRELOAD
环境变量替换它read(2)
,并write(2)
用包装器执行记账并最终调用系统调用(这几乎肯定不值得这么麻烦)。它也无法看到使用的磁盘 IO mmap(2)
。您必须有非常好的理由才能走这条路。
你可以写一个保险丝后端进行记账。这会很慢,并且会减慢使用该文件系统的每个进程的速度。FUSE 代码还公开了许多内核内部结构,这些结构期望快速得到结果,但由于用户空间程序而导致任意长的(并且按照内核标准是极长的)延迟。程序可能会导致内存压力、交换和进一步的磁盘流量。FUSE 最适合部署在内存充足、非实时要求和故障成本低的环境中。
答案2
答案3
有家人, http://en.wikipedia.org/wiki/File_alteration_monitor,但不确定它是否适用于你的操作系统http://oss.sgi.com/projects/fam/
另外谷歌 inotify。