4.2.5. ファイルの読み取りおよび書き込みの監視
このセクションでは、ファイルの読み取りおよび書き込みをリアルタイムで監視する方法を説明します。
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) }
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
接頭辞は、ベース 16 の値を示します)。
このコマンドの出力には、読み取り/書き込みを実行しているプロセスの名前と ID、実行している関数 (
vfs_read
または vfs_write
)、デバイス番号 (16 進数形式)、および inode
番号が含まれます。例4.9「inodewatch.stp のサンプル出力」 は、stap inodewatch.stp 0x8 0x05 1078319
の出力になります (スクリプトの実行中に cat /etc/crontab
を実行した場合)。
例4.9 inodewatch.stp のサンプル出力
cat(16437) vfs_read 0x800005/1078319 cat(16437) vfs_read 0x800005/1078319