Может ли iNotify сообщить мне, куда перемещается отслеживаемый файл?
Я хочу отслеживать файл, пока он движется в системе. Может ли iNotify рассказать мне о своей новой должности, когда она движется?
3 ответа
Если вы просматриваете как каталог, из которого был перемещен файл, так и каталог, в который был перемещен файл, вы получите IN_MOVED_FROM
событие в каталоге источника и IN_MOVED_TO
событие в целевом каталоге, оба с одинаковыми cookie
, Затем вы можете использовать name
поля двух событий, чтобы узнать, куда файл был перемещен в и из.
Если вы смотрите только исходный каталог или только целевой каталог, то вы получите только одно из событий, поэтому у вас будет только половина информации. Это ограничение inotify.
Вы можете захватить файловый дескриптор файла перед перемещением и прочитать символическую ссылку по адресу:
'/proc/self/fd/' + $fd
где $fd - ваш файловый дескриптор, этот файловый дескриптор будет указывать на ваш файл. Примечание. Я проверял это только на ext4, и он работает с LVM2, но не работает с OverlayFS. Также открытие файлового дескриптора заблокирует удаление событий из файла.
Также могут быть проблемы между версиями ядра Linux
Согласно ответу @slightly_toasted , вы можете использовать
sudo auditctl -a always,exit -F arch=b64 -S rename,rmdir,unlink,unlinkat,renameat -F dir=/path/to/folder/to/monitor -F key=DONT_MOVE
.
Ключ/тег — это то, что идентифицирует файл/папку, которую вы будете отслеживать.
Вы можете создавать разные теги для разных файлов/папок, которые собираетесь просматривать.
Чтобы убедиться, что эти правила сохранены, добавьте ту же команду (кроме
auditctl
)
-a always,exit -F arch=b64 -S rename,rmdir,unlink,unlinkat,renameat -F dir=/path/to/folder/to/monitor -F key=DONT_MOVE
к
/etc/audit/audit.rules
файл.
Для этого вы можете использовать:
sudo echo "-a always,exit -F arch=b64 -S rename,rmdir,unlink,unlinkat,renameat -F dir=/path/to/folder/to/monitor -F key=DONT_MOVE" >> /etc/audit/audit.rules
(он говорит, что в доступе отказано, поэтому нужно исправить)
затем
Файл/папка отсутствует, и вы хотите узнать ее новый путь? Использовать
ausearch -k DONT_MOVE
(
DONT_MOVE
или любой другой тег, который вы выбрали индивидуально для каждого файла/папки, которую вы хотите отслеживать)