Rechercher les fichiers non installés par le gestionnaire de packages RPM

9

Existe-t-il un moyen de découvrir tous les fichiers d'un système donné qui n'ont pas été installés via RPM? Je comprends que je peux le forcer moi-même en utilisant quelque chose comme rpmquery -fdans un script qui parcourt tous les fichiers du système de fichiers, mais je me demandais s'il existe un moyen standard de le faire pour les systèmes basés sur RPM (en particulier Fedora, que j'utilise à maison). Depuis cela pour Fedora, il est bon d'utiliser yumou dnfde comprendre cela.

S'il n'y a pas de moyen standard de le faire, quelqu'un connaît-il des scripts préexistants pour le faire? Je ne veux pas réinventer la roue si je n'en ai pas besoin.

PS Il y a une autre question similaire à celle-ci , mais elle concerne Gentoo et Portage, donc elle n'est pas totalement pertinente.

eestrada
la source
Par curiosité, quel serait le cas d'utilisation réel?
doktor5000
1
@ doktor5000 J'ai un ordinateur de bureau personnel auquel j'ai ajouté une bonne quantité de logiciels tiers au cours des deux dernières années. Au lieu d'essayer de retrouver manuellement tous les fichiers que j'ai installés en dehors de rpm, il serait bien d'obtenir une liste de ces fichiers afin que je sache quoi copier manuellement, réinstaller lorsque je mets à jour mon système ou simplement ignorer. J'ai de la malchance lorsque j'essaie de mettre à niveau sur place Fedora, j'ai donc tendance à réinstaller totalement frais.
eestrada
Eh bien, il serait peut-être plus facile de vous limiter d'abord aux packages rpm qui ne sont pas fournis avec les référentiels de base. En outre, d'autres logiciels sont généralement installés dans / usr / local par défaut ou dans / opt, ce qui devrait être assez facile à vérifier car il n'est pas utilisé par les packages de distribution normaux. Pour les chemins standard comme / usr / bin, / usr / share ou / usr / lib et similaires, vous auriez probablement besoin de recourir à l'une des méthodes de scriptlet liées dans ma réponse.
doktor5000

Réponses:

5

un peu tard pour la fête, mais j'espère que quelqu'un trouvera cela utile:

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

Cette commande parcourt rpm -qfle système de fichiers et s'exécute dessus. rpm -qfimprime le package correspondant pour un fichier, et heureusement a une valeur de retour de 0 s'il en trouve un et 1 sinon.

Si vous êtes courageux, vous pouvez lier la sortie à | xargs rm -f, mais personnellement, je ne serais pas si courageux. Il s'avère qu'il y a beaucoup de choses dans / usr qui n'appartiennent vraiment à rien.

akors
la source
3

Pour autant que je sache, cela n'est pas possible avec une sorte de commande dédiée, uniquement via un peu de script. TL; DR - voir les liens en bas. Et pour les systèmes basés sur rpm ou autres gestionnaires de packages binaires, cela n'a pas beaucoup de sens. De tels gestionnaires de paquets sont généralement des machines basées sur l'état destinées à garder une trace des choses qu'ils installent eux-mêmes, et à ne pas savoir tout ce que les utilisateurs glissent sur le système "derrière le dos" du gestionnaire de paquets.

Où traceriez-vous la ligne pour les fichiers qui n'appartiennent pas aux fichiers rpm? Qu'en est-il des fichiers temporaires (think / tmp et / var / tmp) ou des caches (think / var / cache) ou des fichiers créés par un utilisateur (/ home ou / srv ou d'autres points de montage définis par l'utilisateur).

Pour les distributions basées sur la source, il pourrait être judicieux d'offrir cette fonctionnalité si le cas d'utilisation les limite aux répertoires FHS utilisés par les packages "système" comme / usr, / bin, / lib et similaires, par exemple par exemple / usr / local ou / optez pour un logiciel tiers.


Consultez les questions similaires suivantes pour que les scriptlets fassent ce que vous avez demandé:

doktor5000
la source
3

Par /superuser/555918/how-do-i-list-all-the-files-not-OWN-by-any-package-in-a-rpm-based-system , la commande suivante est une base solide pour ce dont vous avez besoin:

comm -13 <(rpm -qla | sort) <(find / -type f | sort)

Personnaliser plus en filtrant la commande find aux répertoires d'intérêt (spécifier la liste des répertoires au lieu de /(par exemple /{usr,bin}) ou à l' exclusion des dossiers comme /proc, /dev, /homeet /tmp.

deterb
la source
Plus exhaustivement: comm -13 <(rpm -qla | sort | uniq) <(find / -xdev \( -type f -o -type d -o -type l \) | sort) cela répertorie ( -l) les fichiers dans tous les packages installés ( rpm -qa) et les trie puis supprime les doublons (car certains répertoires sont fournis par plusieurs packages). Il trouve également tous les fichiers sur la partition racine (sans aller dans d'autres systèmes de fichiers - -xdev) et retourne tous les fichiers, répertoires et liens symboliques ( \( -type f -o -type d -o -type l \)). Il utilise ensuite commpour comparer, en ignorant les entrées uniquement dans la liste rpm ( -1) et les entrées dans les deux ( -3).
IBBoard
Notez également que vous devrez peut-être utiliser sudosur la recherche pour pouvoir trouver des fichiers (en particulier sous / etc) auxquels seul root peut accéder.
IBBoard