Antworten:
In /var/lib/dpkg/info
befinden sich .list
Textdateien, in denen alle Dateien aufgelistet sind, die in jedem Paket enthalten sind¹, das über den Paketmanager von Debian installiert wurde.
Wenn Sie feststellen, dass alle Dateien im Dateisystem mit keinem Eintrag übereinstimmen, können Sie Folgendes erreichen:
find / -xdev -type f \( -exec grep -xq "{}" /var/lib/dpkg/info/*.list \; -or -print \)
Dies wird natürlich sehr lange dauern, da das gesamte Dateisystem gescannt wird. Wenn Sie unterschiedliche Partitionen für Systemverzeichnisse verwenden (z. B. /usr
oder /var
), geben Sie diese nach der Initiale an /
.
Warnung: Dies schließt keine Dateien ein, die von Paketskripten erstellt wurden. Zum Beispiel:
/etc/hosts.allow
wird nirgendwo aufgelistet, aber es könnte von dem stammen libwrap0
, der es möglicherweise erstellt hat, wenn diese Datei zum Zeitpunkt der Paketinstallation nicht vorhanden war..pyc
Dateien (kompilierte Python-Bibliotheken), .elc
Dateien (kompilierte Emacs Lisp-Bibliotheken) usw./var/lib/dpkg/info/*.list
- die obige Abfrage müsste nach einem anderen Prinzip neu geschrieben werden.
Eine effizientere Version der @ Patrice-Lösung , die eine Shell mit Unterstützung für die Prozessersetzung verwendet ( bash
, AT & T ksh
, zsh
):
(
export LC_ALL=C
comm -23 <(find / -xdev -type f | sort) \
<(sort -u /var/lib/dpkg/info/*.list)
)
Wie bei Patrices Lösung wird davon ausgegangen, dass kein Dateipfad Zeilenumbruchzeichen enthält.
locate
Datenbank schneller als die Ausführung find
? locate \* | grep -v "^/home/"
- hat auch den Vorteil, in /boot/
und andere Systempartitionen zu schauen .
Sie können auch die Prozessersetzung & grep
& verwenden find
. Beachten Sie, dass das grep
zweimal verwendet wird, um nur relevante Pfade zu filtern /var/lib/dpkg/info
, um einige Sekunden zu sparen, wenn Sie nach Dateien in einem bestimmten Verzeichnis suchen.
dir="/lib/x86_64-linux-gnu"
find "$dir" -type f \
| grep -v -x -F -f \
<(find '/var/lib/dpkg/info' -name '*.list' -print0 \
| xargs -0 grep -h -F "^$dir" \
| sort -u)
find: argument list too long