inotify
是 Linux 內核提供的一種文件系統事件監控機制,它可以實時監控文件或目錄的變化,如創建、刪除、修改等。在 Ubuntu 上配置 inotify
通常涉及以下幾個步驟:
安裝 inotify-tools:
inotify-tools
是一個提供了 inotifywait
和 inotifywatch
命令行工具的軟件包,可以用來監控文件系統事件。
打開終端,運行以下命令來安裝 inotify-tools
:
sudo apt-get update
sudo apt-get install inotify-tools
使用 inotifywait:
安裝完成后,你可以使用 inotifywait
命令來監控文件或目錄。例如,要監控當前目錄下的所有文件變化,可以使用以下命令:
inotifywait -m -r .
參數說明:
-m
或 --monitor
:持續監控而不是執行一次。-r
或 --recursive
:遞歸監控目錄及其子目錄。.
:指定要監控的目錄,這里表示當前目錄。你可以根據需要添加其他選項來定制監控行為,例如:
-e
或 --event
:指定要監控的事件類型,如 create
, delete
, modify
等。-q
或 --quiet
:減少輸出信息,只顯示事件發生時的簡要信息。例如,要監控當前目錄下所有 .txt
文件的創建和修改事件,可以使用:
inotifywait -m -r -e create,modify --format '%w%f %e' --timefmt '%Y-%m-%d %H:%M:%S' -e modify,create .
編寫腳本:
如果你需要更復雜的監控邏輯,可以編寫自己的腳本來使用 inotifywait
。例如,創建一個名為 monitor.sh
的腳本:
#!/bin/bash
inotifywait -m -r -e create,delete,modify --format '%w%f %e' --timefmt '%Y-%m-%d %H:%M:%S' -e modify,create . |
while read path action; do
echo "The file '$path' appeared at $action"
# 在這里添加你的邏輯
done
賦予腳本執行權限并運行它:
chmod +x monitor.sh
./monitor.sh
系統服務:
如果你想讓 inotify
監控作為系統服務運行,你可以創建一個 systemd 服務單元文件。例如,創建一個名為 inotify.service
的文件:
[Unit]
Description=Inotify File System Monitor
[Service]
ExecStart=/path/to/your/script/monitor.sh
Restart=always
User=yourusername
[Install]
WantedBy=multi-user.target
將 /path/to/your/script/monitor.sh
替換為你的腳本路徑,yourusername
替換為你的用戶名。然后啟用并啟動服務:
sudo systemctl enable inotify.service
sudo systemctl start inotify.service
請注意,inotify
有文件描述符數量的限制,如果監控的文件或目錄非常多,可能會達到這個限制??梢酝ㄟ^調整內核參數來增加這個限制。編輯 /etc/sysctl.conf
文件,添加或修改以下行:
fs.inotify.max_user_watches=524288
然后運行 sudo sysctl -p
來應用更改。