ウェブサイト検索

fswatch - Linux でのファイルとディレクトリの変更を監視する


fswatch は、指定されたファイルまたはディレクトリの内容が変更または変更されたときに通知アラートを受け取る、クロスプラットフォームのファイル変更モニターです。

次のような 4 種類のモニターを異なるオペレーティング システム上で実行します。

  • Apple OS X の File System Events API に基づいて構築されたモニター。
  • FreeBSD 4.1 に存在する通知インターフェイスであるkqueue に基づくモニタは、OS X を含む多くの *BSD システムでもサポートされています。
  • Solaris カーネルとそのスピンオフのファイル イベント通知 API に基づくモニター。
  • inotify に基づくモニター。アプリに対するファイル システムの変更を表示するカーネル サブシステムです。
  • ディレクトリへの変更を記録する Windows API である ReadDirectoryChangesW に基づくモニター。
  • ファイル システムのステータスを定期的にチェックし、ファイルの変更時間をメモリ内に保持し、ファイル システムの変更を手動で判断するモニター (stat が使用できる場所であればどこでも機能します)。

fswatchの特徴

  • いくつかの OS 固有の API をサポート
  • 再帰的なディレクトリ監視を可能にします
  • 正規表現を含めたり除外したりしてパス フィルタリングを実行します
  • カスタマイズ可能なレコード形式をサポート
  • さらに、定期的なアイドル イベントをサポートします。

Linux システムに fswatch をインストールする方法

Linux にfswatch をインストールするには、特定の 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

重要: GNU GCC (C および C++ コンパイラー) と開発ツール (Debian/Ubuntuビルド必須) がインストールされていることを確認してください。 fswatch をソースからコンパイルする前に、システムを再構築します。

インストールされていない場合は、次のコマンドを使用して、それぞれの 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

以下のコマンドを使用すると、4 秒ごとに標準出力に配信されるイベントとともに、現在のディレクトリ (/home/tecmint) の変更を監視できます。

-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

ホーム ディレクトリと /var/log/auth.log ファイルの変更を示すイベントの数値を出力するには、-n または以下の --numeric オプション:

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

詳細な使用オプションと情報については、fswatch のマニュアル ページを参照してください。

man fswatch

詳細と使用方法については、fswatch Github リポジトリにアクセスしてください: https://github.com/emcrisosomo/fswatch

この記事では、指定されたファイルまたはディレクトリ階層の内容が変更されたときに Linux ユーザーが通知を受け取るのに役立つ簡単なコマンド ライン ユーティリティについて説明しました。

インストールがすべてうまくいったことを願っていますが、そうでない場合は、以下のフィードバック フォームからご連絡ください。さらに、以前に使用したことがある場合は、fswatch の使用体験についてご意見をお聞かせください。

関連記事: