Om du vill lära dig hur du kan automatisera processer baserat på filändringar i en Linux-miljö, har du kommit till rätt ställe. Den här artikeln utforskar hur du triggar kommandon när filer ändras eller skapas i en specifik katalog.
I Linux är det vanligt att använda cron för att schemalägga uppgifter vid specifika tidpunkter. Men det finns situationer där du behöver reagera omedelbart på förändringar i filsystemet.
Detta kan åstadkommas med hjälp av specialiserade kommandoradsverktyg, som vi kommer att undersöka närmare.
Låt oss börja med att utforska dessa verktyg!
watchexec
watchexec är ett fristående verktyg som övervakar en viss arbetskatalog. Det aktiverar ett kommando automatiskt när det upptäcker filändringar eller nyskapade filer.
Funktioner
- Undviker komplexa kommandorader som involverar xargs.
- Övervakar ändringar i realtid, både i den aktuella katalogen och dess underkataloger.
- Är inte beroende av någon specifik språkmiljö, vilket gör det flexibelt.
- Använder .gitignore och .ignore filer för att filtrera bort irrelevanta filer.
- Hantera förgrenade processer effektivt med hjälp av processgrupper.
- Stöder övervakning av filer med specifika filändelser.
- Fungerar på OS X, Linux och Windows.
- Tillåter filtrering och ignorering av händelser baserat på globmönster.
Installation av watchexec
För att installera watchexec, använd följande kommando i terminalen:
curl -sS https://webinstall.dev/watchexec | bash
Efter en lyckad installation kommer installationssökvägen att visas. Till exempel kan verktyget installeras i `/root/.local/bin`.
┌──(root💀kali)-[~] └─# curl -sS https://webinstall.dev/watchexec | bash Thanks for using webi to install '[email protected]' on 'Linux/x86_64'. Have a problem? Experience a bug? Please let us know: https://github.com/webinstall/webi-installers/issues Lovin' it? Say thanks with a Star on GitHub: https://github.com/webinstall/webi-installers Found /root/Downloads/webi/watchexec/cli-v1.18.9/watchexec-1.18.9-x86_64-unknown-linux-musl.tar.xz Extracting /root/Downloads/webi/watchexec/cli-v1.18.9/watchexec-1.18.9-x86_64-unknown-linux-musl.tar.xz Installing to /root/.local/opt/watchexec-vcli-v1.18.9/bin/watchexec Installed 'watchexec vcli-v1.18.9' as /root/.local/bin/watchexec
Navigera sedan till katalogen `.local/bin` och verifiera att filen finns där:
cd .local/bin ls
För att kunna använda watchexec, behöver du exportera sökvägen:
export PATH="/root/.local/bin:$PATH"
För att visa hjälpen för watchexec, kör kommandot:
watchexec --help
Exempel på kommandon
-
Kör `ls -la` när en fil ändras i katalogen eller dess underkataloger:
watchexec -- ls -la
-
Kör ett valfritt kommando när en fil med ändelsen `.py`, `.js`, `.css` eller `.html` ändras i den aktuella katalogen (eller underkataloger):
watchexec --exts py,js,css,html <command>
-
Övervaka ändringar i katalogerna `lib` och `src`:
watchexec -w lib -w src <command>
-
Starta om en tjänst när en fil i katalogen ändras. Exempelvis en webbserver (tor):
watchexec -e html -r tor
Eller en databasserver (mysql):
watchexec -e js,py -r mysql
Här startar `-r` om den angivna tjänsten.
För ytterligare exempel, besök watchexec’s officiella GitHub-förråd.
entr
entr är ett kommandoradsverktyg som utför anpassade kommandon när filändringar sker.
Namnet ”entr” står för Event Notify Test Runner, och verktyget skapades för att underlätta snabb feedback och automatiserad testning.
Installation
I många Linux-distributioner är entr förinstallerat. Om det inte är det, installera det med:
sudo apt-get install entr
Alternativt kan du klona Git-förrådet och installera manuellt:
git clone https://github.com/eradman/entr.git
Navigera sedan till den klonade katalogen och kör följande kommandon:
./configure make test make install
Se tillgängliga konfigurationsalternativ med:
./configure -h
Exempel på kommandon
För att se de tillgängliga alternativen för `entr`-kommandot, använd:
man entr
Detta visar manualen för `entr`:
NAME entr — run arbitrary commands when files change SYNOPSIS entr [-acdnprsz] utility [argument /_ ...] DESCRIPTION A list of files provided on standard input, and the utility is executed using the supplied arguments if any of them change. entr waits for the child process to finish before responding to subsequent file system events. A TTY is also opened before entering the watch loop in order to support interac‐ tive utilities. The arguments are as follows: -a Respond to all events which occur while the utility is running. Without this option, entr consolidates events in order to avoid looping. This option has no effect in conjunction with the -r flag. -c Clear the screen before invoking the utility specified on the command line. Specify twice to erase the scroll back buffer. -d Track the directories of regular files provided as input and exit if a new file is added. This option also enables directories to be specified explicitly. If specified twice, all new entries to a directory are recognized, otherwise files with names beginning with ‘.’ are ig‐ nored. -n Run in non-interactive mode. In this mode entr does not attempt to read from the TTY or change its properties. -p Postpone the first execution of the utility until a file is modified. Manual page entr(1) line 1 (press h for help or q to quit)
-
Starta om en MySQL-server när en JavaScript-fil ändras i arbetskatalogen:
ls *.js | entr -r mysql
-
Starta om en webbserver automatiskt eller avsluta om servern stängs ner:
$ ls * | entr -rz ./httpd
Mer information finns i det officiella GitHub-förrådet.
Slutord 👩💻
Förhoppningsvis har denna artikel givit dig en bra inblick i hur du kan automatisera kommandon i Linux baserat på filändringar. Genom att använda verktyg som watchexec och entr, kan du effektivisera ditt arbetsflöde och göra din utvecklingsprocess mer effektiv.
Om du vill lära dig mer om Linux, kan du även läsa om hur du tar bort filer och kataloger i Linux.