Может ли 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или любой другой тег, который вы выбрали индивидуально для каждого файла/папки, которую вы хотите отслеживать)

Другие вопросы по тегам