Como descubro qual pacote possui um arquivo?

83

Como descubro de que pacote Debian um arquivo veio?

    
por A Student at a University 23.08.2010 / 12:23

5 respostas

39

Existem vários utilitários no Debian que executam esta tarefa; verifique esta página para uma descrição. Vou mencionar dois deles, apt-file e dlocate .

apt-file pesquisa seu cache interno, permitindo que você não instale todos os pacotes que deseja pesquisar. Abaixo você encontrará um guia mais detalhado.

dlocate é uma alternativa rápida para dpkg -L (o comando que lista o conteúdo do pacote) e, como tal, procura apenas os pacotes instalados. A pesquisa é realizada por dlocate -S file.name .

Além disso, você pode pesquisar pacotes on-line usando o packages.debian.org servidor (o Pesquise o conteúdo dos pacotes seção).

Instalando e usando apt-file

É uma boa ideia atualizar primeiro:

sudo apt-get update

Veja para que apt-file :

apt-cache show apt-file

Instale:

sudo apt-get install apt-file

Ler dados dos repositórios (isso também funciona sem sudo , mas cria o cache do usuário; com sudo o cache é todo o sistema):

sudo apt-file update

Realize a pesquisa. Neste exemplo, queremos saber em qual pacote xrandr executável é:

apt-file search xrandr

Relaciona muitos pacotes com unxrandr , lxrandr.mo ou source_lxrandr.py . Não é muito útil no nosso caso. Pesquisa mais inteligente:

apt-file search -x /xrandr$

( $ indica o fim da linha). Exemplo de saída:

bash-completion: /usr/share/bash-completion/completions/xrandr
x11-xserver-utils: /usr/bin/xrandr

O primeiro resultado não parece ser executável, o segundo não. Nós podemos investigar mais. Executar:

apt-cache show x11-xserver-utils

Bingo! Este é o pacote.

    
por 04.10.2016 / 08:44
90
user@host:~$ dpkg-query -S /bin/bash 
bash: /bin/bash

Onde bash é o nome do pacote.

    
por 23.08.2010 / 12:31
35

Outra alternativa:

$ dpkg -S /bin/bash
bash: /bin/bash

Pelo menos no meu Ubuntu, ambos parecem estar no pacote dpkg , então nenhuma vantagem real para um específico ...

    
por 26.03.2013 / 18:31
9

Os arquivos gerados pela instalação não serão encontrados por dpkg -S , como mencionado em: link

Por exemplo, /bin/nc aparece quando você instala o pacote netcat-openbsd .

Mas depois:

dpkg -S /bin/nc

obtemos dpkg-query: no path found matching pattern /bin/nc .

Isso acontece porque /bin/nc é gerado pela chamada update-alternatives no postst script que é executado após a instalação.

Funciona assim porque outra versão de /bin/nc é fornecida pelo pacote netcat-traditional .

Eu não acho que haja uma maneira geral de encontrar esses arquivos gerados. No caso específico de links simbólicos alternativos, podemos apenas seguir o link com readlink -f :

dpkg -S "$(readlink -f /bin/nc)"
    
por 13.04.2017 / 14:22
2

Não estando familiarizado com o Debian, fiquei perplexo quando tentei isso:

kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/vncviewer
dpkg-query: no path found matching pattern /usr/bin/vncviewer
kearnsp@xubuntuvb:~$ 

Um pouco de investigação e encontrei o pacote:

kearnsp@xubuntuvb:~$ ls -l /usr/bin/vncviewer
lrwxrwxrwx 1 root root 27 May 28 15:49 /usr/bin/vncviewer -> /etc/alternatives/vncviewer
kearnsp@xubuntuvb:~$ ls -l /etc/alternatives/vncviewer
lrwxrwxrwx 1 root root 20 May 28 15:49 /etc/alternatives/vncviewer -> /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/xvnc4viewer
xvnc4viewer: /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ 
    
por 28.05.2015 / 17:10