Ответы:
В /var/lib/dpkg/infoэто .listтекстовые файлы, список все файлы , содержащиеся в каждом package¹ установлен через менеджер пакетов Debian.
Найти все файлы в файловой системе, не соответствующие ни одной записи, можно с помощью чего-то наивного:
find / -xdev -type f \( -exec grep -xq "{}" /var/lib/dpkg/info/*.list \; -or -print \)
Это, очевидно, займет очень много времени, так как будет проверена вся файловая система. Если вы используете разные разделы для системных каталогов (например, /usrили /var), укажите их после начальных /.
Предупреждение: это не включает файлы, созданные скриптами пакета. Например:
/etc/hosts.allowнигде не указан, но это может произойти из-за того, libwrap0что возможно его создал, если этот файл не существовал во время установки пакета..pycфайлы (скомпилированные библиотеки Python), .elcфайлы (скомпилированные библиотеки Emacs Lisp) и т. Д./var/lib/dpkg/info/*.list- вышеупомянутый запрос должен быть переписан по другому принципу.
Более эффективная версия решения @ Patrice , использующая оболочку с поддержкой подстановки процессов ( bash, AT & T ksh, zsh):
(
export LC_ALL=C
comm -23 <(find / -xdev -type f | sort) \
<(sort -u /var/lib/dpkg/info/*.list)
)
Как и решение Патриса, оно предполагает, что ни один путь к файлу не содержит символов новой строки.
locateбазы данных быстрее, чем работа find? locate \* | grep -v "^/home/"- также имеет преимущество просмотра /boot/и других системных разделов.
Вы также можете использовать процесс замены & grep& find. Обратите внимание, что grepдважды используется для фильтрации только соответствующих путей, /var/lib/dpkg/infoчтобы сэкономить несколько секунд, если вы ищете файлы в определенном каталоге.
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