43.5. 监控使用 SystemTap 文件的读取和写入

您可以使用 inodewatch.stp SystemTap 脚本来实时从文件中读取和写入。

先决条件

流程

  • 运行 inodewatch.stp 脚本。
# stap --example inodewatch.stp 'argument1' 'argument2' 'argument3'

脚本 inodewatch.stp 使用三个命令行参数:

  1. 文件的主设备号。
  2. 文件的副设备号。
  3. 文件的 inode 号。

您可以使用以下方法获取这些信息:

# stat -c '%D %i' filename

其中 filename 是绝对路径。

考虑以下示例:

# stat -c '%D %i' /etc/crontab

输出应类似于如下:

805 1078319

其中:

  • 805 是基于16 (十六进制)的设备号。最后两个数字是副设备号码,剩余的数字是主号码。
  • 1078319 是 inode 号。

要启动监控 /etc/crontab,请运行:

# stap inodewatch.stp 0x8 0x05 1078319

在前两个参数中,您必须为具有 16 的编号使用 0x 前缀。

输出包含以下内容:

  • 执行读取或写入进程的任何进程的名称和 ID
  • 它正在执行的功能(vfs_readvfs_write
  • 内核设备号

这个示例的输出应该类似如下:

cat(16437) vfs_read 0x800005/1078319
cat(16437) vfs_read 0x800005/1078319