Linux使用inotify-tools監聽檔案或目錄

sktj發表於2018-05-02

轉載:

Inotify一種強大的、細粒度的、非同步檔案系統監控機制,它滿足各種各樣的檔案監控需要,可以監控檔案系統的訪問屬性、讀寫屬性、許可權屬性、刪除建立、移動等操作,也就是可以監控檔案發生的一切變化。。

inotify-tools是一個C庫和一組命令列的工作提供Linux下inotify的簡單介面。inotify-tools安裝後會得到inotifywait和inotifywatch這兩條命令:

inotifywait命令可以用來收集有關檔案訪問資訊,Linux發行版一般沒有包括這個命令,需要安裝inotify-tools,這個命令還需要將inotify支援編譯入Linux核心,好在大多數Linux發行版都在核心中啟用了inotify。

inotifywatch命令用於收集關於被監視的檔案系統的統計資料,包括每個 inotify 事件發生多少次。

開始之前需要檢測系統核心是否支援inotify:

使用uname -r命令檢查Linux核心,如果低於2.6.13,就需要重新編譯核心加入inotify的支援。

使用ll /proc/sys/fs/inotify命令,是否有以下三條資訊輸出,如果沒有表示不支援。

ll /proc/sys/fs/inotifytotal 0

-rw-r–r– 1 root root 0 Jan  4 15:41 max_queued_events

-rw-r–r– 1 root root 0 Jan  4 15:41 max_user_instances

-rw-r–r– 1 root root 0 Jan  4 15:41 max_user_watches

安裝inotify-tools

inotify-tools專案地址:https://github.com/rvoicilas/inotify-tools

inotify-tools下載地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

#CentOS release 5.8/64位:tar zxvf inotify-tools-3.14.tar.gzcd inotify-tools-3.14./configuremakemake install

其他Linux發行版安裝方法可以參見:https://github.com/rvoicilas/inotify-tools/wiki#wiki-getting

inotify相關引數

inotify定義了下列的介面引數,可以用來限制inotify消耗kernel memory的大小。由於這些引數都是記憶體引數,因此,可以根據應用需求,實時的調節其大小:

/proc/sys/fs/inotify/max_queued_evnets表示呼叫inotify_init時分配給inotify instance中可排隊的event的數目的最大值,超出這個值的事件被丟棄,但會觸發IN_Q_OVERFLOW事件。

/proc/sys/fs/inotify/max_user_instances表示每一個real user ID可建立的inotify instatnces的數量上限。

/proc/sys/fs/inotify/max_user_watches表示每個inotify instatnces可監控的最大目錄數量。如果監控的檔案數目巨大,需要根據情況,適當增加此值的大小。

根據以上在32位或者64位系統都可以執行:

echo 104857600 > /proc/sys/fs/inotify/max_user_watches

echo `echo 104857600 > /proc/sys/fs/inotify/max_user_watches` >> /etc/rc.local

如果遇到以下錯誤:

inotifywait: error while loading shared libraries: libinotifytools.so.0: cannot open shared object file: No such file or directory

解決方法:32位系統:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib/libinotifytools.so.064位系統:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0

inotifywait命令使用

#!/bin/bash#filename watchdir.shpath=$1/usr/local/bin/inotifywait -mrq –timefmt `%d/%m/%y/%H:%M` –format `%T %w %f` -e modify,delete,create,attrib $path執行輸出:./watchdir.sh /data/wsdata/tools/04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp

04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swx

04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swx

04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp

04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp

04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp

04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp

04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp

04/01/13/16:35 /data/wsdata/tools/ 4913

04/01/13/16:35 /data/wsdata/tools/ 4913

04/01/13/16:35 /data/wsdata/tools/ 4913

04/01/13/16:35 /data/wsdata/tools/ j.jsp

04/01/13/16:35 /data/wsdata/tools/ j.jsp

04/01/13/16:35 /data/wsdata/tools/ j.jsp

04/01/13/16:35 /data/wsdata/tools/ j.jsp~

04/01/13/16:35 /data/wsdata/tools/ .j.jsp.swp

inotifywait命令引數

-m是要持續監視變化。

-r使用遞迴形式監視目錄。

-q減少冗餘資訊,只列印出需要的資訊。

-e指定要監視的事件列表。

–timefmt是指定時間的輸出格式。

–format指定檔案變化的詳細資訊。

可監聽的事件

事件描述

access訪問,讀取檔案。

modify修改,檔案內容被修改。

attrib屬性,檔案後設資料被修改。

move移動,對檔案進行移動操作。

create建立,生成新檔案

open開啟,對檔案進行開啟操作。

close關閉,對檔案進行關閉操作。

delete刪除,檔案被刪除。


相關文章