Якщо ви шукаєте спосіб автоматично запускати команди Linux при зміні файлів у вашому робочому каталозі або створенні нових, ви потрапили за адресою.
У Linux, інструмент cron використовується для планування задач за розкладом, але що робити, якщо вам потрібно виконувати команди не за часом, а при кожній зміні файлу чи додаванні нового файлу до каталогу?
Це цілком можливо і досить просто зробити за допомогою спеціальних утиліт командного рядка.
Тож, давайте почнемо!
Watchexec
Watchexec – це незалежна утиліта, що стежить за заданим робочим каталогом і виконує визначену команду при будь-якій зміні, як-от: оновлення файлу або створення нового.
Можливості
- Не потребує складних конструкцій з xargs.
- Відстежує зміни в реальному часі як у поточному каталозі, так і в його підкаталогах.
- Не залежить від будь-якого конкретного мовного середовища виконання.
- Підтримує файли `.gitignore` та `.ignore` для ігнорування певних файлів.
- Використовує групи процесів для відстеження розгалужених застосунків.
- Дозволяє фільтрувати файли за розширенням.
- Працює на OS X, Linux та Windows.
- Фільтрування подій на основі glob-шаблонів, що дозволяє шукати файли з частково ідентичними іменами.
Встановлення Watchexec
Для встановлення watchexec просто введіть наступну команду в термінал і натисніть Enter:
Для Linux та macOS
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
Наступний крок – експортування шляху, щоб мати можливість використовувати інструмент watchexec:
export PATH="/root/.local/bin:$PATH"
Щоб запустити, просто введіть `watchexec` в терміналі від імені користувача root. Скористайтеся командою нижче, щоб побачити список доступних параметрів:
watchexec --help
Приклади використання
- Виконання `ls -la` при зміні будь-якого файлу у поточному каталозі чи підкаталозі. Ця команда виведе список усіх файлів у каталозі щоразу, коли відбудеться будь-яка зміна.
watchexec -- ls -la
- Виконання певної команди при зміні будь-якого файлу з розширенням python, 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 зазвичай встановлено за замовчуванням в багатьох дистрибутивах Linux. Якщо його немає, то потрібно встановити вручну.
Інструмент можна легко встановити за допомогою команди:
sudo apt-get install entr
Альтернативно, його можна встановити, клонувавши офіційний Git репозиторій:
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.
На завершення 👩💻
Сподіваюсь, ця стаття допомогла вам зрозуміти, як автоматично запускати команди Linux при зміні файлів або створенні нових у заданому каталозі.
Також, можливо, вам буде цікаво дізнатися про видалення файлів та каталогів в Linux.