Existe alguma maneira de descobrirtodosos arquivos em um determinado sistema quenão eraminstalado via RPM? Eu entendo que posso fazer isso com força bruta usando algo como rpmquery -f
um script que percorre todos os arquivos no sistema de arquivos, no entanto, gostaria de saber se existe alguma maneira padrão de fazer isso para sistemas baseados em RPM (especificamente o Fedora, que eu uso em lar). Já que isso é para o Fedora, não há problema em usar yum
ou dnf
descobrir isso.
Se não houver uma maneira padrão de fazer isso, alguém conhece alguns scripts pré-existentes para fazer isso? Não quero reinventar a roda se não for necessário.
PSHá outra questão semelhante a esta, mas é sobre Gentoo e Portage, então não é totalmente relevante.
Responder1
um pouco atrasado para a festa, mas espero que alguém ache isso útil:
find /usr/ -exec /bin/sh -c 'rpm -qf -- "$1" >/dev/null 2>&1 || echo "$1"' find_sh {} \;
Este comando rastreia o sistema de arquivos e é executado rpm -qf
nele. rpm -qf
imprime o pacote correspondente para um arquivo e, felizmente, tem um valor de retorno de 0 se encontrar um e 1 caso contrário.
Se você for corajoso, poderá vincular a saída a | xargs rm -f
, mas pessoalmente eu não seria tão corajoso. Acontece que há muitas coisas /usr
que não pertencem a nada.
Responder2
Porhttps://superuser.com/questions/555918/how-do-i-list-all-the-files-not-owned-by-any-package-in-a-rpm-based-system, o comando a seguir é uma linha de base sólida para o que você precisa:
comm -13 <(rpm -qla | sort) <(find / -type f | sort)
Personalize ainda mais filtrando o comando find para diretórios de interesse (especificando a lista de diretórios em vez de /
(por exemplo /{usr,bin}
) ou excluindo pastas como /proc
, /dev
, /home
e /tmp
.
Responder3
Pelo que sei, isso não é possível com algum tipo de comando dedicado, apenas através de um pequeno script.TL;DR - veja os links na parte inferior.E para sistemas baseados em rpm ou outros gerenciadores de pacotes baseados em binários isso não faz muito sentido. Esses gerenciadores de pacotes geralmente são máquinas baseadas em estado destinadas a monitorar o que eles próprios instalam, e não a saber tudo o que os usuários infiltram no sistema "pelas costas" do gerenciador de pacotes.
Onde você traçaria o limite para arquivos que não pertencem a arquivos rpm? E quanto a arquivos temporários (pense em /tmp e /var/tmp ) ou caches (pense em /var/cache ) ou arquivos criados por um usuário ( /home ou /srv ou outros pontos de montagem definidos pelo usuário ).
Para distros baseadas em código-fonte, pode fazer sentido oferecer essa funcionalidade se o caso de uso as limitar aESFdiretórios usados por pacotes de "sistema" como /usr, /bin, /lib e similares, em oposição a, por exemplo, /usr/local ou /opt para software de terceiros.
Veja as seguintes perguntas semelhantes para scriptlets fazerem o que você pediu: