
Я установил демон на систему kubuntu, который пытается найти определенный файл конфигурации в неизвестном месте. Буквально заполнил файловую систему символическими ссылками на файл конфигурации, но он все равно жалуется "файл не найден".
Можно ли написать команду, которая будет регистрировать все попытки доступа к несуществующим файлам на жестком диске, чтобы я мог определить, где программа пытается найти свой файл?
решение1
Вы можете использовать strace для процесса, если знаете его PID:
strace -f -p 123 | tee testoutput.txt
(предполагая, что pid равен 123). "-f" означает "follow forks" (упрощенно), "-p" означает "PID следует". man strace
Подробнее см. здесь. Короче говоря, strace отслеживает все действия, которые пытается выполнить процесс, например, открытие файлов, чтение из них или запись в них. Лучше всего перенаправить вывод в файл для анализа — в моем примере это достигается путем передачи его в tee, который разделяет вывод для отображения на консоли, а также для записи в указанный файл.
В выводе найдите что-то вроде
read(51, 0x7f287a7b36f0, 4096) = -1 EAGAIN (Resource temporarily unavailable)
(Да, это не та ошибка, но пока что я ее нашел только одну) — то есть, read
за ней следует что-то в скобках, затем несколько пробелов, за которыми следует «=» и отрицательное число (= ошибка). Думаю, вам следует найти что-то вроде «ENOTFOUND», чтобы указать на отсутствующий файл (точный код ошибки не знаю).