Использование lsof для отслеживания файлов, открытых скриптом, запускаемым из командной строки - PullRequest
0 голосов
/ 23 июня 2018

Я знаю, что могу использовать lsof для отслеживания файлов, открытых при запуске процессов, групп процессов, пользователей и тех, которые открыты в определенных каталогах, среди прочего.Однако мне любопытно посмотреть, могу ли я перехватывать файлы, которые были открыты программой, которая не всегда работает, но запускается только в течение ограниченного периода времени, такой как сценарий bash или программа Ruby.

ДляНапример, представьте, что я могу запустить свои тесты Ruby, выполнив rspec в моем каталоге Rails.Как я могу получить список ВСЕХ файлов, открытых rspec?

Другими словами, как заставить lsof перехватывать открытые файлы из процесса в реальном времени?Визуально он выглядит как lsof rspec, где lsof execs rspec и записывает все открытые файлы.

1 Ответ

0 голосов
/ 23 июня 2018

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

strace -e trace=open,openat grep something M* > /dev/null

Опция -e trace=open,openat сообщает strace, что нас интересуют только эти два системных вызова.,

Я перенаправил вывод с grep на /dev/null, чтобы не загромождать вывод;вы также можете отправить вывод strace в файл, используя опцию * 1013. *

Если у меня есть файлы MANIFEST.in, MODULE_GUIDELINES.md и Makefile в моем локальном каталоге, это можетпроизводить вывод как:

openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3      
openat(AT_FDCWD, "/lib64/libpcre.so.1", O_RDONLY|O_CLOEXEC) = 3   
openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3      
openat(AT_FDCWD, "/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3    
open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 3        
openat(AT_FDCWD, "Makefile", O_RDONLY|O_NOCTTY) = 3               
openat(AT_FDCWD, "MANIFEST.in", O_RDONLY|O_NOCTTY) = 3            
openat(AT_FDCWD, "MODULE_GUIDELINES.md", O_RDONLY|O_NOCTTY) = 3   
+++ exited with 0 +++

Здесь вы можете увидеть как общие библиотеки, открытые при запуске grep, так и файлы, которые были открыты самим grep.

Вы можете прочитатьбольше на странице руководства strace .

...