Respostas:
Em /var/lib/dpkg/infosão .listarquivos de texto que lista todos os arquivos contidos em cada package¹ instalado através do gerenciador de pacotes do Debian.
Encontrar todos os arquivos no sistema de arquivos que não correspondam a nenhuma entrada pode ser alcançado com algo ingênuo como este:
find / -xdev -type f \( -exec grep -xq "{}" /var/lib/dpkg/info/*.list \; -or -print \)
Obviamente, isso levará muito tempo, pois todo o sistema de arquivos será verificado. Se você usar partições diferentes para diretórios do sistema (como /usrou /var), especifique-as após a inicial /.
Aviso: Isso não inclui arquivos criados por scripts de pacote. Por exemplo:
/etc/hosts.allownão está listado em nenhum lugar, mas pode vir do libwrap0que possivelmente o tenha criado, se esse arquivo não existisse no momento da instalação do pacote..pycarquivos (bibliotecas Python compiladas), .elcarquivos ( bibliotecas Emacs Lisp compiladas), etc./var/lib/dpkg/info/*.list- a consulta acima precisaria ser reescrita sob outro princípio.
Uma versão mais eficiente da @ solução de Patrice , usando um shell com suporte para substituição de processo ( bash, AT & T ksh, zsh):
(
export LC_ALL=C
comm -23 <(find / -xdev -type f | sort) \
<(sort -u /var/lib/dpkg/info/*.list)
)
Como a solução de Patrice, ela assume que nenhum caminho de arquivo contém caracteres de nova linha.
locatebanco de dados seria mais rápido do que em execução find? locate \* | grep -v "^/home/"- também tem o benefício de procurar /boot/e outras partições do sistema.
Você também pode usar a substituição do processo & grep& find. Observe que ele grepé usado duas vezes para filtrar apenas caminhos relevantes /var/lib/dpkg/infoe economizar alguns segundos se você estiver procurando por arquivos em um determinado diretório.
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