Ini karena cara Anda menggunakan inotifywatch, dan cara alat itu sendiri bekerja. Ketika Anda menjalankan inotifywatch -r /tmp, Anda mulai menonton /tmpdan semua file yang sudah ada di dalamnya. Ketika Anda membuat file di dalam /tmp, metadata direktori diperbarui untuk memuat nomor inode file baru, yang berarti bahwa perubahan terjadi pada /tmp, bukan /tmp/test-1. Selain itu, karena /tmp/test-1tidak ada ketika inotifywatchmulai, tidak ada inotifyarloji yang ditempatkan di sana. Ini berarti bahwa setiap peristiwa yang terjadi pada file yang dibuat setelah jam tangan ditempatkan tidak akan terdeteksi . Anda mungkin memahaminya lebih baik jika Anda melihatnya sendiri:
$ inotifywatch -rv /tmp &
Total of n watches.
$ cat /sys/kernel/debug/tracing/trace | grep inotifywatch | wc -l
n
Jika Anda telah mengaktifkan mekanisme pelacakaninotify_add_watch(2) , perintah terakhir akan memberi Anda jumlah jam tangan yang diatur oleh inotifywatch. Jumlah ini harus sama dengan yang diberikan dengan inotifywatchsendirinya. Sekarang, buat file di dalamnya/tmp dan periksa lagi:
$ inotifywatch -rv /tmp &
Total of n watches.
$ touch /tmp/test1.txt
$ cat /sys/kernel/debug/tracing/trace | grep inotifywatch | wc -l
n
Jumlahnya tidak akan bertambah, yang berarti file baru tidak ditonton. Perhatikan bahwa perilaku ini berbeda jika Anda membuat direktori:
$ inotifywatch -rv /tmp &
Total of n watches.
$ mkdir /tmp/test1
$ cat /sys/kernel/debug/tracing/trace | grep inotifywatch | wc -l
n + 1
Ini karena cara -r saklar berperilaku :
-r, --recursive: [...] Jika direktori baru dibuat di dalam direktori yang diawasi mereka akan secara otomatis diawasi.
Edit: Aku punya sedikit bingung antara dua contoh Anda, tetapi dalam kasus pertama , jam tangan yang benar ditempatkan karena panggilan pengguna inotifywatchpada ~/*(yang diperluas, lihat komentar don_crissti di sini ). Direktori rumah juga ditonton karena ~/.*mengandung~/. . Secara teoritis, itu juga harus mengandung ~/.., yang, dikombinasikan dengan -rsakelar, akan menghasilkan pengawasan keseluruhan sistem.
Namun, adalah mungkin untuk mendapatkan nama file yang memicu acara buat di direktori yang ditonton, namun saya kira inotifywatchtidak mengambil informasi ini (disimpan sedikit lebih dalam dari nama direktori). inotify-toolsmenyediakan alat lain, yang disebut inotifywait, yang dapat berperilaku sangat mirip inotify-watch, dan menyediakan lebih banyak opsi keluaran (termasuk %f, yang Anda cari di sini):
inotifywait -m --format "%e %f" /tmp
Dari halaman manual :
--format <fmt>Output dalam format yang ditentukan pengguna, menggunakan sintaks seperti printf. [...] Konversi berikut ini didukung:
%f: ketika suatu peristiwa terjadi dalam suatu direktori, ini akan diganti dengan nama file yang menyebabkan peristiwa itu terjadi .
%e: diganti dengan Acara yang terjadi, pisahkan dengan koma.
Selain itu, -mopsi (monitor) akan tetap inotifywaitberjalan setelah acara pertama, yang akan mereproduksi perilaku yang sangat mirip dengan inotifywatchitu.
.bashrcdalam contoh @serverfaulttidak muncul dalam statistik karena pengguna memantau direktori home-nya secara rekursif tetapi karenapath/.*diperluas dan sebagai akibatnya arloji diatur untuk semua berkas .file di bawahpath/(.bashrctermasuk). Perintah yang digunakan oleh OP tidak akan pernah menampilkan nama file karena jam tangan ditetapkan untuk/tmpdan setiap subdirektori karena itu statistik hanya akan berkaitan dengan/tmpdan subdirektori-nya (yaitu Anda akan melihat file telah diakses / dipindahkan / dll tetapi tidak akan memberi tahu Anda nama).