Gibt es eine Möglichkeit, alle Dateien auf einem bestimmten System herauszufinden , die nicht über RPM installiert wurden? Ich verstehe, dass ich dies selbst brutal erzwingen kann, indem ich so etwas wie rpmquery -f
ein Skript verwende, das alle Dateien im Dateisystem durchläuft. Ich habe mich jedoch gefragt, ob es eine Standardmethode für RPM-basierte Systeme gibt (insbesondere Fedora, die ich bei verwende Zuhause). Da dies für Fedora ist, ist es in Ordnung, dies zu verwenden yum
oder dnf
herauszufinden.
Wenn es keine Standardmethode gibt, kennt jemand einige bereits vorhandene Skripte, um dies zu tun? Ich möchte das Rad nicht neu erfinden, wenn ich es nicht muss.
PS Es gibt eine ähnliche Frage , aber es geht um Gentoo und Portage, daher ist sie nicht ganz relevant.
Antworten:
ein bisschen spät zur Party, aber hoffentlich findet jemand dies nützlich:
Dieser Befehl durchsucht das Dateisystem und wird
rpm -qf
darauf ausgeführt.rpm -qf
druckt das entsprechende Paket für eine Datei und hat glücklicherweise den Rückgabewert 0, wenn es eins findet, und andernfalls 1.Wenn Sie mutig sind, können Sie die Ausgabe verknüpfen
| xargs rm -f
, aber ich persönlich wäre nicht so mutig. Es stellt sich heraus, dass es in / usr eine Menge Dinge gibt, die eigentlich nichts besitzen.quelle
Soweit mir bekannt ist, ist dies mit einem dedizierten Befehl nicht 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 ist dies nicht sehr sinnvoll. Solche Paketmanager sind normalerweise zustandsbasierte Maschinen, die den Überblick über die Dinge behalten sollen, die sie selbst installieren, und nicht alles wissen sollen, was Benutzer "hinter dem Rücken" des Paketmanagers auf das System schleichen.
Wo würden Sie die Grenze für Dateien ziehen, die nicht im Besitz von RPM-Dateien sind? Was ist mit temporären Dateien (think / tmp und / var / tmp) oder Caches (think / var / cache) oder Dateien, die von einem Benutzer (/ home oder / srv oder anderen benutzerdefinierten Mountpunkten) erstellt wurden?
Für quellenbasierte Distributionen kann es sinnvoll sein, diese Funktionalität anzubieten, wenn der Anwendungsfall sie darauf beschränkt FHS- Verzeichnisse beschränkt, die von "System" -Paketen wie / usr, / bin, / lib und ähnlichen verwendet werden, im Gegensatz zu z. B. / usr / local oder / Entscheiden Sie sich für Software von Drittanbietern.
In den folgenden ähnlichen Fragen finden Sie Skriptlets, mit denen Sie das tun können, wonach Sie gefragt haben:
quelle
Per /superuser/555918/how-do-i-list-all-the-files-not-owners-by-any-package-in-a-rpm-based-system wird der folgende Befehl ausgeführt ist eine solide Basis für das, was Sie brauchen:
comm -13 <(rpm -qla | sort) <(find / -type f | sort)
Fertigen Sie weiter durch Filtern der Befehl find auf Verzeichnisse von Interesse (entweder unter Angabe der Liste der Verzeichnisse statt
/
(zB/{usr,bin}
) oder Ausschließen von Ordnern wie/proc
,/dev
,/home
, und/tmp
.quelle
comm -13 <(rpm -qla | sort | uniq) <(find / -xdev \( -type f -o -type d -o -type l \) | sort)
Dadurch werden-l
die Dateien in allen installierten Paketen aufgelistet ( )rpm -qa
und sortiert. Anschließend werden Duplikate entfernt (da einige Verzeichnisse von mehreren Paketen bereitgestellt werden). Es findet auch alle Dateien auf der Root-Partition (ohne in andere Dateisysteme zu wechseln --xdev
) und gibt alle Dateien, Verzeichnisse und Symlinks (\( -type f -o -type d -o -type l \)
) zurück. Anschließend wirdcomm
der Vergleich durchgeführt, wobei nur die Einträge in der RPM-Liste (-1
) und die Einträge in beiden (-3
) ignoriert werden .sudo
bei der Suche verwenden müssen, damit Sie Dateien (insbesondere unter / etc) finden können, auf die nur root zugreifen kann.