Respostas:
Em /var/lib/dpkg/info
são .list
arquivos 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 /usr
ou /var
), especifique-as após a inicial /
.
Aviso: Isso não inclui arquivos criados por scripts de pacote. Por exemplo:
/etc/hosts.allow
não está listado em nenhum lugar, mas pode vir do libwrap0
que possivelmente o tenha criado, se esse arquivo não existisse no momento da instalação do pacote..pyc
arquivos (bibliotecas Python compiladas), .elc
arquivos ( 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.
locate
banco 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/info
e 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