Te afli în locul ideal dacă ești interesat să descoperi metode prin care să execuți comenzi Linux în momentul în care un fișier dintr-un anumit director suferă modificări sau când sunt adăugate fișiere noi.
În sistemul Linux, cron este un instrument util pentru programarea execuției comenzilor la anumite intervale de timp.
Dar ce se întâmplă dacă ai nevoie ca anumite comenzi să fie activate automat de fiecare dată când un fișier este modificat sau când un fișier nou este inclus într-un director?
Ei bine, această acțiune poate fi realizată cu ușurință, folosind anumite instrumente disponibile în linia de comandă.
Să începem explorarea!
watchexec
watchexec este un instrument independent și foarte util, care monitorizează activitatea unui director specific și execută o comandă atunci când detectează modificări, cum ar fi actualizarea fișierelor sau crearea unora noi.
Caracteristici
- Elimină necesitatea unei linii de comandă complicate, care ar implica xargs (argumente extinse).
- Monitorizează în timp real schimbările din directorul curent și din toate subdirectoarele.
- Nu depinde de niciun limbaj de programare specific sau ecosistem, fiind un instrument universal.
- Utilizează fișierele .gitignore și .ignore în mod implicit pentru a determina ce fișiere să nu monitorizeze.
- Administrează grupurile de procese pentru a urmări aplicațiile create.
- Oferă suport pentru monitorizarea fișierelor cu anumite extensii.
- Este compatibil cu OS X, Linux și Windows.
- Permite filtrarea și ignorarea evenimentelor bazate pe glob (modele de căutare a fișierelor care permit identificarea numelor de fișiere parțial identice).
Instalarea watchexec
Pentru a instala watchexec, introdu adresa următoare în terminal sau într-un prompt shell și apasă tasta Enter.
Linux și macOS
curl -sS https://webinstall.dev/watchexec | bash
După o instalare reușită, calea de instalare va fi afișată pe ecran. În cazul meu, instrumentul a fost instalat în /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
După instalare, navighează către directorul .local/bin și verifică dacă fișierul este prezent, folosind următoarele comenzi.
cd .local/bin
ls
Următorul pas este să exporți calea pentru a putea utiliza instrumentul watchexec.
export PATH="/root/.local/bin:$PATH"
Pentru a-l activa, introdu simplu comanda watchexec în terminal, ca utilizator root. Pentru a vedea ce opțiuni și parametri pot fi utilizați cu acest instrument, rulează următoarea comandă:
watchexec --help
Exemple de comenzi
- Rulează comanda `ls -la` de fiecare dată când un fișier este modificat în directorul sau subdirectoarele curente. Această comandă afișează toate fișierele din director la fiecare modificare detectată.
watchexec -- ls -la
- Execută o comandă specifică atunci când fișierele cu extensiile python, js, CSS sau HTML din directorul curent sunt modificate. Poți specifica orice comandă dorești. Extensiile fișierelor trebuie separate prin virgulă.
watchexec --exts py,js,css,html <command>
- Rulează o comandă atunci când un fișier din directoarele lib sau src este modificat. Opțiunea „-w” permite monitorizarea unui fișier sau director specific din sistem.
watchexec -w lib -w src <command>
- Activează sau repornește un serviciu de fiecare dată când un fișier din directorul curent (sau subdirectoare) este modificat.
watchexec -e html -r tor
watchexec -e js,py -r mysql
Aici, opțiunea „-r” repornește procesul sau serviciul dacă acesta este deja activ în sistem.
Pentru mai multe exemple de utilizare a watchexec, poți consulta depozitul oficial GitHub.
intră
intră este un utilitar simplu și eficient pentru linia de comandă, care permite rularea unor comenzi arbitrare atunci când apar modificări într-un director anume.
„entr” este abrevierea de la Event Notify Test Runner (Executator de teste prin notificare de evenimente). Acest instrument a fost creat pentru a oferi un feedback rapid și pentru a automatiza testarea.
Instalare
entr este de obicei preinstalat în distribuțiile Linux. Dacă nu este prezent, trebuie să-l instalezi manual.
Acest instrument este ușor de utilizat și poate fi instalat prin comanda:
sudo apt-get install entr
Alternativ, îl poți instala clonând depozitul oficial Git.
git clone https://github.com/eradman/entr.git
Apoi, navighează la directorul respectiv și instalează cerințele folosind comenzile de mai jos.
./configure
make test
make install
Pentru a vedea opțiunile de construcție disponibile, execută `./configure -h`.
Exemple de comenzi
Pentru a consulta opțiunile și argumentele disponibile pentru comanda `entr`, folosește comanda următoare.
man entr
Această comandă afișează manualul de utilizare pentru comanda `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)
- Pentru a lansa și reîncărca automat un server MySQL atunci când orice fișier JavaScript este modificat în directorul de lucru. De fiecare dată când modificările sunt salvate în fișier, entr reîncarcă serverul MySQL.
ls *.js | entr -r mysql
- Pentru a reîncărca automat un server web sau pentru a-l închide dacă serverul se oprește.
$ ls * | entr -rz ./httpd
Pentru mai multe detalii și exemple despre comanda `entr`, poți vizita depozitul lor oficial GitHub.
Concluzie 👩💻
Sper că acest articol te-a ajutat să înțelegi cum să execuți comenzi Linux atunci când fișierele dintr-un director specific sunt modificate sau când sunt create fișiere noi.
De asemenea, te-ar putea interesa să afli cum să ștergi fișiere și directoare în Linux.