2010-10-20 24 views
6

Bir unix sisteminde, nasıl yapılır (nasıl 'kuyruğun nasıl çalıştığı gibi) dosyalar için yapılan değişiklikler için bir dizin - yeni oluşturulanlar veya boyut değişiklikleri, vb.Değişiklikler için monitör dizini listeleniyor mu?

Bir komut satırı aracı aramak yerine Kurulacak bir şey. Araç yüklemek istemiyorsanız, kendi aracınızı hazırlayabilirsiniz

cevap

1

. Sadece bir fikir. find komutunu kullanarak dizininizin bir temel satırı dosyası oluşturun. Aynı parametreleri kullanarak bir döngü veya cron işi, find dizinini kullanın ve yeni dosyayı temel satır dosyasına karşı kontrol edin. farklılıkları almak için diff gibi bir araç kullanın ..

örn

find /path [other options] >> baseline.txt 
while true #or use a cron job 
do 
    find /path [same options] >> listing.txt 
    diff baseline.txt listing.txt 
    # do processing here... 
    mv listing.txt baseline.txt # update the baseline. 
    sleep 60 
done 
+0

Sadece referans için - böyle şeyler var mı? – siliconpi

+0

Ne "şey" hakkında konuşuyorsun? Böyle şeyler için kullanılan araçlardan bahsediyorsanız, o zaman evet. tripwire gibi araçlar, inotify vb ... – ghostdog74

5

çok unix varyantları bunun için bir API var ama standardize değil. Linux'ta inotify var. Komut satırında inotifywait'u kullanabilirsiniz. Kullanım örneği:

inotifywait -m /path/to/dir | while read -r dir event name; do 
    case $event in 
    OPEN) echo "The file $name was created or opened (not necessarily for writing)";; 
    WRITE) echo "The file $name was written to";; 
    DELETE) echo "The file $name was deleted ";; 
    esac 
done 

Inotify olay türleri genellikle tam olarak (örneğin AÇIK çok geniştir) fark için çalışıyoruz değil ne, bu nedenle kendi dosya kontrolleri yapma sonunda eğer kötü hissetmiyorum.

+0

Bu doğru cevaptır çünkü değişiklikleri izlemek için bir API'nin nasıl kullanılacağını gösterir. Ghostdog74'ün cevabı işe yarayabilir, ancak kaynak maliyeti vardır. 1000 dizinleri izlemeniz gerekiyorsa ne olur? –

+0

Not: Bu cevap sadece linux kernel 2.6.13 veya daha yeni bir sürümü kullanılıyorsa çalışır. Diğer Politikalar hakkında emin değilim. –

+0

, ne okuduğunu açıklar mısınız? While ** read -r dir event name; ** do *? – arod

İlgili konular