Inotify je subsystém linuxového jádra , který umožňuje přijímat upozornění na události související se soubory a adresáři souborového systému. Například otevírání souborů a adresářů pro čtení nebo zápis, změnu atributů , přesouvání, mazání atd. Je součástí hlavního jádra od 2.6.13, ale lze jej použít s dřívějšími jádry pomocí překryvné opravy. Od 2.6.32 bylo Inotify nahrazeno Fsnotify a Inotify je založeno na Fsnotify, ale pro praktické aplikace tento detail zůstal nedůležitý [1] .
Když se přihlásíte k odběru událostí Inotify, skripty nemusí pravidelně prohledávat souborový systém kvůli změnám. Navíc odběr události nebrání odpojení svazku [1] .
Hlavní oblast působnosti je v místních vyhledávačích (například Beagle ), takže program indexeru nemusí pravidelně skenovat celý souborový systém. Kromě toho můžete sledovat důležité konfigurační soubory a obnovit je v případě poškození, provádět automatické akce po nahrání souborů na server atd. [1]
Přestože je mechanismus Inotify součástí operačního systému, je přístupný prostřednictvím sady systémových volání, a proto nevyžaduje instalaci dalších knihoven, pro příkazový řádek byl vytvořen balíček inotify-tools, který vám umožňuje používat Inotify ve skriptech. [1] [2] .
Dva hlavní nástroje inotify jsou inotifywatch a inotifywait, například následující příkaz shromažďuje statistiky využití pro adresář /tmp [1] :
inotifywatch -r /tmpChcete-li sledovat soubory nebo adresáře v reálném čase, můžete použít inotifywait [1] :
$ inotifywait -mr /tmp Nastavení hodinek. Pozor: protože bylo dáno -r, může to chvíli trvat! Hodinky zavedeny. /tmp/ VYTVOŘTE soubor příklad-tmp /tmp/ OTEVŘÍT soubor příklad-tmp /tmp/ CLOSE_WRITE,CLOSE example-tmp-filePříklady dalších nástrojů používajících Inotify jsou [1] :
Chcete-li pracovat s funkcemi, musíte zahrnout hlavičkový soubor sys/inotify.h .
int inotify_init()Vytvoří deskriptor souboru, ze kterého se čtou všechny události, ke kterým dojde.
int inotify_add_watch(int fd, const char * cesta, maska __u32);Vytvoří jedinečný (v rámci deskriptoru souboru) sledovací deskriptor, který se používá k identifikaci cest a událostí, ke kterým dochází. V tomto případě jsou povoleny pouze ty události, které jsou uvedeny v masce.
int inotify_rm_watch(int fd, __u32 wd);Odstraní existující popisovač pozorování.
Události jsou přijímány pomocí tradičního systémového volání read, které se načítá do struktury inotify_event s následujícími poli:
Identifikátor | Význam |
---|---|
wd | deskriptor pozorování |
maska | maska události |
cookie | časová značka mezi IN_MOVED_FROM a IN_MOVED_TO |
len | délka souboru |
název | název_souboru vzhledem k adresáři, pro který byl vytvořen deskriptor sledování |
Maska události je logickým OR následujících konstant:
Při generování událostí lze také použít následující konstanty: