Bunun nedeni, kullanım şekliniz inotifywatch
ve aracın kendisinin çalışma biçimidir. Eğer çalıştırdığınızda inotifywatch -r /tmp
, izlemeye başladıktan /tmp
olan tüm dosya ve zaten onun içinde. Bir dosya içini oluşturduğunuzda /tmp
, dizin meta veri değişimi olur demek olduğunu yeni dosyanın düğüm numarasını içerecek şekilde güncellenir /tmp
değil /tmp/test-1
. Çünkü Ayrıca, /tmp/test-1
ne zaman orada değildi inotifywatch
başladı hiçbir yoktur inotify
bunun üzerine yerleştirilen izle. Bu, saatler yerleştirildikten sonra oluşturulan bir dosyada meydana gelen olayların algılanmayacağı anlamına gelir . Kendiniz görürseniz daha iyi anlayabilirsiniz:
$ inotifywatch -rv /tmp &
Total of n watches.
$ cat /sys/kernel/debug/tracing/trace | grep inotifywatch | wc -l
n
Eğer varsa ilgili izleme mekanizması etkininotify_add_watch(2)
, son komutu size kurduğu saatlerin sayısını verecektir inotifywatch
. Bu sayı, inotifywatch
kendi başına verilenle aynı olmalıdır . Şimdi içinde bir dosya oluşturun /tmp
ve tekrar kontrol edin:
$ inotifywatch -rv /tmp &
Total of n watches.
$ touch /tmp/test1.txt
$ cat /sys/kernel/debug/tracing/trace | grep inotifywatch | wc -l
n
Sayı artmayacak, yani yeni dosya izlenmiyor. Bunun yerine bir dizin oluşturursanız davranışın farklı olduğunu unutmayın:
$ inotifywatch -rv /tmp &
Total of n watches.
$ mkdir /tmp/test1
$ cat /sys/kernel/debug/tracing/trace | grep inotifywatch | wc -l
n + 1
Bu, -r
anahtarın davranış biçiminden kaynaklanmaktadır :
-r
, --recursive
: [...] İzlenen dizinlerde yeni dizinler oluşturulursa, bunlar otomatik olarak izlenir.
Düzenleme: Ben senin iki örnek arasındaki karıştı biraz heyecanlandım, ama birinci durumda kullanıcı aramaları nedeniyle, saatler doğru yerleştirilir inotifywatch
üzerinde ~/*
(genişletilir, burada don_crissti yorumuna bakınız ). Home dizini de ~/.*
içerdiği için izlenir ~/.
. Teorik olarak, aynı zamanda içermelidir ~/..
ile kombine olan, -r
anahtar, tüm sistemi izlerken neden.
Ancak, olan bir tetikleme dosyanın adını almak mümkün oluşturmak izlenen dizinde olayı henüz tahmin ediyorum inotifywatch
(o dizin adı daha derine bir az şey kaydedilir) bu bilgileri almak değil. inotify-tools
adında başka bir araç sağlar inotifywait
, bu da hemen hemen aynı şekilde davranabilir inotify-watch
ve daha fazla çıktı seçeneği sağlar ( %f
aradığınız şey budur):
inotifywait -m --format "%e %f" /tmp
Gönderen adam sayfası :
--format <fmt>
Printf benzeri sözdizimi kullanarak kullanıcı tanımlı bir biçimde çıktı alın. [...] Aşağıdaki dönüşümler desteklenmektedir:
%f
: bir dizin içinde bir olay meydana geldiğinde, bu olay olayın gerçekleşmesine neden olan dosyanın adıyla değiştirilir .
%e
: virgülle ayrılmış gerçekleşen Olaylarla değiştirildi.
Ayrıca, -m
seçenek (monitör) inotifywait
ilk olaydan sonra çalışmaya devam edecek ve bu da inotifywatch
' s'a oldukça benzer bir davranış üretecektir .
.bashrc
örnekte @serverfault
kullanıcı yinelemeli kendi evinde dizini izler ama çünkü istatistiklerinde görünmüyorpath/.*
genişletilir ve bunun sonucunda bir saat altındaki tüm .files için ayarlanırpath/
(.bashrc
dahil) . Saatler tarafından ayarlandığından/tmp
ve alt dizinlerden dolayı OP tarafından kullanılan komut hiçbir zaman dosya adları vermeyecektir, bu nedenle istatistikler yalnızca/tmp
ve alt dizinleri ile ilgilidir (yani dosyalara erişildiğini / taşındığını / vb. Göreceksiniz, ancak bunların adları).