Você precisa perguntar a qualquer gerenciador de pacotes que poderia ter sido usado - apenas o gerenciador de pacotes armazena meta-informações sobre quais pacotes foram instalados e quais arquivos estão no pacote. Não há como obter essas informações de um arquivo nu.
Você não disse qual é o sabor da distribuição que você usa, mas eu recomendo sempre usar um único gerenciador de pacotes (apt para mim) e colocar coisas compiladas pelo usuário em outro lugar (para mim, /usr/local
, gerenciado com stow
, e eu mantenho uma lista de pacotes). Desta forma, é fácil descobrir em qual pacote um determinado arquivo pertence.
Se você usar uma dúzia de gerenciadores de pacotes ou algo assim (por quê?), você pode escrever um script que consulte cada um deles por vez.
Editar
Eu acompanho as coisas que eu compilei da fonte, fazendo um arquivo para cada pacote que eu compilei em /usr/local/packages/<packagename>
. Eu preciso disso de qualquer forma, porque contém informações sobre como eu o compilei (muitas vezes você precisa fazer ajustes, corrigir algumas coisas que não serão compiladas com um gcc mais novo, etc.) no caso de eu precisar compilá-lo novamente quando fizer o upgrade. E desde que eu tenho este arquivo, eu também adiciono informações sobre onde eu baixei o código fonte, qual versão ele é, o que ele faz, qual o nome do tarball fonte, etc. Eu acompanho os arquivos instalados instalando tudo em /usr/local/stow/<packagename>-<version>
(que às vezes também precisa de ajustes para Makefiles, ou ./configure --prefix
, etc.) e, em seguida, usa stow
para criar links para ele em /usr/local
. Eu descrevi isso em detalhes aqui .
Você também pode fazer pacotes realmente deb ou rpm a partir de coisas que você mesmo compila, mas isso é mais trabalho do que manter o controle com stow
.