Como monitorar quais arquivos são abertos

9

Existe uma ferramenta para monitorar quais processos abrem e quais arquivos no sistema, para que você possa rastrear qual processo continua tocando em um arquivo específico?

O Lsof pode descobrir se você o executa enquanto o processo está aberto, mas se é um processo de curta duração que é executado de vez em quando, você não pode pegá-lo com o lsof. Precisa de algo que use rastreamento de kernel.

psusi
fonte
Você fez check-in inify? Ver resposta da @ Kees aqui, por exemplo: askubuntu.com/questions/25442/... Há um par de links em minha resposta aqui: askubuntu.com/questions/29566/...
Belacqua
@jgbelacua nenhum desses é exatamente o que estou procurando. O Inotify pode dizer quando um determinado arquivo é tocado, e lsof pode dizer quais arquivos um processo abriu ou qual processo tem um arquivo aberto, mas preciso descobrir qual processo continua tocando um arquivo e depois fechá-lo antes que eu possa execute lsof para pegá-lo.
Psr #
Relacionado: askubuntu.com/questions/24512/…
ændrük

Respostas:

7

Talvez você possa usar o sistema de auditoria para isso. É um pouco pesado, mas algo assim deve funcionar (em /etc/audit/audit.rules):

# delete all other rules
-D

# watch the file in question
-w /path/to/file -p rwxa

e então acho que você precisa reiniciar o auditd:

sudo service audit restart

(Caso você não o tenha instalado, ele está no pacote auditd.) O culpado pode ser encontrado em /var/log/audit/audit.log.

taneli
fonte
Perfeito! Era exatamente isso que eu estava procurando.
Psusi
0

Infelizmente, o mecanismo que o Linux usa para permitir o monitoramento de arquivos é inotify, o que não fornece informações suficientes para extrair dados úteis: você obtém apenas o nome do arquivo e a ação que foi executada.

Eu tentei usar algo como isto:

sudo inotifywait -mr somedir --format "%w%f" | while read file; do echo -n "$file => ";lsof -b $file; echo ""; done

Isso escuta para inotificar eventos no diretório especificado e, para cada evento, executa lsof para tentar capturar o processo que toca o arquivo. Infelizmente, para a maioria dos acessos que testei (como usar um editor para gravar em um arquivo), o comando LSOF é apenas lento e não consegue capturar o processo incorreto.

Se seus processos executam IO mais intensivas nos arquivos problemáticos, sua milhagem pode variar. Boa sorte.

Guss
fonte
0

fnotifystat é uma ferramenta que foi projetada para assistir a atividade de arquivos 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

Mostre os 10 principais arquivos ativos a cada 60 segundos até parar:

sudo fnotifystat -t 10 60

Mostre a atividade do arquivo a cada 10 segundos, apenas 6 vezes:

sudo fnotifystat 10 6

Mostrar a atividade do arquivo thunderbird e o ID do processo 1827:

sudo fnotifystat -p thunderbird,1827

Mostre todos os eventos de notificação de arquivos e os 20 principais arquivos de atividades ativas em um único período de 5 minutos:

sudo sudo notifystat -v -d -c 5m 1

Apenas mostre todos os eventos de notificação de arquivo em / sys e / proc e nenhuma estatística periódica:

sudo fnotifystat -n -i /sys,/proc

Consulte a página de manual do fnotifystat para obter mais informações, é uma ferramenta bastante flexível.

Colin Ian King
fonte