Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

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

Оригинал: fswatch – Track File and Directory Changes in Linux
Автор: Aaron Kili
Дата публикации: 23 апреля 2024 г.
Перевод: В. Костромин
Дата перевода: 12 мая 2024 г.

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

Он использует следующие типы мониторов из различных операционных систем:

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

Возможности fswatch

  • Поддерживает несколько API-интерфейсов для конкретных ОС.
  • Использует рекурсивный мониторинг каталогов.
  • Позволяет фильтровать пути, используя возможность включения/исключения в регулярных выражениях.
  • Поддерживает настраиваемый формат записи.
  • Кроме того, он поддерживает периодические события простоя (idle-events).

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

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

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

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

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

git clone https://github.com/emcrisostomo/fswatch.git
cd fswatch
./autogen.sh
./configure
make
sudo make install
Важно. Перед компиляцией fswatch из исходного кода убедитесь, что в вашей системе установлены GNU GCC (компилятор C и C++) и инструменты разработки (build-essential в Debian/Ubuntu).

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

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

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

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

Чтобы это исправить, вам необходимо выполнить команду

sudo ldconfig
Это позволит обновить ссылки и кэш динамических библиотек, прежде чем вы сможете начать использовать fswatch.

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

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

fswatch [option] [path]

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

fswatch -M
fswatch --list-monitors
fswatch - List Monitors
fswatch – Список мониторов

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

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

fswatch -l 4 . 

fswatch - Monitor Home Directory Changes

Следующая команда отслеживает изменения в файле /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

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

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

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

man fswatch

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

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

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


Photo of author
Аарон Кили — энтузиаст Linux и F.O.S.S, подающий надежды системный администратор Linux, веб-разработчик, а в настоящее время создатель контента для TecMint, который любит работать с компьютерами и твердо верит в необходимость делиться знаниями.

- - -