fswatch - отслеживание изменений файлов и каталогов в Linux

fswatch – это кроссплатформенный монитор изменений файлов, который получает уведомления о том, что содержимое указанных файлов или каталогов изменено или модифицировано.

Он выполняет четыре типа мониторов на различных операционных системах, таких как:

  • Монитор, построенный на API событий файловой системы Apple OS X.
  • Монитор, основанный на kqueue, интерфейсе уведомлений, присутствующем во FreeBSD 4.1 и поддерживаемом во многих системах *BSD, включая OS X.
  • Монитор на основе File Events Notification API ядра Solaris и его побочных продуктов.
  • Монитор, основанный на inotify, подсистеме ядра, которая показывает изменения файловой системы приложениям.
  • Монитор, основанный на ReadDirectoryChangesW, API Windows, который записывает изменения в каталоге.
  • Монитор, который регулярно проверяет состояние файловой системы, хранит в памяти время модификации файлов и вручную определяет изменения файловой системы (работает везде, где можно использовать stat).

Особенности fswatch

  • Поддержка нескольких API, специфичных для ОС.
  • Позволяет осуществлять рекурсивный мониторинг каталогов
  • Выполняет фильтрацию путей с помощью включающих и исключающих регулярных выражений
  • Поддерживает настраиваемый формат записей
  • Дополнительно поддерживает периодические события простоя

Как установить fswatch в Linux-системах

Чтобы установить fswatch в Linux, используйте следующую команду, соответствующую вашему дистрибутиву Linux.

sudo apt install fswatch         [On Debian, Ubuntu and Mint]
sudo yum install fswatch         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/fswatch  [On Gentoo Linux]
sudo apk add fswatch             [On Alpine Linux]
sudo pacman -S fswatch           [On Arch Linux]
sudo zypper install fswatch      [On OpenSUSE]    
sudo pkg install fswatch         [On FreeBSD]

Если fswatch недоступен для установки из системных репозиториев по умолчанию, вы можете собрать его из исходных текстов, как показано в следующих инструкциях по установке.

Сначала клонируйте последний git-репозиторий fswatch с помощью следующей команды git и установите его, как показано на рисунке:

git clone https://github.com/emcrisostomo/fswatch.git
cd fswatch
./autogen.sh
./configure
make
sudo make install

Важно: Перед компиляцией fswatch из исходных текстов убедитесь, что в системе установлены GNU GCC (компилятор C) и средства разработки (build-essential на Debian/Ubuntu). Если их нет, установите их с помощью следующей команды в соответствующих дистрибутивах Linux.

sudo dnf group install 'Development Tools'    [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apt-get install build-essential          [On Debian, Ubuntu and Mint]

В дистрибутивах Debian/Ubuntu при выполнении команды fswatch может возникнуть следующая ошибка.

fswatch: error while loading shared libraries: libfswatch.so.13: cannot open shared object file: No such file or directory

Для ее устранения необходимо выполнить приведенную ниже команду, которая поможет обновить ссылки и кэш динамических библиотек, прежде чем вы сможете начать использовать fswatch.

sudo ldconfig

Как использовать fswatch для мониторинга изменений файлов в Linux

Общий синтаксис для запуска fswatch следующий:

fswatch [option] [path]

В Linux рекомендуется использовать монитор по умолчанию inotify, список доступных мониторов можно получить с помощью опции -M или - list-monitors:

fswatch -M
fswatch --list-monitors

Приведенная ниже команда позволяет наблюдать за изменениями в текущем каталоге (/home/tecmint), при этом события будут выводиться на стандартный вывод каждые 4 секунды.

Опция -l или – -latency позволяет задать задержку в секундах, по умолчанию – 1 секунда.

fswatch -l 4

Следующая команда отслеживает изменения в файле /var/log/auth.log каждые 5 секунд:

fswatch -l 5 /var/log/auth.log

С помощью опции -t или --timestamp печатается метка времени для каждого события, для печати времени в формате UTC используйте опцию -u или --utf-time. Вы также можете отформатировать время с помощью опции формата -f или --format-time:

fswatch --timestamp /var/log/auth.log

Далее, -x или --event-flags указывает fswatch на печать флагов события вместе с путем к событию. Вы можете использовать опцию -event-field-seperator для печати событий с определенным разделителем.

fswatch --events-flags ~ /var/log/auth.log

Чтобы напечатать числовое значение события, указывающего на изменения в вашем каталоге home и файле /var/log/auth.log, используйте опцию -n или --numeric, как показано ниже:

fswatch --numeric ~ /var/log/auth.log

Возможно, вы можете просмотреть страницу man для получения подробной информации об использовании опций:

man fswatch

Для получения дополнительной информации и использования посетите репозиторий fswatch на Github: https://github.com/emcrisostomo/fswatch.

В этом посте мы рассмотрели простую утилиту командной строки, которая поможет пользователям Linux получать уведомления об изменении содержимого указанных файлов или иерархий каталогов.

Я надеюсь, что установка прошла успешно, но если это не так, постарайтесь связаться с нами через форму обратной связи ниже. Кроме того, если вы уже пользовались этой программой, вы можете поделиться с нами своими впечатлениями о работе с fswatch.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.tecmint.com

Комментарии (0)