4.3. Построение списка добавленных файлов для упрощения удаления программ

Проблема

Требуется узнать, какие файлы устанавливаются в системе при построении программы по исходным текстам. Это позволит вам найти и удалить все перечисленные файлы, когда надобность в них отпадёт. Некоторые авторы программ предусмотрительно включают режим make uninstall для «чистого» удаления программы, но многие этого не делают.

Решение

Стандартными средствами Linux сгенерируйте список всех файлов в системе перед установкой. Затем сгенерируйте аналогичный список после установки и сравните два списка командой diff. В результате вы получите список установленных файлов. В следующем примере используется программа JOE (Joe's Own Editor):

# find / | grep -v -e /proc/ -e /tmp/ -e /dev/ > joe-preinstall.list

Откомпилируйте и установите новую программу, затем сгенерируйте список файлов после установки:

# find / | grep -v -e /proc/ -e /tmp/ -e /dev/ > joe-postinstall.list

Затем создайте список установленных файлов, сравнив два списка командой diff:

$ diff joe-preinstall.list joe-postinstall.list > joe-installed.list

Комментарий

Совместное использование find и grep позволяет исключить каталоги, не входящие в конечный список. Ключ grep -v включает вывод без совпадений. Параметр -e означает «исключить следующий каталог».

Мы исключаем каталоги /proc и /tmp, потому что они содержат временные данные и постоянно меняются. Файлы в каталоге /dev находятся под управлением системы, поэтому их тоже можно исключить. Исключение каталогов также является важной мерой безопасности — при ручном удалении программ по списку diff содержимое каталогов /proc, /tmp и /dev ни в коем случае не должно изменяться.

См. также

grep(1), find(1), diff(1).