Есть ли способ узнать все файлы в данной системе, которые не были установлены через RPM? Я понимаю, что могу сделать это сам, используя что-то вроде rpmquery -f
скрипта, который перебирает все файлы в файловой системе, однако мне было интересно, есть ли какой-нибудь стандартный способ сделать это для систем на основе RPM (в частности, Fedora, который я использую в дом). Так как это для Fedora, это хорошо использовать yum
или dnf
выяснить это.
Если не существует стандартного способа сделать это, кто-нибудь знает какие-нибудь ранее существующие сценарии для этого? Я не хочу заново изобретать колесо, если мне не нужно.
PS Есть еще один вопрос, похожий на этот , но он касается Gentoo и Portage, поэтому он не совсем актуален.
Ответы:
немного опоздал на вечеринку, но, надеюсь, кто-то найдет это полезным:
Эта команда сканирует файловую систему и запускается
rpm -qf
на ней.rpm -qf
печатает соответствующий пакет для файла, и, к счастью, имеет возвращаемое значение 0, если он находит один и 1 в противном случае.Если вы смелы, вы можете связать вывод
| xargs rm -f
, но лично я не был бы таким смелым. Оказывается, в / usr есть много вещей, которые на самом деле никому не принадлежат.источник
Насколько я знаю, это невозможно с какой-то отдельной командой, только с помощью небольшого сценария. TL; DR - см. Ссылки внизу. А для систем на основе rpm или других двоичных менеджеров пакетов это не имеет особого смысла. Такие менеджеры пакетов, как правило, представляют собой машины на основе состояния, предназначенные для отслеживания того, что они устанавливают сами, и не для того, чтобы знать все, что пользователи крадут в систему «за спиной» менеджера пакетов.
Где бы вы нарисовали линию для файлов, которые не принадлежат файлам rpm? Как насчет временных файлов (think / tmp и / var / tmp) или кэшей (think / var / cache) или файлов, созданных пользователем (/ home или / srv или других пользовательских точек монтирования).
Для исходных дистрибутивов может иметь смысл предложить эту функциональность, если сценарий использования ограничивает их каталогами FHS, используемыми «системными» пакетами, такими как / usr, / bin, / lib и аналогичными, в отличие, например, от / usr / local или / выбрать стороннее программное обеспечение.
Смотрите следующие похожие вопросы для скриптлетов, чтобы сделать то, что вы просили:
источник
В /superuser/555918/how-do-i-list-all-the-files-not-owned-by-any-package-in-a-rpm-based-system следующая команда является твердой основой для того, что вам нужно:
comm -13 <(rpm -qla | sort) <(find / -type f | sort)
Настройка далее путем фильтрации команды поиска в каталогах , представляющих интерес (либо указать список каталогов , вместо того , чтобы
/
(например/{usr,bin}
) или исключая папки , такие как/proc
,/dev
,/home
и/tmp
.источник
comm -13 <(rpm -qla | sort | uniq) <(find / -xdev \( -type f -o -type d -o -type l \) | sort)
Это перечисляет (-l
) файлы во всех установленных пакетах (rpm -qa
) и сортирует их, затем удаляет дубликаты (потому что некоторые каталоги поставляются несколькими пакетами). Он также находит все файлы в корневом разделе (не заходя в другие файловые системы --xdev
) и возвращает все файлы, каталоги и символические ссылки (\( -type f -o -type d -o -type l \)
). Затем он используетcomm
для сравнения, игнорируя записи только в списке rpm (-1
) и записи в обоих (-3
).sudo
в поиске, чтобы вы могли найти файлы (особенно в / etc), к которым имеет доступ только root.