Inotify este un subsistem al nucleului Linux care vă permite să primiți notificări despre evenimente legate de fișierele și directoarele sistemului de fișiere. De exemplu, deschiderea fișierelor și directoarelor pentru citire sau scriere, schimbarea atributelor , mutarea, ștergerea etc. A fost inclus în nucleul principal din 2.6.13, dar poate fi folosit cu nucleele anterioare folosind o suprapunere de corecție. Din 2.6.32 Inotify a fost înlocuit cu Fsnotify și Inotify se bazează pe Fsnotify, dar pentru aplicațiile practice acest detaliu a rămas neimportant [1] .
Prin abonarea la evenimentele Inotify, scripturile nu trebuie să scaneze periodic sistemul de fișiere pentru modificări. Mai mult, abonamentul la eveniment nu împiedică demontarea volumului [1] .
Scopul principal este în motoarele de căutare locale (de exemplu , Beagle ), astfel încât programul de indexare nu trebuie să scaneze periodic întregul sistem de fișiere. În plus, puteți monitoriza fișierele de configurare importante și le puteți restaura în caz de deteriorare, puteți efectua acțiuni automate după încărcarea fișierelor pe server etc. [1]
Deși mecanismul Inotify face parte din sistemul de operare, accesibil printr-un set de apeluri de sistem și, prin urmare, nu necesită instalarea de biblioteci suplimentare, pachetul inotify-tools a fost creat pentru linia de comandă, permițându-vă să utilizați Inotify în scripturi. [1] [2] .
Cele două instrumente principale de inotify sunt inotifywatch și inotifywait, de exemplu, următoarea comandă colectează statistici de utilizare pentru directorul /tmp [1] :
inotifywatch -r /tmpPentru a monitoriza fișierele sau directoarele în timp real, puteți utiliza inotifywait [1] :
$ inotifywait -mr /tmp Configurarea ceasurilor. Atenție: deoarece a fost dat -r, acest lucru poate dura ceva timp! Ceasuri stabilite. /tmp/ CREATE example-tmp-file /tmp/ DESCHIDERE exemplu-tmp-file /tmp/ CLOSE_WRITE,CLOSE exemplu-tmp-fileExemple de alte utilitare care utilizează Inotify sunt [1] :
Pentru a lucra cu funcții, trebuie să includeți fișierul antet sys/inotify.h .
int inotify_init()Creează un descriptor de fișier din care sunt citite toate evenimentele care au loc.
int inotify_add_watch(int fd, const char * cale, __u32 mask);Creează un descriptor de urmărire unic (în cadrul unui descriptor de fișier) care este utilizat pentru a identifica căile și evenimentele care apar. În acest caz, sunt permise numai acele evenimente care sunt specificate în mască.
int inotify_rm_watch(int fd, __u32 wd);Șterge un indicator de observație existent.
Evenimentele sunt primite folosind apelul de sistem de citire tradițional, care citește într-o structură inotify_event cu următoarele câmpuri:
Identificator | Sens |
---|---|
wd | descriptor de observație |
masca | masca de eveniment |
prăjitură | marcaj de sincronizare între IN_MOVED_FROM și IN_MOVED_TO |
len | lungimea numelui de fișier |
Nume | nume de fișier relativ la directorul pentru care a fost creat descriptorul de ceas |
Masca de eveniment este un OR logic al următoarelor constante:
La generarea evenimentelor, pot fi utilizate și următoarele constante: