Поиск по сайту:

Как отслеживать изменения файлов с помощью 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.

Статьи по данной тематике