Како извршити наредбу када се датотека промени у Линуку?

Праћење Промена у Фајловима и Извршавање Команди на Линук Систему

Ако желите да научите како да аутоматски покрећете Линукс команде сваки пут када се фајл у радном директоријуму измени или када се створи нови фајл, дошли сте на право место.

У Линуксу, алатка 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 страницу.

Завршна Реч

Надам се да вам је овај чланак био користан и да сте научили како да покренете Линукс команде када се фајл у датом директоријуму измени или када се креира нови фајл.

Можда би вас занимало и да научите како да уклоните фајлове и директоријуме у Линуксу.