Linux學習筆記:Inotify

1.    什麼是inotify

        inotify是linux 2.6.13內核開始支持的特性,可以監視指定文件或者目錄發生變化而產生消息,一般結合rsync使用,實現文件實時同步。

2.    inotify的安裝

        inotify最新版本是3.14,無法通過yum進行安裝,只能從網上下載所得。可搜索inotify-tools-3.14.tar.gz,大約是350KB大小。安裝前需要確認一下系統是否支持可通過以下方式

        查看當前linux核心版本,只要版本大於等於2.6.13即可

        [root@smb ~]# uname -r

        2.6.32-573.18.1.el6.x86_64

        查看核心參數,這些參數可以修改以進行優化,而且這些核心參數即使沒有安裝Inotify也是存在的。

        [root@smb ~]# cat /proc/sys/fs/inotify/max_queued_events 

        16384   #

        [root@smb ~]# cat /proc/sys/fs/inotify/max_user_instances 

        128

        [root@smb ~]# cat /proc/sys/fs/inotify/max_user_watches 

        8192

        安裝非常簡單,解壓inotify-tools-3.14.tar.gz,進入所得的文件夾,然後./configure --prefix=/usr/local/inotify-tools-3.14

        然後make && make install

        正常情況下會自動安裝到 /usr/local/inotify-tools-3.14這個目錄。

        再執行一下ln -s /usr/local/inotify-tools-3.14 /usr/local/inotify 創建一個軟連接即可。

3.    inotify的使用

        inotify有兩個工具inotifywait和inotifywatch,關於它們的詳細用法可以參考--help或者它自帶的man資料。可以把MANPATH /usr/local/inotify/share/man加到/etc/man.conf裏,就可以直接man這兩個工具的名字。

        一般結合rsync的是 inotifywait,用法是inotifywait  [-hcmrq]  [-e <event> ] [-t <seconds> ] [--format <fmt> ] [--timefmt <fmt> ] <file> [ ... ]

        關於參數的解釋

@<file>

精確排除文件,可使用相對路徑或絕對路徑,如果文件名是以@開頭的,需要使用絕對路徑。

--fromfile <file>

從指定的文件讀取要排除的文件名,一行一個文件名。如果指定的<file>不是文件名而是-,那麼將讀取stdin

-m, --monitor

監控模式

-d, --daemon

daemon模式,把變化的信息輸出到文件,一定要配合-o來使用

-s, --syslog

將錯誤輸出到syslog中去

-r, --recursive

遞歸,用於監視目錄。

-q, --quiet

僅可能少的顯示信息,如果指定兩次,則完全不輸出任何信息。

--exclude <pattern>

根據POSIX擴展正則表達式來排除文件

--excludei <pattern>

同上,而且忽略大小寫

-t <seconds>, --timeout <seconds>

當指定的事件在指定時間內沒有發生,則退出。

 -e <event>, --event <event>

指定事件,

--timefmt <fmt>

如果需要輸出時間,則指定其格式,參考date命令的格式參數

--format <fmt>

輸出信息的格式參數。

%w 常用於顯示發生變化的目錄

%f  常用於顯示發生變化的文件名

%e  顯示發生的事件,用逗號分隔顯示

%Xe X爲自定義的符號,用來分隔顯示

%T  時間

        關於事件的解釋

access

文件被訪問

modify 

文件被修改

close_write

文件被關閉並被寫入

open

文件被打開

move

被移動

create

創建

delete 

刪除

unmount

卸載

一個例子

[root@smb ~]# /usr/local/inotify/bin/inotifywait -mrq --exclude '(^.*/~.*|^.*\.pdf$)' -e create,delete,modify,move --format '%w%f' /data

監視/data目錄所發生的創建、刪除、修改、移動事件,一旦發生,即輸出文件的絕對路徑,但排除了以~$開頭的文件和.pdf結尾的文件。

注:~$開頭的文件常見於office的臨時文件,通常打開一個office文件時就會立即創建一個以~$開頭的臨時文件


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章