как собрать все файлы, которые открываются приложением linux

861
Sergey

Я хочу собрать список всех файлов, которые открываются приложением (в моем случае это как / w bulder).

'strace -f' терпит неудачу, потому что он смешивает непрерывные открытия из разных вилок, например:

13078 open("file1", O_RDONLY <unfinished ...> 13077 open("file2", O_RDONLY|O_LARGEFILE) = 3 13078 <... open resumed> ) = 3 

и я не могу отследить, если «file1» действительно открыт или не удалось с E_NOENT.

'strace -ff' также завершается ошибкой, поскольку создает слишком много файлов (приложение создает действительно большое количество подпроцессов) и создает программу. $, программу. $ и т. д. после приблизительно 32 000 разветвлений он снова создает и переписывает программу. $, программа. $ . Я могу гуглить, как увеличить нумерацию процессов, но в любом случае мне не нужна эта масса файлов.

Итак, вопрос в том, могу ли я решить эту проблему быстро и грязно с помощью strace или другого инструмента?

2

1 ответ на вопрос

1
Horn OK Please

strace -f -eopen /path/to/cmd args ... 2>&1 | gzip > output.log.gz


Если вы ищете конкретный процесс, а не всех детей, то:

gunzip output.log.gz | head -n500 | less

Читайте файл, пока не найдете идентификатор процесса (pid) конкретной программы, которую вы ищете, а затем используйте grep.


Если вы ищете конкретные результаты (например, отсутствие ENOENT), вы можете получить их:

zgrep --invert-match ENOENT output.log.gz | less

Это не работает Как я уже упоминал, проблема в том, что зарегистрированный системный вызов (например, open ()) и его результат (= 1 или = -1, как ENOENT) попадают в журнал в разных строках, смешанных с другими системными вызовами, поэтому я не могу выполнить grep fail open () для всех несуществующих файлов, с любым регулярным выражением, например, 'open. * ENOENT'. На диске достаточно места, поэтому в любом случае gzipping не нужен. Sergey 10 лет назад 0
Все, что у меня есть с 'strace -f' и 'grep', это большая часть бесполезных строк, таких как `open (" file1 ", O_RDONLY `, поэтому я не могу автоматически определить, действительно ли он был открыт или нет, поэтому я не могу автоматически получить список всех открытых файлов или список неудачных попыток открытия. Бревно очень большое, поэтому ручная работа недопустима. Sergey 10 лет назад 0

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