Suchen Sie nach Dateien, die nicht vom RPM-Paketmanager installiert wurden

Suchen Sie nach Dateien, die nicht vom RPM-Paketmanager installiert wurden

Gibt es eine Möglichkeit, das herauszufindenalledie Dateien auf einem bestimmten System, diewaren nichtüber RPM installiert? Ich verstehe, dass ich das selbst mit roher Gewalt durchsetzen kann, indem ich so etwas wie rpmquery -fein Skript verwende, das alle Dateien im Dateisystem durchläuft, aber ich frage mich, ob es eine Standardmethode dafür für RPM-basierte Systeme gibt (insbesondere Fedora, das ich zu Hause verwende). Da dies für Fedora ist, ist es in Ordnung, dies zu verwenden yumoder dnfherauszufinden.

Wenn es dafür keine Standardmethode gibt, kennt jemand bereits vorhandene Skripte dafür? Ich möchte das Rad nicht neu erfinden, wenn es nicht sein muss.

PSEs gibt noch eine ähnliche Frage, aber es geht um Gentoo und Portage, also ist es nicht ganz relevant.

Antwort1

ein bisschen spät zur Party, aber hoffentlich findet jemand das nützlich:

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

Dieser Befehl durchsucht das Dateisystem und wird rpm -qfdarauf ausgeführt. rpm -qfEr druckt das entsprechende Paket für eine Datei und hat glücklicherweise einen Rückgabewert von 0, wenn er eines findet, und andernfalls von 1.

Wenn Sie mutig sind, können Sie die Ausgabe an binden | xargs rm -f, aber ich persönlich wäre nicht so mutig. Es stellt sich heraus, dass darin eine Menge Zeug enthalten ist, /usrdas eigentlich niemandem gehört.

Antwort2

Prohttps://superuser.com/questions/555918/wie-liste-ich-alle-dateien-auf-die-kein-paket-in-einem-rpm-basierten-system-gehört-auf, der folgende Befehl ist eine solide Grundlage für das, was Sie brauchen:

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

Nehmen Sie weitere Anpassungen vor, indem Sie den Suchbefehl auf die gewünschten Verzeichnisse filtern (indem Sie entweder die Liste der Verzeichnisse anstelle von angeben /(z. B. /{usr,bin}) oder Ordner wie /proc, /dev, /home, und ausschließen) /tmp.

Antwort3

Soweit mir bekannt ist, ist dies nicht mit einem speziellen Befehl möglich, sondern nur über ein kleines Skript.TL;DR – siehe die Links unten.Und für RPM-basierte Systeme oder andere binärbasierte Paketmanager macht das nicht viel Sinn. Solche Paketmanager sind normalerweise zustandsbasierte Maschinen, die dazu gedacht sind, den Überblick über die Dinge zu behalten, die sie selbst installieren, und nicht alles zu wissen, was Benutzer „hinter dem Rücken“ des Paketmanagers in das System schmuggeln.

Wo würden Sie die Grenze für Dateien ziehen, die nicht im Besitz von RPM-Dateien sind? Was ist mit temporären Dateien (denken Sie an /tmp und /var/tmp) oder Caches (denken Sie an /var/cache) oder von einem Benutzer erstellten Dateien ( /home oder /srv oder andere benutzerdefinierte Einhängepunkte).

Für Quellcode-basierte Distributionen kann es sinnvoll sein, diese Funktionalität anzubieten, wenn der Anwendungsfall sie beschränkt aufFHSVerzeichnisse, die von „System“-Paketen verwendet werden, wie /usr, /bin, /lib und ähnliche, im Gegensatz beispielsweise zu /usr/local oder /opt für Software von Drittanbietern.


Sehen Sie sich die folgenden ähnlichen Fragen an, um herauszufinden, welche Skriptlets das tun, wonach Sie gefragt haben:

verwandte Informationen