Jawaban:
In /var/lib/dpkg/info
adalah .list
file 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 /usr
atau /var
), tentukan setelah partisi awal /
.
Peringatan: Itu tidak termasuk file yang dibuat oleh skrip paket. Misalnya:
/etc/hosts.allow
tidak terdaftar di mana pun tetapi mungkin berasal dari libwrap0
yang mungkin membuatnya, jika file itu tidak ada pada saat instalasi paket..pyc
file (dikompilasi perpustakaan Python), .elc
file (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.
locate
basis 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 grep
digunakan dua kali untuk memfilter hanya jalur yang relevan dari /var/lib/dpkg/info
untuk 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