Есть ли способ узнать?всефайлы в данной системе, которыене былиустановлен через RPM? Я понимаю, что я могу сделать это самостоятельно, используя что-то вроде rpmquery -f
скрипта, который проходит по всем файлам в файловой системе, однако мне было интересно, есть ли какой-то стандартный способ сделать это для систем на основе RPM (в частности, Fedora, которую я использую дома). Поскольку это для Fedora, то вполне можно использовать yum
или dnf
разобраться с этим.
Если нет стандартного способа сделать это, кто-нибудь знает какие-нибудь уже существующие скрипты, чтобы сделать это? Я не хочу изобретать велосипед, если мне это не нужно.
ПСЕсть еще один вопрос, похожий на этот, но речь идет о Gentoo и Portage, так что это не совсем актуально.
решение1
немного опоздал, но надеюсь, кому-то это будет полезно:
find /usr/ -exec /bin/sh -c 'rpm -qf -- "$1" >/dev/null 2>&1 || echo "$1"' find_sh {} \;
Эта команда сканирует файловую систему и запускается rpm -qf
в ней. rpm -qf
Выводит соответствующий пакет для файла и, к счастью, возвращает значение 0, если файл найден, и 1 в противном случае.
Если вы смелы, вы можете привязать вывод к | xargs rm -f
, но лично я бы не был таким смелым. Оказывается, там много всего, /usr
что на самом деле никому не принадлежит.
решение2
Заhttps://superuser.com/questions/555918/how-do-i-list-all-the-files-not-owned-any-package-in-a-rpm-based-system, следующая команда является надежной основой для того, что вам нужно:
comm -13 <(rpm -qla | sort) <(find / -type f | sort)
Выполните дополнительную настройку, отфильтровав команду find по интересующим вас каталогам (либо указав список каталогов вместо /
(например, /{usr,bin}
), либо исключив такие папки, как /proc
, /dev
, /home
, и /tmp
.
решение3
Насколько мне известно, это невозможно сделать с помощью какой-то специальной команды, только с помощью небольшого скрипта.TL;DR - смотрите ссылки внизу.А для систем на основе rpm или других менеджеров пакетов на основе двоичных файлов это не имеет особого смысла. Такие менеджеры пакетов обычно являются машинами на основе состояний, предназначенными для отслеживания того, что они устанавливают сами, а не для того, чтобы знать все, что пользователи протаскивают в систему «за спиной» менеджера пакетов.
Где бы вы провели границу для файлов, которые не принадлежат файлам RPM? А как насчет временных файлов (например, /tmp и /var/tmp) или кэшей (например, /var/cache) или файлов, созданных пользователем (/home или /srv или другие определяемые пользователем точки монтирования).
Для дистрибутивов на основе исходного кода может иметь смысл предлагать эту функциональность, если вариант использования ограничивает ихФХСкаталоги, используемые «системными» пакетами, такими как /usr, /bin, /lib и подобными, в отличие, например, от /usr/local или /opt для стороннего программного обеспечения.
Посмотрите следующие похожие вопросы для скриптлетов, которые сделают то, о чем вы просили: