4.2.5. ファイルの読み取りおよび書き込みの監視
このセクションでは、ファイルの読み取りおよび書き込みをリアルタイムで監視する方法を説明します。
例4.17 inodewatch.stp
#! /usr/bin/env stap probe vfs.write, vfs.read { # dev and ino are defined by vfs.write and vfs.read if (dev == MKDEV($1,$2) # major/minor device && ino == $3) printf ("%s(%d) %s 0x%x/%u\n", execname(), pid(), probefunc(), dev, ino) }
例4.17「inodewatch.stp」 は、ファイルの以下の情報をコマンドラインの引数として取ります。
- ファイルのメジャーデバイス番号
- ファイルのマイナーデバイス番号
- ファイルの
inode
番号
この情報を取得するには、stat -c '%D %i' filename を使用します。filename は絶対パスです。
たとえば、
/etc/crontab
ファイルを監視する場合は、最初に stat -c '%D %i' /etc/crontab を実行します。これにより、次の出力が出力されます。
805 1078319
805
は、ベース 16 (16 進数) のデバイス番号です。最後の 2 桁がマイナーデバイス番号で、その上の数字がメジャー番号です。1078319
は inode
番号です。/etc/crontab
の監視を開始するには、stap inodewatch.stp 0x8 0x05 1078319 を実行します (0x
接頭辞は base-16 値を示します)。
このコマンドの出力には、読み取り/書き込みを実行しているプロセスの名前と ID、実行中の機能 (
vfs_read
または vfs_write
)、デバイス番号 (16 進形式)、および inode
番号が含まれます。例4.18「例4.17「inodewatch.stp」 出力サンプル」 には、stap inodewatch.stp 0x8 0x05 1078319 の出力が含まれます (スクリプトの実行中に cat /etc/crontab が実行された場合)。
例4.18 例4.17「inodewatch.stp」 出力サンプル
cat(16437) vfs_read 0x800005/1078319 cat(16437) vfs_read 0x800005/1078319