среда, 31 августа 2011 г.

Получение списка файлов, не закрепленных ни за одним из установленных пакетов FreeBSD

При установке любого приложения из портов сохраняется список содержащихся в нем файлов (plist), делается это для того, чтобы пакет впоследствии можно было удалить. Но целому по ряду причин этот механизм не совершенен, поэтому при удалении или обновлении портов остаются не удаленные файлы. На самом деле никакой опасности они не представляют, но возникает вопрос, как их найти.
Для начала нам понадобится набор утилит portuprade, точнее одна утилита pkg_which, которая выполняет поиск по содержимому установленых пакетов и отвечает, какому пакету принадлежит тот или иной файл. Например:
pkg_which nginx
nginx-1.0.4
Если portupgrade не установлен,  то можно использовать pkg_info -W с тем же результатом, однако portupgrade использует базу Berkley DB, поэтому работает быстрее,  чем pkg_info.
А дальше все просто: находим все файлы с помощью find и скармливаем по одному pkg_which с помощью xargs и фильтруем результат с помощью grep. Вот готовая команда:
find /usr/local -type f | xargs -J% pkg_which -v "%" |  fgrep '?'

1 комментарий: