Как отслеживать изменения файлов с помощью fswatch в Linux
Fswatch — это бесплатная многоплатформенная утилита с открытым исходным кодом для мониторинга изменений файлов, которая уведомляет нас, когда содержимое указанных файлов или каталогов модифицируется или изменяется. Используя fswatch, мы можем легко отслеживать изменения, вносимые в файлы и/или каталоги. Он поддерживает все операционные системы, включая GNU/Linux, *BSD, Mac OS X, Solaris, Microsoft Windows и т. д. В этом кратком руководстве я покажу вам, как отслеживать изменения файлов с помощью fswatch в Linux. и Unix-подобные операционные системы.
Виды мониторинга
Fswatch реализует следующие типы мониторов.
- Монитор на основе API событий файловой системы Apple OS X.
- Монитор, основанный на kqueue — интерфейсе уведомлений, представленном во FreeBSD 4.1.
- Монитор, основанный на API уведомления о событиях файлов ядра Solaris и его производных.
- Монитор на основе inotify — подсистемы ядра Linux, которая сообщает приложениям об изменениях файловой системы.
- Монитор на основе ReadDirectoryChangesW — API Microsoft Windows, который сообщает об изменениях в каталоге.
- Монитор, который периодически проверяет файловую систему, сохраняет время изменения файлов в памяти и вручную рассчитывает изменения файловой системы.
Функции
Что касается особенностей fswatch, то можно перечислить следующее:
- Кроссплатформенная утилита с открытым исходным кодом.
- Поддержка многих API-интерфейсов, специфичных для ОС.
- Рекурсивный мониторинг каталогов.
- Фильтрация путей с использованием включения и исключения регулярных выражений.
- Настраиваемый формат записи.
- Поддержка периодических событий простоя.
- И много.
Установите fswatch в Linux
Утилита fswatch доступна в репозиториях по умолчанию популярных дистрибутивов Linux.
Чтобы установить fswatch в Debian, Ubuntu, Linux Mint, Pop OS и других системах на базе APT, запустите:
sudo apt install fswatch
Чтобы установить fswatch в Fedora, RHEL, CentOS, AlmaLinux и Rocky Linux, включите репозиторий [EPEL] с помощью команды:
sudo dnf install epel-release
А затем установите install fswatch с помощью команды:
sudo dnf install fswatch
Чтобы установить fswatch в openSUSE, запустите:
sudo zypper install fswatch
Установить fswatch из исходников
Если fswatch недоступен для вашего дистрибутива, вы можете вручную скомпилировать и установить последнюю версию из исходного кода, как описано ниже.
Перед компиляцией вам необходимо установить инструменты разработки в свой дистрибутив Linux. Чтобы установить инструменты разработки в различных дистрибутивах Linux, обратитесь к следующему руководству.
- Как установить инструменты разработки в Linux
Затем загрузите исходный файл fswatch здесь.
wget https://github.com/emcrisostomo/fswatch/releases/download/1.17.1/fswatch-1.17.1.tar.gz
Извлеките загруженный архив:
tar -zxvf fswatch-1.17.1.tar.gz
Перейдите в папку проекта:
cd fswatch-1.17.1/
Наконец, скомпилируйте и установите fswatch, выполнив одну за другой следующие команды.
./configure
make
sudo make install
Наконец, выполните следующую команду, чтобы обновить ссылки и кэш динамических библиотек:
sudo ldconfig
Если вы не запустите указанную выше команду, вы можете получить следующую ошибку в системах GNU/Linux.
fswatch: error while loading shared libraries: libfswatch.so.6: cannot open shared object file: No such file or directory
Наконец, проверьте версию fswatch, чтобы убедиться, что она установлена правильно:
fswatch --version
fswatch 1.17.1
Copyright (C) 2013-2021 Enrico M. Crisostomo <enrico.m.crisostomo@gmail.com>.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Enrico M. Crisostomo.
Установите fswatch во FreeBSD.
Во FreeBSD fswatch можно установить, используя pkg
в качестве root
:
pkg install fswatch-mon
Отслеживайте изменения файлов с помощью fswatch в Linux
Использование fswatch не представляет большого труда. Типичный синтаксис fswatch:
fswatch [options] ... path-0 ... path-n
Чтобы проверить, как работает fswatch, откройте два окна терминала (назовем их Терминал 1 и Терминал 2).
В Терминале 1 запустите команду fswatch, чтобы отслеживать каталог $HOME
.
fswatch /home/ostechnix/
И в Терминале 2 выполните некоторые операции, такие как создание файлов/папок, удаление файлов, изменение файлов и т. д.
Все, что вы делаете в терминале 2, будет уведомлено на терминале 1. Посмотрите на следующие снимки экрана.
Терминал 1 — команда fswatch запущена и отслеживаются изменения файлов:
Мониторинг изменений файлов с помощью fswatch
Терминал 2 – произвольные изменения в файлах/папках:
Производить случайные изменения в файлах и папках
По умолчанию fswatch выберет лучший монитор, доступный на текущей платформе, с точки зрения производительности и потребления ресурсов. В Linux монитором по умолчанию является inotify.
По умолчанию fswatch будет отслеживать изменения файла до тех пор, пока вы не остановите его вручную, нажав клавиши CTRL+C
.
Список мониторов
Чтобы просмотреть список доступных мониторов на текущей платформе (в нашем случае Linux), запустите:
fswatch -M
Или,
fswatch --list-monitors
Пример вывода:
inotify_monitor
poll_monitor
Мониторинг конкретного файла или папки
Чтобы отслеживать определенный файл или каталог с помощью определенной опции монитора, запустите:
swatch -m kqueue_monitor /home/ostechnix/
Вы также можете выйти из fswatch после получения первого набора событий, указав параметр -1
, как показано в следующей команде:
fswatch -1 /home/ostechnix/
Эта команда завершится сразу после получения первого набора событий.
fswatch будет отслеживать изменения во всех файлах/папках по указанному пути. Если вы хотите просмотреть изменения, внесенные только в каталоги, используйте опцию -d
.
fswatch -d /home/ostechnix/
Конечно, есть больше вариантов. Подробные инструкции см. на страницах руководства или странице документации проекта.
man fswatch
Ресурс:
- Репозиторий fswatch на GitHub
Избранное изображение Пита Линфорта с сайта Pixabay.