Назад | Перейти на главную страницу

отслеживать открытые файлы процессов в Linux (в реальном времени)

Файлы, открытые процессом XYZ, можно найти с помощью команды

ls -l /proc/PID/fd

Есть ли что-то более интерактивное, например tail автоматическое обновление каждые x секунд?

Попробуйте watch команда:

watch -n 10 ls -l /proc/$$/fd

Смотреть приятно.

Вы можете использовать старый цикл while:

while :
do
 ls -l /proc/$$/fd
 sleep 10
done

watch находится в procps пакет в системах на основе Debian и procps rpm в системах, производных от RedHat.

Если вы хотите видеть каждый файл, когда он открывается, вы можете отфильтровать его с помощью strace. Например:

strace -p _pid_of_app_ -e trace=open,close

Вы можете комбинировать lsofи watch.

Например watch "lsof -p 1234" будет выдавать вам список всех открытых файлов pid 1234 каждые 2 секунды. Вы можете изменить некоторые параметры в соответствии со своими потребностями.

Я создал файл bash, в котором записывал вывод команды в файл. Файл был создан на основе текущей даты. Здесь я считаю количество открытых файлов.

#!/bin/bash
while :
do
 cd /proc/<PID>/fd
 today=$(date +"%m-%d-%Y")
 filename="/tmp/${today}.txt"
 ls -l | wc -l >> "${filename}"
 sleep 10
done