Risposte:
In /var/lib/dpkg/info
sono .list
file di testo che elencano tutti i file contenuti in ciascun pacchetto¹ installati tramite il gestore pacchetti Debian.
Trovare tutti i file nel filesystem che non corrispondono a nessuna voce può essere ottenuto con qualcosa di ingenuo come questo:
find / -xdev -type f \( -exec grep -xq "{}" /var/lib/dpkg/info/*.list \; -or -print \)
Ciò richiederà ovviamente molto tempo poiché verrà esaminato l'intero filesystem. Se si utilizzano partizioni diverse per le directory di sistema (come /usr
o /var
), specificarle dopo l'iniziale /
.
Avvertenza: ciò non include i file creati dagli script dei pacchetti. Per esempio:
/etc/hosts.allow
non è elencato da nessuna parte, ma potrebbe derivarne da libwrap0
quello eventualmente creato, se quel file non esistesse al momento dell'installazione del pacchetto..pyc
file (librerie Python compilate), .elc
file ( librerie Emacs Lisp compilate), ecc./var/lib/dpkg/info/*.list
- la query sopra dovrebbe essere riscritta in base ad altri principi.
Una versione più efficiente della soluzione di @ Patrice , utilizzando una shell con supporto per la sostituzione dei processi ( bash
, AT&T ksh
, zsh
):
(
export LC_ALL=C
comm -23 <(find / -xdev -type f | sort) \
<(sort -u /var/lib/dpkg/info/*.list)
)
Come la soluzione di Patrice, presuppone che nessun percorso di file contenga caratteri di nuova riga.
locate
database sarebbe più veloce dell'esecuzione find
? locate \* | grep -v "^/home/"
- ha anche il vantaggio di guardare dentro /boot/
e altre partizioni di sistema.
Puoi anche usare la sostituzione di processo & grep
& find
. Si noti che grep
viene utilizzato due volte per filtrare solo i percorsi rilevanti da cui /var/lib/dpkg/info
salvare alcuni secondi se si cercano file in una determinata directory.
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