Праћење Промена у Фајловима и Извршавање Команди на Линук Систему
Ако желите да научите како да аутоматски покрећете Линукс команде сваки пут када се фајл у радном директоријуму измени или када се створи нови фајл, дошли сте на право место.
У Линуксу, алатка cron омогућава да закажете покретање команди у одређено време.
Међутим, шта ако желите да се команде извршавају сваки пут када се неки фајл модификује или када се нови фајл дода у одређени директоријум?
И то је могуће остварити, а постоје и одговарајуће команде за то.
Кренимо!
watchexec
watchexec је врло користан алат који надгледа одређени радни директоријум и извршава задату команду када детектује било какву промену, на пример ажурирање фајла или креирање новог фајла.
Кључне Карактеристике
- Не захтева сложену структуру команде са посебним аргументима.
- Прати промене у текућем директоријуму и свим његовим поддиректоријумима у реалном времену.
- Не зависи од језичких окружења и није везан за одређени програмски језик.
- Користи `.gitignore` и `.ignore` фајлове за одлучивање које фајлове треба искључити из праћења.
- Групе процеса се користе за праћење програма који се извршавају.
- Могуће је пратити фајлове са одређеном екстензијом.
- Ради на macOS, Linux и Windows оперативним системима.
- Омогућава филтрирање и искључивање промена на основу глобалних правила, омогућавајући проналажење фајлова са делимично идентичним именима.
Инсталација алатке watchexec
Да бисте инсталирали `watchexec`, користите следећу команду у терминалу:
curl -sS https://webinstall.dev/watchexec | bash
Након успешне инсталације, на екрану ће бити приказана инсталациона путања. У мом случају, алат је инсталиран у `/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
Након инсталације, проверите да ли се извршна датотека налази у директоријуму `.local/bin` користећи ове команде:
cd .local/bin ls
Следећи корак је додавање путање до извршне датотеке у системски PATH:
export PATH="/root/.local/bin:$PATH"
Да бисте покренули `watchexec`, једноставно укуцајте `watchexec` у терминал као root корисник. Да бисте видели које опције и заставице се могу користити, унесите следећу команду:
watchexec --help
Примери Команди
- Изврши команду `ls -la` кад год се било који фајл промени у тренутном или поддиректоријумима. Ова команда ће приказати све фајлове у директоријуму сваки пут када дође до промене.
watchexec -- ls -la
- Покрените наведену команду кад год се измени фајл са екстензијом `py`, `js`, `css`, или `html`. Екстензије фајлова се наводе одвојене зарезом.
watchexec --exts py,js,css,html <command>
- Покрените команду када се промени било који фајл у директоријумима `lib` или `src`. Опција `-w` се користи за праћење одређеног фајла или директоријума.
watchexec -w lib -w src <command>
- Позовите или поново покрените неку услугу када се промени било који фајл у тренутном или поддиректоријумима.
watchexec -e html -r tor watchexec -e js,py -r mysql
Овде, опција `-r` поново покреће одређени процес или услугу ако је већ покренута.
За додатне примере коришћења `watchexec`, посетите званичну GitHub страницу.
entr
entr је једноставан услужни програм командне линије који омогућава извршавање команди када дође до промена у задатом директоријуму.
`entr` је скраћеница за Event Notify Test Runner. Овај алат је креиран са циљем постизања брзе повратне информације и аутоматског тестирања.
Инсталација
`entr` је често већ инсталиран на Линукс дистрибуцијама. Ако није, можете га инсталирати ручно.
Алат је једноставан за коришћење и може се инсталирати помоћу следеће команде:
sudo apt-get install entr
Такође, можете га инсталирати клонирањем званичног GitHub репозиторијума.
git clone https://github.com/eradman/entr.git
Затим уђите у преузети директоријум и инсталирајте неопходне компоненте помоћу следећих команди:
./configure make test make install
За преглед доступних опција, покрените `./configure -h`
Примери Команди
За преглед доступних опција и аргумената за команду `entr`, користите следећу команду:
man entr
Ова команда ће приказати упутство за употребу команде `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)
- За покретање и аутоматско поновно учитавање MySQL сервера када се промени било који JavaScript фајл у радном директоријуму. Сваки пут када сачувате промене у фајлу, `entr` поново учитава MySQL сервер.
ls *.js | entr -r mysql
- За аутоматско поновно учитавање веб сервера или гашење ако се сервер сруши.
$ ls * | entr -rz ./httpd
За више детаља и примера о `entr` команди, посетите званичну GitHub страницу.
Завршна Реч
Надам се да вам је овај чланак био користан и да сте научили како да покренете Линукс команде када се фајл у датом директоријуму измени или када се креира нови фајл.
Можда би вас занимало и да научите како да уклоните фајлове и директоријуме у Линуксу.