Existe alguma maneira de descobrir todos os arquivos em um determinado sistema que não foram instalados via RPM? Eu entendo que eu posso fazer isso com força bruta usando algo como rpmquery -f
em um script que percorre todos os arquivos no sistema de arquivos, no entanto, eu queria saber se existe alguma maneira padrão de fazer isso para sistemas baseados em RPM (especificamente o Fedora, que eu uso no casa). Já que isso é para o Fedora, é bom usar yum
ou dnf
descobrir isso.
Se não houver uma maneira padrão de fazer isso, alguém sabe de alguns scripts pré-existentes para fazer isso? Não quero reinventar a roda se não precisar.
PS Há outra pergunta semelhante a essa , mas é sobre o Gentoo e o Portage, portanto não é totalmente relevante.
Respostas:
um pouco atrasado para a festa, mas espero que alguém ache isso útil:
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 0 se encontrar um e 1 caso contrário.Se você é corajoso, pode vincular a saída
| xargs rm -f
, mas pessoalmente eu não seria tão corajoso. Acontece que há muitas coisas em / usr que realmente não são de propriedade de nada.fonte
Tanto quanto sei, isso não é possível com algum tipo de comando dedicado, apenas através de um pouco de script. TL; DR - veja os links na parte inferior. E para sistemas baseados em rpm ou outros gerenciadores de pacotes binários, isso não faz muito sentido. Esses gerenciadores de pacotes geralmente são máquinas baseadas no estado, destinadas a acompanhar o que eles instalam e a não saber tudo o que os usuários furtam no sistema "atrás das costas" do gerenciador de pacotes.
Onde você desenharia a linha para arquivos que não pertencem a arquivos rpm? E os arquivos temporários (think / tmp e / var / tmp) ou caches (think / var / cache) ou arquivos criados por um usuário (/ home ou / srv ou outros pontos de montagem definidos pelo usuário).
Para distribuições baseadas na fonte, pode fazer sentido oferecer essa funcionalidade se o caso de uso as limitar aos diretórios do FHS usados pelos pacotes "system" como / usr, / bin, / lib e similares, em oposição a / usr / local ou / optar por software de terceiros.
Consulte as seguintes perguntas semelhantes sobre os scriptlets para fazer o que você pediu:
fonte
Por /superuser/555918/how-do-i-list-all-the-files-not-owned-by-any-package-in-a-rpm-based-system , o seguinte comando é uma linha de base sólida para o que você precisa:
comm -13 <(rpm -qla | sort) <(find / -type f | sort)
Personalizar ainda mais, filtrando o comando Localizar para diretórios de interesse (ou especificar a lista de diretórios em vez de
/
(por exemplo/{usr,bin}
) ou excluindo pastas como/proc
,/dev
,/home
, e/tmp
.fonte
comm -13 <(rpm -qla | sort | uniq) <(find / -xdev \( -type f -o -type d -o -type l \) | sort)
Isso lista (-l
) os arquivos em todos os pacotes instalados (rpm -qa
) e os classifica e remove duplicatas (porque alguns diretórios são fornecidos por vários pacotes). Ele também encontra todos os arquivos na partição raiz (sem entrar em outros sistemas de arquivos --xdev
) e retorna todos os arquivos, diretórios e links simbólicos (\( -type f -o -type d -o -type l \)
). Em seguida, ele é usadocomm
para comparar, ignorando as entradas apenas na lista de rpm (-1
) e as entradas em ambas (-3
).sudo
o find para encontrar arquivos (especialmente em / etc) que somente o root pode acessar.