It monitors files
. ├── CHANGELOG.json ├── CMakeLists.txt ├── common.h ├── data_types.h ├── headers.h ├── helpers │ ├── delete.h │ ├── read_write.h │ └── rename.h ├── monitor.c ├── README.md ├── VERSION.txt └── vmlinux.h
sudo bpftrace -e 'kprobe:vfs_read { $file = (struct file *)arg0; $dentry = $file->f_path.dentry; if ($dentry != 0) { printf("READ - File: %s, Size: %d bytes, PID: %d, Comm: %s\n", str($dentry->d_name.name), arg2, // count/size parameter pid, comm); $parent = $dentry->d_parent; if ($parent != 0) { printf(" Parent dir: %s\n", str($parent->d_name.name)); } } }'
sudo bpftrace -e 'kprobe:vfs_write { $file = (struct file *)arg0; $dentry = $file->f_path.dentry; if ($dentry != 0) { printf("WRITE - File: %s, Size: %d bytes, PID: %d, Comm: %s\n", str($dentry->d_name.name), arg2, // count/size parameter pid, comm); $parent = $dentry->d_parent; if ($parent != 0) { printf(" Parent dir: %s\n", str($parent->d_name.name)); } } }'
sudo bpftrace -e 'kprobe:vfs_rename { $old_dentry = (struct dentry *)arg1; $new_dentry = (struct dentry *)arg3; if ($old_dentry != 0 && $new_dentry != 0) { printf("RENAME - From: %s, To: %s, PID: %d, Comm: %s\n", str($old_dentry->d_name.name), str($new_dentry->d_name.name), pid, comm); $old_parent = $old_dentry->d_parent; $new_parent = $new_dentry->d_parent; if ($old_parent != 0) { printf(" Source dir: %s\n", str($old_parent->d_name.name)); } if ($new_parent != 0) { printf(" Target dir: %s\n", str($new_parent->d_name.name)); } } }'
sudo bpftrace -e 'kprobe:vfs_unlink { $dentry = (struct dentry *)arg2; printf("dentry ptr: %p, d_name.len: %d, d_name.name_ptr: %s\n", $dentry, $dentry->d_name.len, str($dentry->d_name.name)); $parent = $dentry->d_parent; if ($parent != 0) { printf("Parent name: %s\n", str($parent->d_name.name)); } else { printf("Parent: NULL\n"); } }'