it-swarm-ru.tech

Как определить, какой процесс создает файл?

По заданному пути к файлу, как я могу определить, какой процесс его создает (и/или читает/записывает в него)?

67
Anton Barkovsky

Команда lsof (уже упоминавшаяся в нескольких ответах) сообщит вам, какой процесс имеет файл, открытый на момент его запуска , lsof доступно практически для каждого варианта Unix.

lsof /path/to/file

lsof не расскажет вам о файле, который был открыт две микросекунды назад и закрыт одну микросекунду назад. Если вам нужно посмотреть определенный файл и реагировать на него, вам нужны разные инструменты.

Если вы можете запланировать немного заранее, вы можете поместить файл в LoggedFS файловую систему. LoggedFS - это сложенная файловая система Fuse , которая регистрирует все обращения к файлам в иерархии. Параметры ведения журнала легко настраиваются. Предохранитель доступен на все основные устройства . Вы хотите зарегистрировать доступ к каталогу, в котором создан файл. Начните с предоставленного примера файла конфигурации и настройте его в соответствии с это руководство .

loggedfs -l /path/to/log_file -c /path/to/config.xml /path/to/directory
tail -f /path/to/log_file

Многие отделения предлагают другие средства мониторинга. Под Linux вы можете использовать относительно новую подсистема аудита . Об этом не так много литературы (но больше, чем о loggedfs); вы можете начать с это руководство или aнесколькопримеры или просто с auditctl справочная страница . Здесь должно быть достаточно, чтобы убедиться, что демон запущен, а затем запустите auditctl:

auditctl -w /path/to/file

(Я думаю, что старые системы нуждаются в auditctl -a exit,always -w /path/to/file) и смотрите логи в /var/log/audit/audit.log.

86

Ну, вы можете запускать lsof несколько раз, и если вам повезет, преступник будет держать файл открытым достаточно долго, чтобы он мог его показать. Т.е .:

$ lsof -r1 /path/to/file

или для многих файлов

$ lsof -r1 /path/to/folder/*

Это перечислит весь доступ к данному пути в определенный момент времени, один раз в секунду. Это включает в себя список PID процесса, обращающегося к файлу.

Если это не работает, то есть файл открывается и закрывается очень быстро, что часто бывает, я считаю, что вам нужно искать более сложные инструменты. Может быть loggedfs может быть что-то?

Hackland
Если раз в секунду lsof не сработает, вы, конечно, можете взломать цикл while, который запускает lsof несколько раз с максимальной скоростью. Подобно:

$ while true; do lsof /paht/to/file; done;

Не красиво, но кто знает, может просто сделать это.

11
0scar

Вы можете использовать lsof для этого:

$ lsof /tmp/file
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
less      4737 wena    4r   REG    8,6    90700 1643536 /tmp/file

В нем говорится, что процесс с именем less сохраняет файл "/ tmp/file" открытым.

NOTE : Странно, это не сработает, если я использую geany или nano. С нетерпением жду лучших предложений.

1
tshepang

Вы можете использовать ls и ​​grep, чтобы узнать файлы, используемые Chrome

$ ls -l /proc/*/fd | grep "chrome"
lrwx------ 1 ba abc 64 Jul 16 22:19 104 -> /home/abc/.config/google-chrome/Default/Cookies
lr-x------ 1 abc abc 64 Jul 16 22:19 113 -> /opt/google/chrome/nacl_irt_x86_64.nexe
lrwx------ 1 abc abc 64 Jul 16 22:19 121 -> /home/abc/.cache/google-chrome/Default/Cache/data_0
lrwx------ 1 abc abc 64 Jul 16 22:19 122 -> /home/abc/.cache/google-chrome/Default/Cache/data_1
lrwx------ 1 abc abc 64 Jul 16 22:19 123 -> /home/abc/.cache/google-chrome/Default/Cache/data_2
lr-x------ 1 abc abc 64 Jul 16 22:19 125 -> /home/abc/.config/google-chrome/Dictionaries/en-US-3-0.bdic

Другой способ - использовать lsof и ​​grep

$ lsof | grep "chrome"
chrome     2204       abc  cwd       DIR                8,5     4096 1441794 /home/abc
chrome     2204       abc  rtd       DIR                8,5     4096       2 /
chrome     2204       abc  txt       REG                8,5 87345336 5111885 /opt/google/chrome/chrome
chrome     2204       abc  mem       REG                8,5  4202496 1443927 /home/abc/.cache/google-chrome/Default/Media Cache/data_3
chrome     2204       abc  mem       REG                8,5  1056768 1443926 /home/abc/.cache/google-chrome/Default/Media Cache/data_2
chrome     2204       abc  mem       REG                8,5   270336 1443925 /home/abc/.cache/google-chrome/Default/Media Cache/data_1
chrome     2204       abc  mem       REG                8,5    45056 1443924 /home/abc/.cache/google-chrome/Default/Media Cache/data_0
0
SRINIVAS KATLA
lsof |grep (filename)

Это покажет вам процесс, который в настоящее время использует файл.

0
Matthew