Как определить, какие файлы были созданы приложением?

Я хочу узнать, какие файлы создала или изменила приложение.

В старые времена это было легко. cc foo.c создал a.out , cc -o foo foo.c создал foo, cc -c foo.x создал cc -c foo.x Теперь приложения создают файлы в /var , in /tmp , в некотором точечном каталоге в вашей домашней папке …

Наконец, у меня на компьютере больше 1,6 миллиона файлов, поэтому я не могу просто искать файлы.

Так есть способ узнать. Предполагая, что вы хотите знать перед запуском приложения.

PS

Похоже, писать небольшую программу (надеюсь), использующую ptrace для захвата вызовов для записи, приближается. Мне нужно было бы определить имя файла, заданное дескриптором, что я могу сделать. Но прежде чем я смогу это сделать, я должен выяснить, связан ли дескриптор с «реальным файлом» или с артефактом системы, например сокетом.

Вы можете запускать strace в приложении для отслеживания всех системных вызовов. Например, strace -e open myApplication будет записывать каждый вызов open() и, следовательно, все файлы, созданные этим приложением, потому что open() также используется для создания новых файлов. Это может пропустить некоторые особые случаи, когда файлы перемещаются.

Ваша система управления пакетами должна сообщить вам, является ли какой-либо файл «принадлежащим» пакетом (и который). Руководства для команд говорят вам, какие файлы они используют, и должны указывать, какие временные файлы они используют (должны идти в /var/tmp , но часто используется /tmp ). В вашем дистрибутиве должен быть какой-то обзор файловой системы, рассказывающий вам, куда идти.

Как обычный пользователь, вы не можете создавать файлы вне своего домашнего каталога (за исключением нескольких исключений, таких как /var/tmp и /tmp ), и программ, которые обычный пользователь может запускать, которые будут создавать файлы за пределами дом очень далеко между ними (некоторые игры, записывающие самые высокие баллы, – единственный пример, который приходит на ум). Это намеренно и тщательно соблюдалось, Unix (и по наследству Linux) были задуманы как многопользовательские системы (и регулярно используются как таковые), не могут позволить обычным пользователям топать файлы друг друга (или системы).