Jawaban:
In /var/lib/dpkg/infoadalah .listfile teks yang mencantumkan semua file yang terkandung dalam setiap paket¹ yang diinstal melalui manajer paket Debian.
Menemukan semua file di sistem file yang tidak cocok dengan entri apa pun di sana dapat dicapai dengan sesuatu yang naif seperti ini:
find / -xdev -type f \( -exec grep -xq "{}" /var/lib/dpkg/info/*.list \; -or -print \)
Ini jelas akan memakan waktu yang sangat lama karena seluruh sistem file akan dipindai. Jika Anda menggunakan partisi yang berbeda untuk direktori sistem (seperti /usratau /var), tentukan setelah partisi awal /.
Peringatan: Itu tidak termasuk file yang dibuat oleh skrip paket. Misalnya:
/etc/hosts.allowtidak terdaftar di mana pun tetapi mungkin berasal dari libwrap0yang mungkin membuatnya, jika file itu tidak ada pada saat instalasi paket..pycfile (dikompilasi perpustakaan Python), .elcfile (dikompilasi pustakawan Emacs Lisp), dll./var/lib/dpkg/info/*.list- kueri di atas perlu ditulis ulang di bawah beberapa prinsip lain.
Versi yang lebih efisien solusi @ Patrice , menggunakan shell dengan dukungan untuk substitusi proses ( bash, AT&T ksh, zsh):
(
export LC_ALL=C
comm -23 <(find / -xdev -type f | sort) \
<(sort -u /var/lib/dpkg/info/*.list)
)
Seperti solusi Patrice, ini mengasumsikan tidak ada jalur file yang berisi karakter baris baru.
locatebasis data lebih cepat daripada menjalankan find? locate \* | grep -v "^/home/"- Juga memiliki manfaat melihat ke dalam /boot/dan partisi sistem lainnya.
Anda juga dapat menggunakan subtitusi proses & grep& find. Perhatikan bahwa grepdigunakan dua kali untuk memfilter hanya jalur yang relevan dari /var/lib/dpkg/infountuk menghemat beberapa detik jika Anda mencari file di direktori tertentu.
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