Как следить за тем, какие файлы открываются

Существует ли инструмент для отслеживания того, какие процессы открывают какие файлы в системе, чтобы вы могли отслеживать, какой процесс продолжает касаться определенного файла?

Lsof может выяснить, запускаете ли вы его, пока у процесса есть файл open, но если это недолговечный процесс, который запускается время от времени, вы не можете поймать его с помощью lsof. Нужно что-то, что использует трассировку ядра.

9
задан 8 April 2011 в 22:44

3 ответа

Вы могли бы использовать для этого систему аудита. Это немного тяжеловесно, но что-то вроде этого должно работать (в /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.

7
ответ дан 8 April 2011 в 22:44

К сожалению, механизм, который 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 на проблемных файлах, то ваш пробег может варьироваться. Удачи.

0
ответ дан 8 April 2011 в 22:44

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, это довольно гибкий инструмент.

0
ответ дан 23 November 2019 в 05:08

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

Похожие вопросы: