Localizar arquivos não instalados pelo gerenciador de pacotes RPM

6

Existe alguma maneira de descobrir todos os arquivos em um determinado sistema que não foram instalados via RPM? Eu entendo que eu posso forçar isso usando algo como rpmquery -f em um script que percorre todos os arquivos no sistema de arquivos, no entanto eu estava imaginando se existe alguma maneira padrão de fazer isso para sistemas baseados em RPM (especificamente Fedora, que Eu uso em casa). Desde que isto para o Fedora, é bom usar yum ou dnf para descobrir isso.

Se não houver uma maneira padrão de fazer isso, alguém sabe de alguns scripts pré-existentes para fazer isso? Eu não quero reinventar a roda se eu não precisar.

P.S. Há outra pergunta semelhante a esta , mas é sobre o Gentoo e Portage, por isso não é totalmente relevante.

    
por eestrada 16.02.2016 / 03:36

3 respostas

3

um pouco atrasado para a festa, mas esperamos que alguém ache isso útil:

find /usr/ -exec /bin/sh -c "rpm -qf {} &> /dev/null || echo {}" \;

Este comando rastreia o sistema de arquivos e executa rpm -qf nele. rpm -qf imprime o pacote correspondente para um arquivo e, por sorte, tem um valor de retorno de 0 se encontrar um e 1 caso contrário.

Se você for corajoso, você pode amarrar a saída para | xargs rm -f , mas pessoalmente eu não seria tão corajoso. Acontece que há muitas coisas em / usr que não são realmente possuídas por nada.

    
por 01.12.2017 / 12:24
4

Tanto quanto eu saiba, 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ário isso não faz muito sentido. Esses gerenciadores de pacotes geralmente são máquinas baseadas em estado que visam monitorar as coisas que elas instalam, e não saber tudo o que os usuários entram no sistema "atrás das costas" do gerenciador de pacotes.

Onde você desenharia a linha para arquivos que não são de propriedade de arquivos rpm? E sobre 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 origem, pode ser útil oferecer essa funcionalidade se o caso de uso as limitar aos diretórios FHS usados por pacotes "system" como / usr, / bin, / lib e similares, ao contrário de eg / usr / local ou / opt para software de terceiros.

Veja as seguintes perguntas semelhantes para que os scriptlets façam o que você pediu:

por 16.02.2016 / 21:49
1

Por > , o comando a seguir é 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 (especificando a lista de diretórios em vez de / (por exemplo, /{usr,bin} ) ou excluindo pastas como /proc , /dev , /home e /tmp .

    
por 13.07.2017 / 21:53

Tags