Hvordan ser jeg katalogendringer i Python?

Hvordan ser jeg katalogendringer i Python?
I noen tilfeller, spesielt på kritiske og begrensede steder i filsystemet, kan det være nyttig å vite når ting endres og hva som har endret seg. Ved hjelp av Linux Inotify -verktøy og Python, kan vi se og logge endringene som skjer i systemet.

Denne opplæringen vil gå over hvordan du implementerer et enkelt skript som bruker Python og Linux Inotify API for å overvåke endringer i en spesifikk katalog og logge konsollendringene.

Før vi kommer til manuset, la oss kort diskutere hvordan Inotify fungerer.

Hva er inotify? Hvordan virker det?

Inotify er et kjerneundersystem som gir mekanismen for å overvåke hendelser i filsystemet og rapportere dem til forskjellige applikasjoner som krever dem. Inotify er utrolig kraftig fordi det fungerer i de lavere nivåene av kjernen og kan tilpasses for å utvide funksjonaliteten. Inotify kan overvåke endringer i kataloger og individuelle filer.

Selv om Inotify er kraftig, har den noen begrensninger. Disse begrensningene inkluderer:

  • Inotify støtter ikke rekursiv katalogfaring
  • Det er bare tilgjengelig i Linux -kjernen
  • Renamer av hendelser ved bruk av Inotify blir ikke adressert direkte.

Imidlertid er Inotify fortsatt et mye bedre valg enn Dnotify, forgjengeren. Inotify er svært anvendelig i sikkerhetsapplikasjoner som antivirus.

Nå som vi har inotify grunnleggende teori ut av veien, la oss dykke til å bygge skriptet som vil hjelpe oss å overvåke for katalogendringer.

Installere Python og vakthund

Før du dykker ned i koden, la oss sette opp noen få krav, for eksempel å installere Python og Watchdog -pakken.

For å installere Python3 på Debian, bruk APT -kommandoen som:

sudo apt-get oppdatering
sudo apt-get install python3.7 python3 -pip -y

For å installere Watchdog -pakken, bruk PIP3 -kommandoen som vist nedenfor:

https: // pypi.org/prosjekt/vakthund/
sudo pip3 installer vakthund

Skrive manuset

Manuset vi skal lage i denne opplæringen er veldig enkelt. Vurder kildekoden vist nedenfor:

Importer Sys
Importlogging
Importer tid
Fra vakthund.Arrangementer importerer loggingeventhandler
Fra vakthund.Observatører importerer observatør
def monitor ():
# Legg til grunnleggende konfigurasjon
hogst.BasicConfig (nivå = logging.Info, format = " %(asctime) s - %(melding) s",
datefmt = "%y-%m-%d%h:%m:%s")
# Få katalog som argument
bane = sys.argv [1] hvis len (sys.argv)> 1 else '.'
e_handler = loggingVentHandler ()
se = observatør ()
se.plan (e_handler, sti, rekursiv = true)
se.start()
prøve:
Mens sant:
tid.søvn (2)
unntatt tastaturinterrupt:
se.Stoppe()
se.bli med()
Observere()

Vi starter med å importere de nødvendige modulene, inkludert vakthund. Deretter oppretter vi en enkel skjermfunksjon og angir konfigurasjonen, for eksempel outputformat og dato. Deretter setter vi argumenter for katalogsti.

Vi beveger oss deretter for å opprette et observatørobjekt og angi det for rekursivt å overvåke endringene i katalogen som er spesifisert med mindre et tastaturavbrudd oppstår (CTRL + C)

Til slutt kaller vi funksjonen og kjører skriptet. Du får en utgang som vist nedenfor:

Konklusjon

Ved hjelp av denne opplæringen har vi laget et enkelt manus som overvåker endringene i en katalog og logger dem stadig til konsollen.