Существует ли инструмент для отслеживания того, какие процессы открывают какие файлы в системе, чтобы вы могли отслеживать, какой процесс продолжает касаться определенного файла?
Lsof может выяснить, запускаете ли вы его, пока у процесса есть файл open, но если это недолговечный процесс, который запускается время от времени, вы не можете поймать его с помощью lsof. Нужно что-то, что использует трассировку ядра.
Вы могли бы использовать для этого систему аудита. Это немного тяжеловесно, но что-то вроде этого должно работать (в /etc/audit/audit.rules):
# delete all other rules
-D
# watch the file in question
-w /path/to/file -p rwxa
, а затем, я думаю, вам нужно перезапустить auditd:
sudo service audit restart
(если он у вас не установлен , он находится в пакете auditd.) В этом случае виновника можно найти в /var/log/audit/audit.log.
К сожалению, механизм, который Linux использует для того, чтобы контролировать файлы, является inotify, который не предоставляет достаточно информации для извлечения полезных данных: вы получаете только имя файла и выполненное действие.
Я пытался использовать нечто подобное:
sudo inotifywait -mr somedir --format "%w%f" | while read file; do echo -n "$file => ";lsof -b $file; echo ""; done
Это прослушивает inotify события в указанном каталоге и для каждого события запускает lsof, чтобы попытаться поймать процесс, который касается файла. К сожалению, для большинства обращений, которые я тестировал (например, использование редактора для записи в файл), команда LSOF просто замедляет и не успевает перехватить оскорбительный процесс.
Если ваши процессы выполняют более интенсивное IO на проблемных файлах, то ваш пробег может варьироваться. Удачи.
fnotifystat - это инструмент, который был разработан для отслеживания активности файлов Linux
sudo apt-get install fnotifystat
sudo fnotifystat
Total Open Close Read Write PID Process Pathname
7.0 1.0 1.0 5.0 0.0 2075 libvirtd /proc/cpuinfo
6.0 2.0 2.0 2.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu0/topology/physical_package_id
6.0 2.0 2.0 2.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu1/topology/physical_package_id
6.0 2.0 2.0 2.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu2/topology/physical_package_id
6.0 2.0 2.0 2.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu3/topology/physical_package_id
4.0 1.0 1.0 2.0 0.0 2075 libvirtd /sys/devices/system/node
4.0 1.0 1.0 2.0 0.0 2075 libvirtd /sys/devices/system/node/node0
4.0 2.0 2.0 0.0 0.0 15313 gnome-calendar /usr/share/zoneinfo/Europe/London
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu0/topology/core_id
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu1/topology/core_id
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu1/topology/thread_siblings_list
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu2/topology/core_id
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu2/topology/thread_siblings_list
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu3/topology/core_id
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/cpu3/topology/thread_siblings_list
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/online
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/cpu/present
3.0 1.0 1.0 1.0 0.0 2075 libvirtd /sys/devices/system/node/node0/meminfo
2.0 0.0 0.0 0.0 2.0 12174 xchat /home/cking/.xchat2/xchatlogs/FreeNode-#ubuntu-release.log
1.0 0.0 0.0 0.0 1.0 12174 xchat /home/cking/.xchat2/xchatlogs/FreeNode-#ubuntu-desktop.log
1.0 0.0 0.0 0.0 1.0 12174 xchat /home/cking/.xchat2/xchatlogs/FreeNode-#ubuntu-devel.log
1.0 0.0 0.0 0.0 1.0 12174 xchat /home/cking/.xchat2/xchatlogs/FreeNode-#ubuntu-kernel.log
Показывать 10 самых активных файлов каждые 60 секунд до остановки:
sudo fnotifystat -t 10 60
Показывать активность файлов каждые 10 секунд всего 6 раз :
sudo fnotifystat 10 6
Показать файловую активность thunderbird и идентификатор процесса 1827:
sudo fnotifystat -p thunderbird,1827
Показать каждое событие уведомления файла и 20 самых популярных файлов активности за один период в 5 минут:
sudo sudo notifystat -v -d -c 5m 1
Просто показать каждое событие уведомления файла на / sys и / proc и без периодической статистики:
sudo fnotifystat -n -i /sys,/proc
Дополнительную информацию см. на странице руководства fnotifystat, это довольно гибкий инструмент.