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

Программа, которую я установил разбрызганные файлы и каталоги в разных местах. Я должен вручную удалить эти файлы и каталоги. Я знаю, что вы можете удалить файлы и каталоги, созданные пользователем, как это:

# find /home -user student -exec rm -rf {} \;

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

Как сказал в своем ответе Ханс-Мартин Моснер , не хранится информация, которая идентифицирует, какая программа создала или изменила конкретный файл или каталог.

Однако вы можете использовать find чтобы найти вещи, которые программа, возможно, создала или изменила. Вы можете сделать это, сначала создав «файл метки времени», а затем запустив программу. После запуска find может быть предложено найти все измененные файлы на основе их временных меток относительно файла временных меток.

  1. Создать файл метки времени:

     touch stamp 
  2. Запустить программу.

  3. Запустите find чтобы найти вещи, время модификации которых новее, чем у файла метки времени:

     find / -newer stamp 

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

     find / -user someuser -newer stamp 

Обратите внимание, что выполнение команды find может занять значительное время, если вы не сможете сузить / перейти к конкретному подкаталогу, где могли произойти изменения. Также обратите внимание, что любое имя пути, которое производит вышеупомянутая команда find возможно, не было затронуто определенной программой . С момента создания файла stamp могло выполняться любое количество других программ, а также могли создавать или изменять файлы.

Если вы знаете, прежде чем запускать программу, вы можете пометить set-gid программы в специальной группе.

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

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

Если вы заранее знаете, что хотите следить за тем, что программа делает интерфейс ядра, такой как sysdig или SystemTap может записать контрольный журнал (или, возможно, strace , но это будет медленным и потребует идеальной оболочки для программы, чтобы быть прослеженным и, надеюсь, ни один sudo никогда не будет запущен …). Вам также необходимо учитывать, что происходит, когда какая-либо другая программа создает выходные данные в рамках рассматриваемой программы: должен ли также отслеживаться какой-либо дочерний процесс?

 perl -e 'qx(echo subshell-io > foo)' 

Журнал аудита каждого файла, к которому обращается каждая программа (плюс другие метаданные, такие как пользователь и группа (ы), родительский pid и т. Д.), Безусловно, будет возможен. Однако это может быть дорогим в настройке, дорогим в создании и дорогим в обслуживании. Вероятно, потребуются некоторые средства фильтрации записей, чтобы исключить (некоторые, но, может быть, не все) записи в каталог /tmp , чтобы, возможно, свернуть несколько passwd.tmp / rename("passwd.tmp","passwd") в один логический операции, а также как вы справляетесь со случаем, когда интересующая вас программа изменяет, скажем, /etc/passwd (среди многих других общих файлов ОС), которые вы, вероятно, затем не хотите удалять вслепую при очистке после программы … или как вы справляетесь с делегированным вводом / выводом, когда ваша программа использует dbus, а затем какой-то другой процесс из-за некоторого случайного сообщения не-ввода-вывода через dbus действительно генерирует ввод-вывод в другом месте из-за вашей программы …