Inotifywait, sistem yöneticilerine dosya veya dizinlerde açma, değiştirme, okuma, kapatma, taşıma veya silme gibi olayları izlemede yardımcı olan bir Linux komut satırı yardımcı programıdır.
Diğer araçlarla sorunsuz bir şekilde entegre olabilir veya bir kabuk komut dosyası içinde kullanılabilir. Yani bir dosya veya dizinde herhangi bir olay meydana geldiğinde bildirim almak istiyorsanız bunu bunun için kullanabilirsiniz.
Bu makalede, tercih ettiğiniz Linux dağıtımına inotifywait’i nasıl kuracağınızı, dosya veya dizin değişikliklerini nasıl tespit edeceğinizi ve pratik bir örnekle bir kabuk betiğinde nasıl kullanacağınızı göstereceğim.
Linux’ta Inotifywait Nasıl Kurulur
inotifywait, Linux deposunun çoğunda, Linux dağıtımının varsayılan paket yöneticisi kullanılarak rahatlıkla kurulabilen “inotify-tools” paketinin bir parçası olarak mevcuttur.
# On Debian, Ubuntu, Mint, Pop!_OS, etc.
$ sudo apt install inotify-tools
# On Redhat, Fedora, AlmaLinux, etc.
$ sudo dnf install epel-release
$ sudo dnf install inotify-tools
# On Arch, Manjaro, EndeavourOS, etc.
$ sudo pacman -S inotify-toolsKurulum tamamlandıktan sonra “inotifywait” komutu erişilebilir hale gelecektir.
Kullanımı Inotifywait
Kullanım durumunu göstermek için, sözdiziminden başlayarak, dosya ve dizin içeriğini izlemeye ve ardından bunun bir kabuk komut dosyasında nasıl kullanılacağına kadar çeşitli örnekler göreceğiz. Öyleyse başlayalım…
Inotifywait Sözdizimi ve Bayraklar
“inotifywait” komutu iki argüman alır: biri bayraktır (isteğe bağlı), diğeri ise izlenecek dosya veya dizinin yoludur (gerekli).
$ inotifywait <flag> <path/to/file>|<path/to/directory>Aşağıdaki faydalı parametrelere göz atın:
| Parametre | Açıklama |
|---|---|
-r | Dizini ve alt dizinleri yinelemeli olarak izleyin. |
-m | Yeni olaylar için veya “–timeout” süresi dolana kadar dosyayı veya dizini sonsuza kadar izlemeye devam edin. |
-e | Erişim, değiştirme, açma, kapatma, oluşturma, silme vb. gibi belirli olayları dinleyin. |
-t | Zaman aşımından sonra dosyayı veya dizini izlemeyi bırakın (“0” hiçbir zaman içindir). |
--exclude | Belirtilen dosya veya dizindeki olayları izlemeyi yoksayın. |
--excludei | Yukarıdakiyle aynı, ancak büyük/küçük harfe duyarlı değil. |
--include | Eşleşen normal ifade dışında diğer tüm dosya veya dizinlerdeki izleme olaylarını yoksayın. |
-d | Belirtilen dosya veya dizin için arka plan günlüğe kaydetme olaylarının çalıştırılması dışında “-m” ile aynıdır. |
-o | Çıktıyı belirtilen bir dosyaya yazdırın. |
-c | Olayları CSV formatında yazdırın. |
Inotifywait kullanarak dosya ve dizindeki olayları izleyin
inotifywait kullanarak bir dosyayı izlemeye başladığınızda, bir işlemin dosyayı ne zaman açtığı, değiştirdiği, okuduğu, kapattığı, taşıdığı veya sildiği konusunda bilgilendirileceksiniz. Dizinin izlenmesi, içindeki tüm dosyalardaki olayları da ortaya çıkarır.
Aşağıda, birkaç dosya ve alt dizin içeren bir dizinin ağaç hiyerarşisi yer almaktadır.

Bu dizin ağacını inotifywait kullanımını göstermek için çeşitli örnekler için kullanacağız.
Bu nedenle, ister bizim tarafımızdan ister herhangi bir işlem tarafından tetiklensin, dizin ağacımızda meydana gelen tüm olayları izlemek için, dizinin ve içeriğinin özyinelemeli izlenmesi için “-r” bayrağıyla “inotifywait” komutunu kullanırız. Ek olarak, kullanıcı tarafından manuel olarak kesintiye uğrayana kadar olayları sürekli olarak izlemek için “-m” bayrağını eklemeliyiz.
$ inotifywait -r -m mydir/Çıktı:

Artık dizinin içeriğini izlemeye başladığımıza göre, bir olayın gerçekleşmesini bekleyecektir. Göstermek için yeni bir terminal penceresi açalım ve “echo “Linux TLDR” > mydir/dir2/file1″ komutunu kullanarak “mydir/dir2” içinde yeni bir dosya oluşturalım. Dosya oluşturulduktan sonra, çıktısını görmek için inotifywait’i çalıştırdığımız kabuğa geri dönün.

Dosya oluşturulurken dizinde meydana gelen her olayın listelendiğini ve çıktının üç sütun halinde düzenlendiğini görebilirsiniz: temel dizin, olay ve olayı tetikleyen dosya.
Şimdi “mydir/dir2” içeriğini listeleyelim, yeni oluşturulan dosyaya erişelim ve ardından aşağıdaki komutu kullanarak yeni bir dizin oluşturalım:
$ ls mydir/dir2
$ cat mydir/dir2/file1
$ mkdir mydir/dir2/mydir1Şimdi inotifywait çalışırken kabuğumuza dönelim:

Gördüğünüz gibi, inotifywait dizindeki her olayı dikkatle izler. Ayrıca, oluşturma veya silme gibi belirli olayları izlemek istiyorsanız, bu olayları “-e” bayrağı ile belirtebilirsiniz. Örneğin, aşağıdaki komut yalnızca oluşturma ve silme olaylarını izler.
💡
Erişim, değiştirme, düzeltme, close_write, close_nowrite, kapatma, açma, moved_to, moved_from, taşıma, move_self, oluşturma, silme, delete_self ve bağlantısını kesme ile başlayarak kullanabileceğiniz toplam kırk olay vardır.
$ inotifywait -r -m -e create,delete mydir/Çıktı:

Belirli alt dizinleri izlemenin dışında bırakmak için “–exclude” bayrağını ve ardından dizin adını kullanın. Örneğin, aşağıdaki komut, diğer tüm alt dizinler için oluşturma ve silme olaylarını izlerken “mydir/dir1″deki hiçbir içeriği izlemeyecektir.
$ inotifywait -r -m -e create,delete --exclude 'dir1/' mydir/Çıktı:

Son olarak, inotifywait kullanarak tek bir dosyayı izlerken, komut başlatma sırasında dosyanın belirtilen dizinde bulunması gerektiğini unutmayın. Ayrıca, kullanıcı dosyayı kaldırırsa, dosya daha sonra yeniden oluşturulsa bile olay izleme sona erer.
Göstermek için, mevcut bir “dosya1″i izleyeceğim, içeriğini okuyacağım, ardından dosyayı sileceğim ve olayların algılanıp algılanmadığını görmek için içeriğini tekrar okumaya çalışacağım.
$ inotifywait -r -m mydir/dir1/file1Çıktı:

Açıkça görebileceğiniz gibi, dosyayı sildikten sonra, yeniden oluştursanız bile, dosyadaki olaylar izlenmeyecektir çünkü dosyayı inotifywait’te belirtmek, inode’unu komuta ekler ve onu silip yeniden oluşturmak dosyanın inode’unu değiştirir.
Bu nedenle, böyle bir dosyayı izlemek için üst dizini izleyebilir ve dizindeki yalnızca o dosyayı kontrol etmek için belirli bir normal ifade uygulayabilirsiniz.
Kabuk komut dosyası kullanarak olaylar oluştuğunda masaüstü bildirimi alın
Şimdi size dosya ve dizin değişikliklerini izlemek ve anında masaüstü bildirimleri almak için kabuk komut dosyanızda inotifywait’i nasıl kullanacağınızı göstereceğim.
Öncelikle, tercih ettiğiniz metin düzenleyiciyi (Vim veya Nano) kullanarak “script.sh” adlı bir dosya oluşturun ve ardından Bash kabuğunu belirtmek için aşağıdaki Shebang’ı ekleyin.
#!/bin/bashArdından, bir masaüstü bildirimi görüntüleyecek bir işlev oluşturacağız.
# Function to display desktop notification
notify() {
notify-send "File Change" "$1"
}Son olarak, değişiklikleri sürekli olarak izlemek için bir while döngüsü yürüteceğiz, “mydir/” içindeki oluşturma ve silme olaylarını tespit etmek için “inotifywait” komutunu belirleyeceğiz ve bir olay meydana geldiğinde bizi masaüstü bildirimleriyle uyaracağız.
# Monitor "mydir/" directory for create and delete events
while true; do
inotifywait -r -q -e create,delete mydir/ && notify "A file was created or deleted in mydir/"
doneYukarıda belirtilen tüm satırları “script.sh” dosyasına eklediğinizde, aşağıdaki gibi görünecektir:

Artık dosyayı kaydedip kapatabilir ve ardından chmod komutunu kullanarak dosyaya yürütülebilir izin atayabilirsiniz.
$ chmod +x ./script.shTamamlandığında, kabuk komut dosyasını çalıştırın ve “mydir/” içinde bir oluşturma veya silme olayı gerçekleştiğinde, bir masaüstü bildirimi olarak bildirilecektir.
$ ./script.shÇıktı:

Yazının orijinalini buradan okuyabilirsiniz.

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.