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文件時就會立即創建一個以~$開頭的臨時文件